From 91d7f83b484623f1c775156b2afdc2b6a2b2de98 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 15 Sep 2022 12:43:27 +0800 Subject: [PATCH 001/482] Add change for dummy commit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 71c9194e8bd..82435a1fa98 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ src/test/data/sandbox/ # MacOS custom attributes files created by Finder .DS_Store docs/_site/ + From b8716cb55230630e0f41feae69cc4936ab6b34b0 Mon Sep 17 00:00:00 2001 From: Adriel Soh <77948783+leirdas@users.noreply.github.com> Date: Wed, 28 Sep 2022 15:34:58 +0800 Subject: [PATCH 002/482] Update UserGuide.md --- docs/UserGuide.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3716f3ca8a4..8e3b34ab323 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -3,7 +3,7 @@ layout: page title: User Guide --- -AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Command 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. +TutHub is a **desktop app for tech-savvy tuition agents who want to keep track of hundreds of tutors’ profiles in a more organised and systematic way compared to excel sheets, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). * Table of Contents {:toc} @@ -150,17 +150,17 @@ Format: `clear` ### Exiting the program : `exit` -Exits the program. +Exits TutHub program. Format: `exit` ### Saving the data -AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually. +TutHub data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually. ### Editing the data file -AddressBook data are saved as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file. +TutHub data are saved as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.
:exclamation: **Caution:** If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. @@ -190,3 +190,4 @@ Action | Format, Examples **Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` **List** | `list` **Help** | `help` +**Exit** | `exit` From 47a9dcfe401ee84678af8a83e4a439b7f2c090b2 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 28 Sep 2022 15:56:06 +0800 Subject: [PATCH 003/482] Update site-wide settings --- docs/_config.yml | 4 ++-- docs/_sass/minima/_base.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 6bd245d8f4e..60cd8dc5279 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,4 +1,4 @@ -title: "AB-3" +title: "TutHub" theme: minima header_pages: @@ -8,7 +8,7 @@ header_pages: markdown: kramdown -repository: "se-edu/addressbook-level3" +repository: "AY2223S1-CS2103T-T15-3/tp" github_icon: "images/github-icon.png" plugins: diff --git a/docs/_sass/minima/_base.scss b/docs/_sass/minima/_base.scss index 0d3f6e80ced..2d192011e37 100644 --- a/docs/_sass/minima/_base.scss +++ b/docs/_sass/minima/_base.scss @@ -288,7 +288,7 @@ table { text-align: center; } .site-header:before { - content: "AB-3"; + content: "TutHub"; font-size: 32px; } } From 5fcd1c32f14516a58511cc9ce616e7fbc4da7e33 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 28 Sep 2022 16:24:55 +0800 Subject: [PATCH 004/482] Update exit feature of user guide --- docs/UserGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 8e3b34ab323..ee6a0f5dea8 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -32,7 +32,7 @@ TutHub is a **desktop app for tech-savvy tuition agents who want to keep track o * **`clear`** : Deletes all contacts. - * **`exit`** : Exits the app. + * **`exit`** : Exits the TutHub app. 1. Refer to the [Features](#features) below for details of each command. @@ -150,7 +150,7 @@ Format: `clear` ### Exiting the program : `exit` -Exits TutHub program. +Exits TutHub app. Format: `exit` From 8a3f7f36ef8f5aeb7bd03cc89e8882b2d7731a16 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Wed, 28 Sep 2022 16:42:38 +0800 Subject: [PATCH 005/482] Add AboutUs details --- docs/AboutUs.md | 8 ++++---- docs/images/fannyjian.png | Bin 0 -> 1355129 bytes docs/team/fannyjian.md | 0 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 docs/images/fannyjian.png create mode 100644 docs/team/fannyjian.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 1c9514e966a..001904e375a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -40,13 +40,13 @@ You can reach us at the email `seer[at]comp.nus.edu.sg` ### Jean Doe - + -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](http://github.com/fannyjian)] +[[portfolio](team/fannyjian.md)] * Role: Developer -* Responsibilities: Dev Ops + Threading +* Responsibilities: Ui + Documentation ### James Doe diff --git a/docs/images/fannyjian.png b/docs/images/fannyjian.png new file mode 100644 index 0000000000000000000000000000000000000000..038965b0ab77e45c2db9f798906edb635e5f21d1 GIT binary patch literal 1355129 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

`a_Mm0dAsbqifeh{*uya#XlI2}_Y@1wc+Z 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

JuxWXRgG%SqhtwI+Y&e;ua66s!UR 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 ?!DA7Io5}ek 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%0D1qcgt&Ka#D7FFdy$kIi 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

@@ -68,9 +65,9 @@ TutHub is a **desktop app for tech-savvy tuition agents who want to keep track o [coming soon] -### Adding a person: `add` +### Adding a tutor: `add` -Adds a person to the address book. +Adds a tutor to the Tuthub. Format: `add n/NAME p/PHONE_NUMBER g/GENDER e/EMAIL s/SALARY [t/TAG]…​` @@ -82,23 +79,23 @@ Examples: * `add n/John Doe p/98765432 g/M e/johnd@example.com s/40` * `add n/Betsy Crowe t/s2chem g/F e/betsycrowe@example.com s/30 p/1234567 t/s2math` -### Listing all persons : `list` +### Listing all tutors : `list` Shows a list of all tutors registered in TutHub. Format: `list` -### Editing a person : `edit` +### Editing a tutor : `edit` [coming soon] -### Locating persons by name: `find` +### Locating tutor by name: `find` [coming soon] -### Deleting a person : `delete` +### Deleting a tutor : `delete` -Deletes the specified person from the address book. +Deletes the specified tutor from Tuthub. Format: `delete INDEX` @@ -107,7 +104,7 @@ Format: `delete INDEX` * The index **must be a positive integer** 1, 2, 3, …​ Examples: -* `list` followed by `delete 2` deletes the 2nd person in the address book. +* `list` followed by `delete 2` deletes the 2nd person in Tuthub. * `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command. ### Clearing all entries : `clear` @@ -137,7 +134,7 @@ _Details coming soon ..._ ## FAQ **Q**: How do I transfer my data to another Computer?
-**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. +**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 Tuthub home folder. -------------------------------------------------------------------------------------------------------------------- @@ -145,7 +142,7 @@ _Details coming soon ..._ Action | Format, Examples --------|------------------ -**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` +**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/Betsy Crowe t/s2chem g/F e/betsycrowe@example.com s/30 p/1234567 t/s2math` **Delete** | `delete INDEX`
e.g., `delete 3` **List** | `list` **Save** | `save` From 741e3a344c2be76ce18d16b2ce0bdbdd4ba71027 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Fri, 30 Sep 2022 18:31:19 +0800 Subject: [PATCH 030/482] Update docs/index.md with Tuthub information --- docs/index.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/index.md b/docs/index.md index 7601dbaad0d..03296e8a48d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,18 @@ --- layout: page -title: AddressBook Level-3 +title: Tuthub --- -[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) -[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3) +[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2223S1-CS2103T-T15-3/tp/actions) +[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://app.codecov.io/gh/AY2223S1-CS2103T-T15-3/tp) ![Ui](images/Ui.png) -**AddressBook is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface). + +**Tuthub is a desktop app for tech-savvy tuition agents who want to keep track of hundreds of tutors’ profiles in a more organised and systematic way compared to excel sheets.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface). * If you are interested in using AddressBook, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start). -* If you are interested about developing AddressBook, the [**Developer Guide**](DeveloperGuide.html) is a good place to start. +* If you are interested about developing Tuthub, the [**Developer Guide**](DeveloperGuide.html) is a good place to start. **Acknowledgements** From 747d4a9a0a9b1e6eed6dd1d3f82c5d18e6497feb Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Fri, 30 Sep 2022 22:59:25 +0800 Subject: [PATCH 031/482] Add use cases --- docs/DeveloperGuide.md | 67 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 6ad2735c656..c2d513b0080 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -23,7 +23,7 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md).
-:bulb: **Tip:** The `.puml` files used to create diagrams in this document can be found in the [diagrams](https://github.com/se-edu/addressbook-level3/tree/master/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. +:bulb: **Tip:** The `.puml` files used to create diagrams in this document can be found in the [diagrams](https://github.com/AY2223S1-CS2103T-T15-3/tp/tree/master/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.
### Architecture @@ -36,7 +36,7 @@ Given below is a quick overview of main components and how they interact with ea **Main components of the architecture** -**`Main`** has two classes called [`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). It is responsible for, +**`Main`** has two classes called [`Main`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/MainApp.java). It is responsible for, * At app launch: Initializes the components in the correct sequence, and connects them up with each other. * At shut down: Shuts down the components and invokes cleanup methods where necessary. @@ -69,13 +69,13 @@ The sections below give more details of each component. ### UI component -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) +The **API** of this component is specified in [`Ui.java`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/ui/Ui.java) ![Structure of the UI Component](images/UiClassDiagram.png) 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. -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) +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/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/resources/view/MainWindow.fxml) The `UI` component, @@ -86,7 +86,7 @@ The `UI` component, ### Logic component -**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java) +**API** : [`Logic.java`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/logic/Logic.java) Here's a (partial) class diagram of the `Logic` component: @@ -114,7 +114,7 @@ How the parsing works: * 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. ### Model component -**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) +**API** : [`Model.java`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/model/Model.java) @@ -135,7 +135,7 @@ The `Model` component, ### Storage component -**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) +**API** : [`Storage.java`](https://github.com/AY2223S1-CS2103T-T15-3/tp/blob/master/src/main/java/seedu/address/storage/Storage.java) @@ -288,16 +288,50 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli ### Use cases -(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise) +(For all use cases below, the **System** is `Tuthub` and the **Actor** is the `user`, unless specified otherwise) -**Use case: Delete a person** +**Use case: UC1 - Listing all tutor profiles** **MSS** 1. User requests to list persons -2. AddressBook shows a list of persons +2. Tuthub shows a list of persons + + Use case ends. + +**Extensions** + +* 2a. The list is empty. + + Use case ends. + +**Use case: UC2 - Add a person** + +**MSS** + +1. User requests to add a tutor profile in the list +2. Tuthub shows the list of tutors with the new tutor profile added + + Use case ends. + +**Extensions** + +* 1a. Tuthub detects an error in the entered data. + * 1a1. Tuthub requests for the correct data. + * 1a2. User enters new data. + * Steps 1a1-1a2 are repeated until the data entered are correct. + Use case resumes from step 2. + + Use case ends. + +**Use case: UC3 - Delete a person** + +**MSS** + +1. User requests to list persons +2. Tuthub shows a list of persons 3. User requests to delete a specific person in the list -4. AddressBook deletes the person +4. Tuthub deletes the person Use case ends. @@ -309,10 +343,19 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * 3a. The given index is invalid. - * 3a1. AddressBook shows an error message. + * 3a1. Tuthub shows an error message. Use case resumes at step 2. +**Use case: UC4 - Exit the program** + +**MSS** + +1. User requests to exit Tuthub +2. Tuthub saves list of tutor profiles in hard disk + + Use case ends. + *{More to be added}* ### Non-Functional Requirements From 075f1764917e98877f590ad279f52d4127498c05 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Fri, 30 Sep 2022 23:16:40 +0800 Subject: [PATCH 032/482] Add glossary --- docs/DeveloperGuide.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c2d513b0080..588e6d18c05 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -360,9 +360,9 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli ### Non-Functional Requirements -1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. -2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. -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. +1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. +2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. +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. *{More to be added}* @@ -370,6 +370,7 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * **Mainstream OS**: Windows, Linux, Unix, OS-X * **Private contact detail**: A contact detail that is not meant to be shared with others +* **Tutor Profile**: A profile containing the tutor's details, such as `NAME`, `PHONE_NUMBER`, `GENDER`, `EMAIL`, etc. -------------------------------------------------------------------------------------------------------------------- From ed6ce802108aa14455170d0b4c904256012e4789 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Fri, 30 Sep 2022 23:42:29 +0800 Subject: [PATCH 033/482] Add NFRs --- docs/DeveloperGuide.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 588e6d18c05..fc014e3d95c 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -363,6 +363,12 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli 1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. 2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. 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. +4. Performance requirement: The system should respond within a second. +5. Technical requirement: The system should work on both 32-bit and 64-bit environments. +6. Constraints: The product should be for a single user i.e. (not a multi-user product). +7. Constraints: The product needs to be developed in a breadth-first incremental manner over the project duration. +8. Constraints: The data should be stored locally and should be in a human editable text file. +9. Constraints: The file size of the deliverables should be reasonable. Product (i.e. JAR/ZIP file) should not exceed 100 MB. Documents (i.e. PDF files) should not exceed 150 MB. *{More to be added}* From 34bc447fb43e419d20e77c6f2622479b58de78b3 Mon Sep 17 00:00:00 2001 From: leirdas Date: Sat, 1 Oct 2022 12:12:52 +0800 Subject: [PATCH 034/482] Add minor changes to DG --- docs/DeveloperGuide.md | 55 +++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index fc014e3d95c..f4acb295663 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -292,10 +292,15 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Use case: UC1 - Listing all tutor profiles** +System: TutHub
+Use case: UC1 - Listing all tutor profiles
+Actor: User
+Guarantees: All stored user profiles to be shown. (if any) + **MSS** -1. User requests to list persons -2. Tuthub shows a list of persons +1. User requests to list persons. +2. Tuthub shows a list of persons. Use case ends. @@ -307,10 +312,15 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Use case: UC2 - Add a person** +System: TutHub
+Use case: UC2 - Add tutor profile
+Actor: User
+Guarantees: Tutor profile will be stored when user correctly inputs details. + **MSS** -1. User requests to add a tutor profile in the list -2. Tuthub shows the list of tutors with the new tutor profile added +1. User requests to add a tutor profile in the list. +2. Tuthub shows the list of tutors with the new tutor profile added. Use case ends. @@ -326,12 +336,17 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Use case: UC3 - Delete a person** +System: TutHub
+Use case: UC3 - Deleting a tutor profile
+Actor: User
+Guarantees: Tutor profile will be deleted. + **MSS** -1. User requests to list persons -2. Tuthub shows a list of persons -3. User requests to delete a specific person in the list -4. Tuthub deletes the person +1. User requests to list persons. +2. Tuthub shows a list of persons. +3. User requests to delete a specific person in the list. +4. Tuthub deletes the person. Use case ends. @@ -349,10 +364,15 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli **Use case: UC4 - Exit the program** +System: TutHub
+Use case: UC4 - Exit TutHub
+Actor: User
+Guarantees: TutHub application will close. + **MSS** -1. User requests to exit Tuthub -2. Tuthub saves list of tutor profiles in hard disk +1. User requests to exit Tuthub. +2. Tuthub saves list of tutor profiles in hard disk. Use case ends. @@ -362,13 +382,14 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli 1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. 2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. -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. -4. Performance requirement: The system should respond within a second. -5. Technical requirement: The system should work on both 32-bit and 64-bit environments. -6. Constraints: The product should be for a single user i.e. (not a multi-user product). -7. Constraints: The product needs to be developed in a breadth-first incremental manner over the project duration. -8. Constraints: The data should be stored locally and should be in a human editable text file. -9. Constraints: The file size of the deliverables should be reasonable. Product (i.e. JAR/ZIP file) should not exceed 100 MB. Documents (i.e. PDF files) should not exceed 150 MB. +3. Should work without internet connection. +4. 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. +5. Performance requirement: The system should respond within a second. +6. Technical requirement: The system should work on both 32-bit and 64-bit environments. +7. Constraints: The product should be for a single user i.e. (not a multi-user product). +8. Constraints: The product needs to be developed in a breadth-first incremental manner over the project duration. +9. Constraints: The data should be stored locally and should be in a human editable text file. +10. Constraints: The file size of the deliverables should be reasonable. Product (i.e. JAR/ZIP file) should not exceed 100 MB. Documents (i.e. PDF files) should not exceed 150 MB. *{More to be added}* From 9cafadac932387da4a6bd508889cfe4c9f9214b6 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Mon, 3 Oct 2022 11:21:26 +0800 Subject: [PATCH 035/482] Update list success message --- src/main/java/seedu/address/logic/commands/ListCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 84be6ad2596..54600bf3d72 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -12,7 +12,7 @@ public class ListCommand extends Command { public static final String COMMAND_WORD = "list"; - public static final String MESSAGE_SUCCESS = "Listed all persons"; + public static final String MESSAGE_SUCCESS = "Listed all tutor profiles"; @Override From 781de0d3c025c527bb2b4d5bb83de89d392f6a28 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Fri, 7 Oct 2022 12:13:50 +0800 Subject: [PATCH 036/482] Include command table in help window --- .../java/seedu/address/ui/HelpWindow.java | 12 ++++- src/main/resources/images/help_table.png | Bin 0 -> 106387 bytes src/main/resources/view/HelpWindow.fxml | 43 ++++++++++-------- 3 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/images/help_table.png diff --git a/src/main/java/seedu/address/ui/HelpWindow.java b/src/main/java/seedu/address/ui/HelpWindow.java index 3f16b2fcf26..2da3b1216b2 100644 --- a/src/main/java/seedu/address/ui/HelpWindow.java +++ b/src/main/java/seedu/address/ui/HelpWindow.java @@ -1,10 +1,13 @@ package seedu.address.ui; +import static seedu.address.commons.util.AppUtil.getImage; + import java.util.logging.Logger; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; +import javafx.scene.image.ImageView; import javafx.scene.input.Clipboard; import javafx.scene.input.ClipboardContent; import javafx.stage.Stage; @@ -15,15 +18,19 @@ */ public class HelpWindow extends UiPart { - public static final String USERGUIDE_URL = "https://se-education.org/addressbook-level3/UserGuide.html"; - public static final String HELP_MESSAGE = "Refer to the user guide: " + USERGUIDE_URL; + public static final String USERGUIDE_URL = "https://ay2223s1-cs2103t-t15-3.github.io/tp/UserGuide.html"; + public static final String HELP_MESSAGE = "For more details, refer to the user guide: \n" + USERGUIDE_URL; private static final Logger logger = LogsCenter.getLogger(HelpWindow.class); private static final String FXML = "HelpWindow.fxml"; + private static final String HELP_TABLE = "/images/help_table.png"; @FXML private Button copyButton; + @FXML + private ImageView helpTable; + @FXML private Label helpMessage; @@ -34,6 +41,7 @@ public class HelpWindow extends UiPart { */ public HelpWindow(Stage root) { super(FXML, root); + helpTable.setImage(getImage(HELP_TABLE)); helpMessage.setText(HELP_MESSAGE); } diff --git a/src/main/resources/images/help_table.png b/src/main/resources/images/help_table.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0542026d8ebb32cfff185214024b9919c9b86f GIT binary patch literal 106387 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
J(; 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 + + @@ -19,26 +21,29 @@ - + + + - - - - - - - - - - + + + + + + + + + + + From 30498c5d8cf17234f24ea64f9f7ce3d25e0b3ae7 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Fri, 7 Oct 2022 15:55:24 +0800 Subject: [PATCH 037/482] Update delete messages --- src/main/java/seedu/address/logic/commands/DeleteCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index 02fd256acba..98e05dbf25a 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -18,11 +18,11 @@ public class DeleteCommand extends Command { public static final String COMMAND_WORD = "delete"; public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Deletes the person identified by the index number used in the displayed person list.\n" + + ": Deletes the tutor identified by the index number used in the displayed tutor list.\n" + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1"; - public static final String MESSAGE_DELETE_PERSON_SUCCESS = "Deleted Person: %1$s"; + public static final String MESSAGE_DELETE_PERSON_SUCCESS = "Deleted Tutor: %1$s"; private final Index targetIndex; From a3da662f748835a053942867fe3db483066e6b7e Mon Sep 17 00:00:00 2001 From: leirdas Date: Fri, 7 Oct 2022 17:09:44 +0800 Subject: [PATCH 038/482] Edit exit command --- src/main/java/seedu/address/logic/commands/ExitCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/logic/commands/ExitCommand.java b/src/main/java/seedu/address/logic/commands/ExitCommand.java index 3dd85a8ba90..7a4d5980135 100644 --- a/src/main/java/seedu/address/logic/commands/ExitCommand.java +++ b/src/main/java/seedu/address/logic/commands/ExitCommand.java @@ -9,7 +9,7 @@ public class ExitCommand extends Command { public static final String COMMAND_WORD = "exit"; - public static final String MESSAGE_EXIT_ACKNOWLEDGEMENT = "Exiting Address Book as requested ..."; + public static final String MESSAGE_EXIT_ACKNOWLEDGEMENT = "Exiting TutHub... Good Bye!"; @Override public CommandResult execute(Model model) { From 200baae32a3f4c9dd3206d9ded2bc7954d676328 Mon Sep 17 00:00:00 2001 From: jia-han Date: Fri, 7 Oct 2022 21:37:08 +0800 Subject: [PATCH 039/482] Update user guide --- docs/UserGuide.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index be2a64445b6..f0b0480790b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -3,7 +3,7 @@ layout: page title: User Guide --- -TutHub is a **desktop app for tech-savvy tuition agents who want to keep track of hundreds of tutors’ profiles in a more organised and systematic way compared to excel sheets, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). +TutHub is a **desktop app for NUS School of Computing professors who have to keep track of hundreds of teaching assistant/tutor profiles and monitor their performance and track records but have little time to spare for tedious administrative work. It is optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). * Table of Contents {:toc} @@ -24,15 +24,15 @@ TutHub is a **desktop app for tech-savvy tuition agents who want to keep track o 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.
Some example commands you can try: - * **`list`** : Lists all contacts. + * **`list`** : Lists all tutors. - * **`add`**`n/John Doe p/98765432 g/M e/johnd@example.com s/40` : Adds a contact named `John Doe` to Tuthub. + * **`add`**`n/John Doe p/98765432 e/johnd@example.com y/3 m/CS2103T` : Adds a tutor named `John Doe` to Tuthub. - * **`delete`**`3` : Deletes the 3rd contact shown in the current list. + * **`delete`**`3` : Deletes the 3rd tutor shown in the current list. * **`save`** : Saves the data to your local device. - * **`clear`** : Deletes all contacts. + * **`clear`** : Deletes all tutors. * **`exit`** : Exits the TutHub app. @@ -50,10 +50,10 @@ TutHub is a **desktop app for tech-savvy tuition agents who want to keep track o e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. * Items in square brackets are optional.
- e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/s2math` or as `n/John Doe`. + e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/` or as `n/John Doe`. * Items with `…`​ after them can be used multiple times including zero times.
- e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/s2math`, `t/s2math t/s2chem` etc. + e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/senior`, `t/senior t/great` etc. * Parameters can be in any order.
e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable. @@ -71,15 +71,15 @@ TutHub is a **desktop app for tech-savvy tuition agents who want to keep track o Adds a tutor to the Tuthub. -Format: `add n/NAME p/PHONE_NUMBER g/GENDER e/EMAIL s/SALARY [t/TAG]…​` +Format: `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
:bulb: **Tip:** A person can have any number of tags (including 0)
Examples: -* `add n/John Doe p/98765432 g/M e/johnd@example.com s/40` -* `add n/Betsy Crowe t/s2chem g/F e/betsycrowe@example.com s/30 p/1234567 t/s2math` +* `add n/John Doe p/98765432 e/johnd@example.com y/3 m/CS2100` +* `add n/Betsy Crowe t/senior ta e/betsycrowe@example.com y/3 m/CS1101S p/1234567` ### Listing all tutors : `list` @@ -97,7 +97,7 @@ Format: `list` ### Deleting a tutor : `delete` -Deletes the specified tutor from Tuthub. +Deletes the specified tutors from Tuthub. Format: `delete INDEX` @@ -142,10 +142,10 @@ _Details coming soon ..._ ## Command summary -Action | Format, Examples ---------|------------------ -**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/Betsy Crowe t/s2chem g/F e/betsycrowe@example.com s/30 p/1234567 t/s2math` -**Delete** | `delete INDEX`
e.g., `delete 3` -**List** | `list` -**Save** | `save` -**Exit** | `exit` +| Action | Format, Examples | +|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
e.g., `add n/Betsy Crowe t/ e/betsycrowe@example.com p/1234567 y/3 m/CS1101S t/senior` | +| **Delete** | `delete INDEX`
e.g., `delete 3` | +| **List** | `list` | +| **Save** | `save` | +| **Exit** | `exit` | From 3434ed4c52f523a0b054571835e09a7ab565d07c Mon Sep 17 00:00:00 2001 From: jia-han Date: Fri, 7 Oct 2022 21:42:09 +0800 Subject: [PATCH 040/482] Update developer guide --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index f4acb295663..77c9351d605 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -397,7 +397,7 @@ Guarantees: TutHub application will close. * **Mainstream OS**: Windows, Linux, Unix, OS-X * **Private contact detail**: A contact detail that is not meant to be shared with others -* **Tutor Profile**: A profile containing the tutor's details, such as `NAME`, `PHONE_NUMBER`, `GENDER`, `EMAIL`, etc. +* **Tutor Profile**: A profile containing the tutor's details, such as `NAME`, `PHONE_NUMBER`, `YEAR`, `EMAIL`, `MODULE`, etc. -------------------------------------------------------------------------------------------------------------------- From 38720975c8ce258ed6d1be3c2d5cec4eb71a9073 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Mon, 10 Oct 2022 19:05:11 +0800 Subject: [PATCH 041/482] Update index.md with new info --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 03296e8a48d..e2477d16187 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,9 +9,9 @@ title: Tuthub ![Ui](images/Ui.png) -**Tuthub is a desktop app for tech-savvy tuition agents who want to keep track of hundreds of tutors’ profiles in a more organised and systematic way compared to excel sheets.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface). +TutHub is a **desktop app for NUS School of Computing professors who have to keep track of hundreds of teaching assistant/tutor profiles and monitor their performance and track records but have little time to spare for tedious administrative work.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface). -* If you are interested in using AddressBook, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start). +* If you are interested in using Tuthub, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start). * If you are interested about developing Tuthub, the [**Developer Guide**](DeveloperGuide.html) is a good place to start. From 5c894e822bdcf20c5dbe1564008e4649e32be4bf Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Mon, 10 Oct 2022 19:13:59 +0800 Subject: [PATCH 042/482] Update UG with new info --- docs/UserGuide.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index f0b0480790b..140527e7da1 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -93,7 +93,14 @@ Format: `list` ### Locating tutor by name: `find` -[coming soon] +Finds tutor whose names contain any of the given keywords. + +Format: `find KEYWORD [MORE_KEYWORDS]` +* The search is case-insensitive. e.g hans will match Hans +* The order of the keywords does not matter. e.g. Hans Bo will match Bo Hans +* Only the name is searched. +* Only full words will be matched e.g. Han will not match Hans +* Persons matching at least one keyword will be returned (i.e. OR search). e.g. Hans Bo will return Hans Gruber, Bo Yang ### Deleting a tutor : `delete` From 8ec1cbf42e0423bab831685616fa8691a9d57f80 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Mon, 10 Oct 2022 19:17:08 +0800 Subject: [PATCH 043/482] Update DG with new info --- docs/DeveloperGuide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index f4acb295663..78be6f3cef7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -126,7 +126,7 @@ 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) -
: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.
+
:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `Tuthub`, which `Person` references. This allows `Tuthub` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
@@ -158,7 +158,7 @@ This section describes some noteworthy details on how certain features are imple #### Proposed Implementation -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: +The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `Tuthub` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations: * `VersionedAddressBook#commit()` — Saves the current address book state in its history. * `VersionedAddressBook#undo()` — Restores the previous address book state from its history. @@ -188,7 +188,7 @@ Step 4. The user now decides that adding the person was a mistake, and decides t ![UndoRedoState3](images/UndoRedoState3.png) -
: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 +
:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial Tuthub state, then there are no previous Tuthub 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 than attempting to perform the undo.
@@ -203,7 +203,7 @@ The following sequence diagram shows how the undo operation works: 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. -
: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. +
:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone Tuthub 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.
From 4d31bcc0e1b604a9956476ce35de999f66df8e54 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Mon, 10 Oct 2022 21:00:58 +0800 Subject: [PATCH 044/482] Add StudentID model, add tests for StudentID --- .../seedu/address/model/person/StudentID.java | 58 +++++++++++++++++++ .../address/model/person/StudentIDTest.java | 55 ++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 src/main/java/seedu/address/model/person/StudentID.java create mode 100644 src/test/java/seedu/address/model/person/StudentIDTest.java diff --git a/src/main/java/seedu/address/model/person/StudentID.java b/src/main/java/seedu/address/model/person/StudentID.java new file mode 100644 index 00000000000..afb0f94faec --- /dev/null +++ b/src/main/java/seedu/address/model/person/StudentID.java @@ -0,0 +1,58 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Tutor's ID in Tuthub. + * Guarantees: immutable; is valid as declared in {@link #isValidID(String)} + */ +public class StudentID { + + public static final String MESSAGE_CONSTRAINTS = "Student IDs should start with A, followed by " + + "7 numbers, and end with any capital letter"; + + /* + * The first character of the address must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String VALIDATION_REGEX = "(^A)\\d{7}[A-Z]$"; + + public final String value; + + /** + * Constructs a {@code StudentID}. + * + * @param studentID A valid Student ID. + */ + public StudentID(String studentID) { + requireNonNull(studentID); + checkArgument(isValidID(studentID), MESSAGE_CONSTRAINTS); + value = studentID; + } + + /** + * Returns true if a given string is a valid email. + */ + public static boolean isValidID(String test) { + return test.matches(VALIDATION_REGEX); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof StudentID // instanceof handles nulls + && value.equals(((StudentID) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } + +} diff --git a/src/test/java/seedu/address/model/person/StudentIDTest.java b/src/test/java/seedu/address/model/person/StudentIDTest.java new file mode 100644 index 00000000000..d6dba95c8e6 --- /dev/null +++ b/src/test/java/seedu/address/model/person/StudentIDTest.java @@ -0,0 +1,55 @@ +package seedu.address.model.person; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.testutil.Assert.assertThrows; + +import org.junit.jupiter.api.Test; + +public class StudentIDTest { + + @Test + public void constructor_null_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> new StudentID(null)); + } + + @Test + public void constructor_invalidID_throwsIllegalArgumentException() { + String invalidID1 = ""; + assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID1)); + + String invalidID2 = "C1234567A"; + assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID2)); + + String invalidID3 = "A123X"; + assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID3)); + + String invalidID4 = "1234567P"; + assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID4)); + + String invalidID5 = "A12345678"; + assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID5)); + + } + + @Test + public void isValidAddress() { + // null student id + assertThrows(NullPointerException.class, () -> StudentID.isValidID(null)); + + // invalid student ids + assertFalse(StudentID.isValidID("")); // empty string + assertFalse(StudentID.isValidID(" ")); // spaces only + assertFalse(StudentID.isValidID("123")); // 3 numbers only + assertFalse(StudentID.isValidID("123456789")); // starts with number + assertFalse(StudentID.isValidID("C1234567A")); // does not start with A + assertFalse(StudentID.isValidID("A123456C")); // 6 numbers only + assertFalse(StudentID.isValidID("A12345678")); // ends with number + assertFalse(StudentID.isValidID("A1234567899B")); // too many numbers + + // valid student ids + assertTrue(StudentID.isValidID("A1234567A")); + assertTrue(StudentID.isValidID("A0000000Y")); + assertTrue(StudentID.isValidID("A0297654M")); + } +} From 9e59ee5b99724ef08e5fbeb8a6328daaea5625e1 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Mon, 10 Oct 2022 21:13:39 +0800 Subject: [PATCH 045/482] Fix classes to follow Checkstyle --- .../person/{StudentID.java => StudentId.java} | 20 +++---- .../address/model/person/StudentIDTest.java | 55 ------------------- .../address/model/person/StudentIdTest.java | 55 +++++++++++++++++++ 3 files changed, 65 insertions(+), 65 deletions(-) rename src/main/java/seedu/address/model/person/{StudentID.java => StudentId.java} (73%) delete mode 100644 src/test/java/seedu/address/model/person/StudentIDTest.java create mode 100644 src/test/java/seedu/address/model/person/StudentIdTest.java diff --git a/src/main/java/seedu/address/model/person/StudentID.java b/src/main/java/seedu/address/model/person/StudentId.java similarity index 73% rename from src/main/java/seedu/address/model/person/StudentID.java rename to src/main/java/seedu/address/model/person/StudentId.java index afb0f94faec..f56d643c69e 100644 --- a/src/main/java/seedu/address/model/person/StudentID.java +++ b/src/main/java/seedu/address/model/person/StudentId.java @@ -5,9 +5,9 @@ /** * Represents a Tutor's ID in Tuthub. - * Guarantees: immutable; is valid as declared in {@link #isValidID(String)} + * Guarantees: immutable; is valid as declared in {@link #isValidId(String)} */ -public class StudentID { +public class StudentId { public static final String MESSAGE_CONSTRAINTS = "Student IDs should start with A, followed by " + "7 numbers, and end with any capital letter"; @@ -23,18 +23,18 @@ public class StudentID { /** * Constructs a {@code StudentID}. * - * @param studentID A valid Student ID. + * @param studentId A valid Student ID. */ - public StudentID(String studentID) { - requireNonNull(studentID); - checkArgument(isValidID(studentID), MESSAGE_CONSTRAINTS); - value = studentID; + public StudentId(String studentId) { + requireNonNull(studentId); + checkArgument(isValidId(studentId), MESSAGE_CONSTRAINTS); + value = studentId; } /** * Returns true if a given string is a valid email. */ - public static boolean isValidID(String test) { + public static boolean isValidId(String test) { return test.matches(VALIDATION_REGEX); } @@ -46,8 +46,8 @@ public String toString() { @Override public boolean equals(Object other) { return other == this // short circuit if same object - || (other instanceof StudentID // instanceof handles nulls - && value.equals(((StudentID) other).value)); // state check + || (other instanceof StudentId // instanceof handles nulls + && value.equals(((StudentId) other).value)); // state check } @Override diff --git a/src/test/java/seedu/address/model/person/StudentIDTest.java b/src/test/java/seedu/address/model/person/StudentIDTest.java deleted file mode 100644 index d6dba95c8e6..00000000000 --- a/src/test/java/seedu/address/model/person/StudentIDTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package seedu.address.model.person; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; - -import org.junit.jupiter.api.Test; - -public class StudentIDTest { - - @Test - public void constructor_null_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> new StudentID(null)); - } - - @Test - public void constructor_invalidID_throwsIllegalArgumentException() { - String invalidID1 = ""; - assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID1)); - - String invalidID2 = "C1234567A"; - assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID2)); - - String invalidID3 = "A123X"; - assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID3)); - - String invalidID4 = "1234567P"; - assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID4)); - - String invalidID5 = "A12345678"; - assertThrows(IllegalArgumentException.class, () -> new StudentID(invalidID5)); - - } - - @Test - public void isValidAddress() { - // null student id - assertThrows(NullPointerException.class, () -> StudentID.isValidID(null)); - - // invalid student ids - assertFalse(StudentID.isValidID("")); // empty string - assertFalse(StudentID.isValidID(" ")); // spaces only - assertFalse(StudentID.isValidID("123")); // 3 numbers only - assertFalse(StudentID.isValidID("123456789")); // starts with number - assertFalse(StudentID.isValidID("C1234567A")); // does not start with A - assertFalse(StudentID.isValidID("A123456C")); // 6 numbers only - assertFalse(StudentID.isValidID("A12345678")); // ends with number - assertFalse(StudentID.isValidID("A1234567899B")); // too many numbers - - // valid student ids - assertTrue(StudentID.isValidID("A1234567A")); - assertTrue(StudentID.isValidID("A0000000Y")); - assertTrue(StudentID.isValidID("A0297654M")); - } -} diff --git a/src/test/java/seedu/address/model/person/StudentIdTest.java b/src/test/java/seedu/address/model/person/StudentIdTest.java new file mode 100644 index 00000000000..4a53aa00f50 --- /dev/null +++ b/src/test/java/seedu/address/model/person/StudentIdTest.java @@ -0,0 +1,55 @@ +package seedu.address.model.person; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.testutil.Assert.assertThrows; + +import org.junit.jupiter.api.Test; + +public class StudentIdTest { + + @Test + public void constructor_null_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> new StudentId(null)); + } + + @Test + public void constructor_invalidID_throwsIllegalArgumentException() { + String invalidId1 = ""; + assertThrows(IllegalArgumentException.class, () -> new StudentId(invalidId1)); + + String invalidId2 = "C1234567A"; + assertThrows(IllegalArgumentException.class, () -> new StudentId(invalidId2)); + + String invalidId3 = "A123X"; + assertThrows(IllegalArgumentException.class, () -> new StudentId(invalidId3)); + + String invalidId4 = "1234567P"; + assertThrows(IllegalArgumentException.class, () -> new StudentId(invalidId4)); + + String invalidId5 = "A12345678"; + assertThrows(IllegalArgumentException.class, () -> new StudentId(invalidId5)); + + } + + @Test + public void isValidAddress() { + // null student id + assertThrows(NullPointerException.class, () -> StudentId.isValidId(null)); + + // invalid student ids + assertFalse(StudentId.isValidId("")); // empty string + assertFalse(StudentId.isValidId(" ")); // spaces only + assertFalse(StudentId.isValidId("123")); // 3 numbers only + assertFalse(StudentId.isValidId("123456789")); // starts with number + assertFalse(StudentId.isValidId("C1234567A")); // does not start with A + assertFalse(StudentId.isValidId("A123456C")); // 6 numbers only + assertFalse(StudentId.isValidId("A12345678")); // ends with number + assertFalse(StudentId.isValidId("A1234567899B")); // too many numbers + + // valid student ids + assertTrue(StudentId.isValidId("A1234567A")); + assertTrue(StudentId.isValidId("A0000000Y")); + assertTrue(StudentId.isValidId("A0297654M")); + } +} From 1a869ceaa5e981bbcc1a2a354f966653681398d1 Mon Sep 17 00:00:00 2001 From: jia-han Date: Mon, 10 Oct 2022 21:24:16 +0800 Subject: [PATCH 046/482] Add module and year fields to person profile --- .../seedu/address/model/person/Module.java | 58 +++++++++++++++++++ .../seedu/address/model/person/Person.java | 23 +++++++- .../java/seedu/address/model/person/Year.java | 57 ++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 src/main/java/seedu/address/model/person/Module.java create mode 100644 src/main/java/seedu/address/model/person/Year.java diff --git a/src/main/java/seedu/address/model/person/Module.java b/src/main/java/seedu/address/model/person/Module.java new file mode 100644 index 00000000000..c6c518cbf91 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Module.java @@ -0,0 +1,58 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's module in the address book. + * Guarantees: immutable; is valid as declared in {@link #isValidModule(String)} + */ +public class Module { + + public static final String MESSAGE_CONSTRAINTS = "Module should only contain alphanumeric characters with no spaces, and it should not be blank"; + + /* + * The first character of the module must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String VALIDATION_REGEX = "[A-Z]{2}[A-Z]?\\d{4}[A-Z]?"; + + public final String value; + + /** + * Constructs an {@code Module}. + * + * @param module A valid module. + */ + public Module(String module) { + requireNonNull(module); + module = module.toUpperCase(); + checkArgument(isValidModule(module), MESSAGE_CONSTRAINTS); + value = module; + } + + /** + * Returns true if a given string is a valid module code. + */ + public static boolean isValidModule(String test) { + return test.matches(VALIDATION_REGEX); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Module // instanceof handles nulls + && value.equals(((Module) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } + +} diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index 8ff1d83fe89..4c3d45073ef 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -22,16 +22,20 @@ public class Person { // Data fields private final Address address; + private final Module module; + private final Year year; private final Set tags = new HashSet<>(); /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Address address, Set tags) { - requireAllNonNull(name, phone, email, address, tags); + public Person(Name name, Phone phone, Email email, Module module, Year year, Address address, Set tags) { + requireAllNonNull(name, phone, email, module, year, address, tags); this.name = name; this.phone = phone; this.email = email; + this.module = module; + this.year = year; this.address = address; this.tags.addAll(tags); } @@ -47,6 +51,13 @@ public Phone getPhone() { public Email getEmail() { return email; } + public Module getModule() { + return module; + } + + public Year getYear() { + return year; + } public Address getAddress() { return address; @@ -91,6 +102,8 @@ public boolean equals(Object other) { return otherPerson.getName().equals(getName()) && otherPerson.getPhone().equals(getPhone()) && otherPerson.getEmail().equals(getEmail()) + && otherPerson.getModule().equals(getModule()) + && otherPerson.getYear().equals(getYear()) && otherPerson.getAddress().equals(getAddress()) && otherPerson.getTags().equals(getTags()); } @@ -98,7 +111,7 @@ public boolean equals(Object other) { @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(name, phone, email, address, tags); + return Objects.hash(name, phone, email, module, year, address, tags); } @Override @@ -109,6 +122,10 @@ public String toString() { .append(getPhone()) .append("; Email: ") .append(getEmail()) + .append("; Module: ") + .append(getModule()) + .append("; Year: ") + .append(getYear()) .append("; Address: ") .append(getAddress()); diff --git a/src/main/java/seedu/address/model/person/Year.java b/src/main/java/seedu/address/model/person/Year.java new file mode 100644 index 00000000000..c1d5eb67171 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Year.java @@ -0,0 +1,57 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's year in the address book. + * Guarantees: immutable; is valid as declared in {@link #isValidYear(String)} + */ +public class Year { + + public static final String MESSAGE_CONSTRAINTS = "Year should only contain 1 numeric character between 1 and 6, and it should not be blank"; + + /* + * The first character of the year must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String VALIDATION_REGEX = "^[1-6]$"; + + public final String value; + + /** + * Constructs an {@code Year}. + * + * @param year A valid year. + */ + public Year(String year) { + requireNonNull(year); + checkArgument(isValidYear(year), MESSAGE_CONSTRAINTS); + value = year; + } + + /** + * Returns true if a given string is a valid module code. + */ + public static boolean isValidYear(String test) { + return test.matches(VALIDATION_REGEX); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Year // instanceof handles nulls + && value.equals(((Year) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } + +} From e91ebec2759271fb201ac6b70fca689064556afa Mon Sep 17 00:00:00 2001 From: jia-han Date: Mon, 10 Oct 2022 21:25:33 +0800 Subject: [PATCH 047/482] Add Junit tests for new fields in Person model --- .../address/model/person/ModuleTest.java | 43 +++++++++++++++++++ .../seedu/address/model/person/YearTest.java | 41 ++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/test/java/seedu/address/model/person/ModuleTest.java create mode 100644 src/test/java/seedu/address/model/person/YearTest.java diff --git a/src/test/java/seedu/address/model/person/ModuleTest.java b/src/test/java/seedu/address/model/person/ModuleTest.java new file mode 100644 index 00000000000..89e2c31f832 --- /dev/null +++ b/src/test/java/seedu/address/model/person/ModuleTest.java @@ -0,0 +1,43 @@ +package seedu.address.model.person; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.testutil.Assert.assertThrows; + +import org.junit.jupiter.api.Test; + +public class ModuleTest { + + @Test + public void constructor_null_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> new Module(null)); + } + + @Test + public void constructor_invalidModule_throwsIllegalArgumentException() { + String invalidName = ""; + assertThrows(IllegalArgumentException.class, () -> new Module(invalidName)); + } + + @Test + public void isValidModule() { + // null module + assertThrows(NullPointerException.class, () -> Module.isValidModule(null)); + + // invalid module + assertFalse(Module.isValidModule("")); // empty string + assertFalse(Module.isValidModule(" ")); // spaces only + assertFalse(Module.isValidModule("^")); // only non-alphanumeric characters + assertFalse(Module.isValidModule("CS*100")); // contains non-alphanumeric characters + assertFalse(Module.isValidModule("C1000")); // less than 2 numbers + assertFalse(Module.isValidModule("CSSS1000")); // more than 3 letters + assertFalse(Module.isValidModule("CS100")); // less than 4 numbers + assertFalse(Module.isValidModule("CS10000")); // more than 4 numbers + + // valid module + assertTrue(Module.isValidModule("CS2103")); // 2 letters, no letter behind + assertTrue(Module.isValidModule("CS2103T")); // 2 letters, letter behind + assertTrue(Module.isValidModule("ACC1703")); // 3 letters, no letter behind + assertTrue(Module.isValidModule("ACC1703X")); // 3 letters, letter behind + } +} diff --git a/src/test/java/seedu/address/model/person/YearTest.java b/src/test/java/seedu/address/model/person/YearTest.java new file mode 100644 index 00000000000..9314026d6b1 --- /dev/null +++ b/src/test/java/seedu/address/model/person/YearTest.java @@ -0,0 +1,41 @@ +package seedu.address.model.person; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.testutil.Assert.assertThrows; + +import org.junit.jupiter.api.Test; + +public class YearTest { + + @Test + public void constructor_null_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> new Year(null)); + } + + @Test + public void constructor_invalidYear_throwsIllegalArgumentException() { + String invalidYear = ""; + assertThrows(IllegalArgumentException.class, () -> new Year(invalidYear)); + } + + @Test + public void isValidYear() { + // null year + assertThrows(NullPointerException.class, () -> Year.isValidYear(null)); + + // invalid year + assertFalse(Year.isValidYear("")); // empty string + assertFalse(Year.isValidYear(" ")); // spaces only + assertFalse(Year.isValidYear("12")); // more than 1 number + assertFalse(Year.isValidYear("p")); // non-numeric + assertFalse(Year.isValidYear("-1")); // negative number + assertFalse(Year.isValidYear("0")); // zero + assertFalse(Year.isValidYear("7")); // number out of range + assertFalse(Year.isValidYear("1.5")); // floating point + + // valid year + assertTrue(Year.isValidYear("1")); // within range + assertTrue(Year.isValidYear("6")); // within range + } +} From bab0a679b92ea3c7bddc0fac290bae87c23becf0 Mon Sep 17 00:00:00 2001 From: jia-han Date: Mon, 10 Oct 2022 21:41:21 +0800 Subject: [PATCH 048/482] Fix test errors Commit 1a869ce breaks Junit tests of Person, Command, Parser and Storage. Fix includes: * Update testutils to include new module and year fields. * Update parser and command tests to include new fields. * Update json to include new fields. --- .../address/logic/commands/AddCommand.java | 9 +- .../address/logic/commands/EditCommand.java | 34 +++++++- .../logic/parser/AddCommandParser.java | 13 ++- .../seedu/address/logic/parser/CliSyntax.java | 2 + .../logic/parser/EditCommandParser.java | 11 ++- .../address/logic/parser/ParserUtil.java | 33 ++++++++ .../seedu/address/model/person/Module.java | 5 +- .../java/seedu/address/model/person/Year.java | 3 +- .../address/model/util/SampleDataUtil.java | 8 ++ .../address/storage/JsonAdaptedPerson.java | 29 ++++++- .../duplicatePersonAddressBook.json | 4 + .../invalidPersonAddressBook.json | 2 + .../typicalPersonsAddressBook.json | 14 ++++ .../seedu/address/logic/LogicManagerTest.java | 4 +- .../logic/commands/CommandTestUtil.java | 20 ++++- .../commands/EditPersonDescriptorTest.java | 10 +++ .../logic/parser/AddCommandParserTest.java | 82 ++++++++++++++----- .../storage/JsonAdaptedPersonTest.java | 56 +++++++++++-- .../testutil/EditPersonDescriptorBuilder.java | 20 +++++ .../seedu/address/testutil/PersonBuilder.java | 28 ++++++- .../seedu/address/testutil/PersonUtil.java | 6 ++ .../address/testutil/TypicalPersons.java | 27 +++--- 22 files changed, 363 insertions(+), 57 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 71656d7c5c8..a97b7bdf920 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -4,7 +4,9 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import seedu.address.logic.commands.exceptions.CommandException; @@ -23,15 +25,18 @@ public class AddCommand extends Command { + PREFIX_NAME + "NAME " + PREFIX_PHONE + "PHONE " + PREFIX_EMAIL + "EMAIL " + + PREFIX_MODULE + "MODULE " + + PREFIX_YEAR + "YEAR " + PREFIX_ADDRESS + "ADDRESS " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " " + PREFIX_NAME + "John Doe " + PREFIX_PHONE + "98765432 " + PREFIX_EMAIL + "johnd@example.com " + + PREFIX_MODULE + "CS2100 " + + PREFIX_YEAR + "3 " + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 " - + PREFIX_TAG + "friends " - + PREFIX_TAG + "owesMoney"; + + PREFIX_TAG + "senior "; public static final String MESSAGE_SUCCESS = "New person added: %1$s"; public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book"; diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 7e36114902f..411523026e2 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -4,8 +4,10 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; import java.util.Collections; @@ -21,9 +23,11 @@ import seedu.address.model.Model; import seedu.address.model.person.Address; import seedu.address.model.person.Email; +import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -40,6 +44,8 @@ public class EditCommand extends Command { + "[" + PREFIX_NAME + "NAME] " + "[" + PREFIX_PHONE + "PHONE] " + "[" + PREFIX_EMAIL + "EMAIL] " + + "[" + PREFIX_MODULE + "MODULE] " + + "[" + PREFIX_YEAR + "YEAR] " + "[" + PREFIX_ADDRESS + "ADDRESS] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " @@ -96,10 +102,12 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Name updatedName = editPersonDescriptor.getName().orElse(personToEdit.getName()); Phone updatedPhone = editPersonDescriptor.getPhone().orElse(personToEdit.getPhone()); Email updatedEmail = editPersonDescriptor.getEmail().orElse(personToEdit.getEmail()); + Module updatedModule = editPersonDescriptor.getModule().orElse(personToEdit.getModule()); + Year updatedYear = editPersonDescriptor.getYear().orElse(personToEdit.getYear()); Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); - return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags); + return new Person(updatedName, updatedPhone, updatedEmail, updatedModule, updatedYear, updatedAddress, updatedTags); } @Override @@ -128,6 +136,8 @@ public static class EditPersonDescriptor { private Name name; private Phone phone; private Email email; + private Module module; + private Year year; private Address address; private Set tags; @@ -141,6 +151,8 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setName(toCopy.name); setPhone(toCopy.phone); setEmail(toCopy.email); + setModule(toCopy.module); + setYear(toCopy.year); setAddress(toCopy.address); setTags(toCopy.tags); } @@ -149,7 +161,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { * Returns true if at least one field is edited. */ public boolean isAnyFieldEdited() { - return CollectionUtil.isAnyNonNull(name, phone, email, address, tags); + return CollectionUtil.isAnyNonNull(name, phone, email, module, year, address, tags); } public void setName(Name name) { @@ -176,6 +188,22 @@ public Optional getEmail() { return Optional.ofNullable(email); } + public void setModule(Module module) { + this.module = module; + } + + public Optional getModule() { + return Optional.ofNullable(module); + } + + public void setYear(Year year) { + this.year = year; + } + + public Optional getYear() { + return Optional.ofNullable(year); + } + public void setAddress(Address address) { this.address = address; } @@ -219,6 +247,8 @@ public boolean equals(Object other) { return getName().equals(e.getName()) && getPhone().equals(e.getPhone()) && getEmail().equals(e.getEmail()) + && getModule().equals(e.getModule()) + && getYear().equals(e.getYear()) && getAddress().equals(e.getAddress()) && getTags().equals(e.getTags()); } diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index 3b8bfa035e8..bf0a096b36d 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -3,9 +3,12 @@ import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; + import java.util.Set; import java.util.stream.Stream; @@ -15,8 +18,10 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Module; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -31,9 +36,9 @@ public class AddCommandParser implements Parser { */ public AddCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL) + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_MODULE, PREFIX_YEAR, PREFIX_EMAIL) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); } @@ -41,10 +46,12 @@ public AddCommand parse(String args) throws ParseException { Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()); Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()); Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); + Module module = ParserUtil.parseModule(argMultimap.getValue(PREFIX_MODULE).get()); + Year year = ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get()); Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Person person = new Person(name, phone, email, address, tagList); + Person person = new Person(name, phone, email, module, year, address, tagList); return new AddCommand(person); } diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index 75b1a9bf119..61f96e08628 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -9,6 +9,8 @@ public class CliSyntax { public static final Prefix PREFIX_NAME = new Prefix("n/"); public static final Prefix PREFIX_PHONE = new Prefix("p/"); public static final Prefix PREFIX_EMAIL = new Prefix("e/"); + public static final Prefix PREFIX_MODULE = new Prefix("m/"); + public static final Prefix PREFIX_YEAR = new Prefix("y/"); public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); public static final Prefix PREFIX_TAG = new Prefix("t/"); diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index 845644b7dea..cb26ab80946 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -4,9 +4,11 @@ import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import java.util.Collection; import java.util.Collections; @@ -32,7 +34,8 @@ public class EditCommandParser implements Parser { public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL + , PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); Index index; @@ -52,6 +55,12 @@ public EditCommand parse(String args) throws ParseException { if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) { editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get())); } + if (argMultimap.getValue(PREFIX_MODULE).isPresent()) { + editPersonDescriptor.setModule(ParserUtil.parseModule(argMultimap.getValue(PREFIX_MODULE).get())); + } + if (argMultimap.getValue(PREFIX_YEAR).isPresent()) { + editPersonDescriptor.setYear(ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get())); + } if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) { editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get())); } diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index b117acb9c55..98bca0101c3 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -12,7 +12,10 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Module; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; + import seedu.address.model.tag.Tag; /** @@ -65,6 +68,36 @@ public static Phone parsePhone(String phone) throws ParseException { return new Phone(trimmedPhone); } + /** + * Parses a {@code String module} into an {@code Module}. + * Leading and trailing whitespaces will be trimmed. + * + * @throws ParseException if the given {@code module} is invalid. + */ + public static Module parseModule(String module) throws ParseException { + requireNonNull(module); + String trimmedModule = module.trim(); + if (!Module.isValidModule(trimmedModule)) { + throw new ParseException(Module.MESSAGE_CONSTRAINTS); + } + return new Module(trimmedModule); + } + + /** + * Parses a {@code String year} into an {@code Year}. + * Leading and trailing whitespaces will be trimmed. + * + * @throws ParseException if the given {@code year} is invalid. + */ + public static Year parseYear(String year) throws ParseException { + requireNonNull(year); + String trimmedYear = year.trim(); + if (!Year.isValidYear(trimmedYear)) { + throw new ParseException(Year.MESSAGE_CONSTRAINTS); + } + return new Year(trimmedYear); + } + /** * Parses a {@code String address} into an {@code Address}. * Leading and trailing whitespaces will be trimmed. diff --git a/src/main/java/seedu/address/model/person/Module.java b/src/main/java/seedu/address/model/person/Module.java index c6c518cbf91..0177b14c90b 100644 --- a/src/main/java/seedu/address/model/person/Module.java +++ b/src/main/java/seedu/address/model/person/Module.java @@ -12,8 +12,7 @@ public class Module { public static final String MESSAGE_CONSTRAINTS = "Module should only contain alphanumeric characters with no spaces, and it should not be blank"; /* - * The first character of the module must not be a whitespace, - * otherwise " " (a blank string) becomes a valid input. + * Covers all module code variants in NUS. */ public static final String VALIDATION_REGEX = "[A-Z]{2}[A-Z]?\\d{4}[A-Z]?"; @@ -26,7 +25,7 @@ public class Module { */ public Module(String module) { requireNonNull(module); - module = module.toUpperCase(); + module = module.toUpperCase(); // easier regex checking and storing checkArgument(isValidModule(module), MESSAGE_CONSTRAINTS); value = module; } diff --git a/src/main/java/seedu/address/model/person/Year.java b/src/main/java/seedu/address/model/person/Year.java index c1d5eb67171..25403c32dbf 100644 --- a/src/main/java/seedu/address/model/person/Year.java +++ b/src/main/java/seedu/address/model/person/Year.java @@ -12,8 +12,7 @@ public class Year { public static final String MESSAGE_CONSTRAINTS = "Year should only contain 1 numeric character between 1 and 6, and it should not be blank"; /* - * The first character of the year must not be a whitespace, - * otherwise " " (a blank string) becomes a valid input. + * Years 1-4 for Undergraduate, year 5 for Masters and year 6 for PhD. */ public static final String VALIDATION_REGEX = "^[1-6]$"; diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 1806da4facf..f2011c32821 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -8,9 +8,11 @@ import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.person.Address; import seedu.address.model.person.Email; +import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -20,21 +22,27 @@ public class SampleDataUtil { public static Person[] getSamplePersons() { return new Person[] { new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), + new Module("cs2103"), new Year("4"), new Address("Blk 30 Geylang Street 29, #06-40"), getTagSet("friends")), new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), + new Module("cs2100"), new Year("3"), new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), getTagSet("colleagues", "friends")), new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), + new Module("cs2105"), new Year("3"), new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), getTagSet("neighbours")), new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), + new Module("cs2100"), new Year("3"), new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), getTagSet("family")), new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), + new Module("cs2103"), new Year("4"), new Address("Blk 47 Tampines Street 20, #17-35"), getTagSet("classmates")), new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), + new Module("cs2102"), new Year("3"), new Address("Blk 45 Aljunied Street 85, #11-31"), getTagSet("colleagues")) }; diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index a6321cec2ea..20807bcd35c 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -13,8 +13,10 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Module; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -27,6 +29,8 @@ class JsonAdaptedPerson { private final String name; private final String phone; private final String email; + private final String module; + private final String year; private final String address; private final List tagged = new ArrayList<>(); @@ -35,11 +39,14 @@ class JsonAdaptedPerson { */ @JsonCreator public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone") String phone, - @JsonProperty("email") String email, @JsonProperty("address") String address, + @JsonProperty("email") String email, @JsonProperty("module") String module, + @JsonProperty("year") String year, @JsonProperty("address") String address, @JsonProperty("tagged") List tagged) { this.name = name; this.phone = phone; this.email = email; + this.module = module; + this.year = year; this.address = address; if (tagged != null) { this.tagged.addAll(tagged); @@ -53,6 +60,8 @@ public JsonAdaptedPerson(Person source) { name = source.getName().fullName; phone = source.getPhone().value; email = source.getEmail().value; + module = source.getModule().value; + year = source.getYear().value; address = source.getAddress().value; tagged.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) @@ -94,6 +103,22 @@ public Person toModelType() throws IllegalValueException { } final Email modelEmail = new Email(email); + if (module == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Module.class.getSimpleName())); + } + if (!Module.isValidModule(module)) { + throw new IllegalValueException(Module.MESSAGE_CONSTRAINTS); + } + final Module modelModule = new Module(module); + + if (year == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Year.class.getSimpleName())); + } + if (!Year.isValidYear(year)) { + throw new IllegalValueException(Year.MESSAGE_CONSTRAINTS); + } + final Year modelYear = new Year(year); + if (address == null) { throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); } @@ -103,7 +128,7 @@ public Person toModelType() throws IllegalValueException { final Address modelAddress = new Address(address); final Set modelTags = new HashSet<>(personTags); - return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags); + return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, modelAddress, modelTags); } } diff --git a/src/test/data/JsonSerializableAddressBookTest/duplicatePersonAddressBook.json b/src/test/data/JsonSerializableAddressBookTest/duplicatePersonAddressBook.json index 48831cc7674..5984b28d805 100644 --- a/src/test/data/JsonSerializableAddressBookTest/duplicatePersonAddressBook.json +++ b/src/test/data/JsonSerializableAddressBookTest/duplicatePersonAddressBook.json @@ -3,12 +3,16 @@ "name": "Alice Pauline", "phone": "94351253", "email": "alice@example.com", + "module": "CS2103T", + "year": "4", "address": "123, Jurong West Ave 6, #08-111", "tagged": [ "friends" ] }, { "name": "Alice Pauline", "phone": "94351253", "email": "pauline@example.com", + "module": "CS2100", + "year": "3", "address": "4th street" } ] } diff --git a/src/test/data/JsonSerializableAddressBookTest/invalidPersonAddressBook.json b/src/test/data/JsonSerializableAddressBookTest/invalidPersonAddressBook.json index ad3f135ae42..f82c7e2c55d 100644 --- a/src/test/data/JsonSerializableAddressBookTest/invalidPersonAddressBook.json +++ b/src/test/data/JsonSerializableAddressBookTest/invalidPersonAddressBook.json @@ -3,6 +3,8 @@ "name": "Hans Muster", "phone": "9482424", "email": "invalid@email!3e", + "module": "c^1000", + "year": "-1", "address": "4th street" } ] } diff --git a/src/test/data/JsonSerializableAddressBookTest/typicalPersonsAddressBook.json b/src/test/data/JsonSerializableAddressBookTest/typicalPersonsAddressBook.json index f10eddee12e..ede10f05604 100644 --- a/src/test/data/JsonSerializableAddressBookTest/typicalPersonsAddressBook.json +++ b/src/test/data/JsonSerializableAddressBookTest/typicalPersonsAddressBook.json @@ -4,42 +4,56 @@ "name" : "Alice Pauline", "phone" : "94351253", "email" : "alice@example.com", + "module": "CS2100", + "year": "3", "address" : "123, Jurong West Ave 6, #08-111", "tagged" : [ "friends" ] }, { "name" : "Benson Meier", "phone" : "98765432", "email" : "johnd@example.com", + "module": "CS2100", + "year": "3", "address" : "311, Clementi Ave 2, #02-25", "tagged" : [ "owesMoney", "friends" ] }, { "name" : "Carl Kurz", "phone" : "95352563", "email" : "heinz@example.com", + "module": "CS2100", + "year": "3", "address" : "wall street", "tagged" : [ ] }, { "name" : "Daniel Meier", "phone" : "87652533", "email" : "cornelia@example.com", + "module": "CS2100", + "year": "3", "address" : "10th street", "tagged" : [ "friends" ] }, { "name" : "Elle Meyer", "phone" : "9482224", "email" : "werner@example.com", + "module": "CS2100", + "year": "3", "address" : "michegan ave", "tagged" : [ ] }, { "name" : "Fiona Kunz", "phone" : "9482427", "email" : "lydia@example.com", + "module": "CS2100", + "year": "3", "address" : "little tokyo", "tagged" : [ ] }, { "name" : "George Best", "phone" : "9482442", "email" : "anna@example.com", + "module": "CS2100", + "year": "3", "address" : "4th street", "tagged" : [ ] } ] diff --git a/src/test/java/seedu/address/logic/LogicManagerTest.java b/src/test/java/seedu/address/logic/LogicManagerTest.java index ad923ac249a..0d4b2f5bd11 100644 --- a/src/test/java/seedu/address/logic/LogicManagerTest.java +++ b/src/test/java/seedu/address/logic/LogicManagerTest.java @@ -6,7 +6,9 @@ import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_AMY; import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalPersons.AMY; @@ -80,7 +82,7 @@ public void execute_storageThrowsIoException_throwsCommandException() { // Execute add command String addCommand = AddCommand.COMMAND_WORD + NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY - + ADDRESS_DESC_AMY; + + MODULE_DESC_AMY + YEAR_DESC_AMY + ADDRESS_DESC_AMY; Person expectedPerson = new PersonBuilder(AMY).withTags().build(); ModelManager expectedModel = new ModelManager(); expectedModel.addPerson(expectedPerson); diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 643a1d08069..324a1cdb3cf 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -4,9 +4,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import static seedu.address.testutil.Assert.assertThrows; import java.util.ArrayList; @@ -32,6 +34,10 @@ public class CommandTestUtil { public static final String VALID_PHONE_BOB = "22222222"; public static final String VALID_EMAIL_AMY = "amy@example.com"; public static final String VALID_EMAIL_BOB = "bob@example.com"; + public static final String VALID_MODULE_AMY = "CS2103T"; + public static final String VALID_MODULE_BOB = "CS2100"; + public static final String VALID_YEAR_AMY = "3"; + public static final String VALID_YEAR_BOB = "4"; public static final String VALID_ADDRESS_AMY = "Block 312, Amy Street 1"; public static final String VALID_ADDRESS_BOB = "Block 123, Bobby Street 3"; public static final String VALID_TAG_HUSBAND = "husband"; @@ -43,6 +49,10 @@ public class CommandTestUtil { public static final String PHONE_DESC_BOB = " " + PREFIX_PHONE + VALID_PHONE_BOB; public static final String EMAIL_DESC_AMY = " " + PREFIX_EMAIL + VALID_EMAIL_AMY; public static final String EMAIL_DESC_BOB = " " + PREFIX_EMAIL + VALID_EMAIL_BOB; + public static final String MODULE_DESC_AMY = " " + PREFIX_MODULE + VALID_MODULE_AMY; + public static final String MODULE_DESC_BOB = " " + PREFIX_MODULE + VALID_MODULE_BOB; + public static final String YEAR_DESC_AMY = " " + PREFIX_YEAR + VALID_YEAR_AMY; + public static final String YEAR_DESC_BOB = " " + PREFIX_YEAR + VALID_YEAR_BOB; public static final String ADDRESS_DESC_AMY = " " + PREFIX_ADDRESS + VALID_ADDRESS_AMY; public static final String ADDRESS_DESC_BOB = " " + PREFIX_ADDRESS + VALID_ADDRESS_BOB; public static final String TAG_DESC_FRIEND = " " + PREFIX_TAG + VALID_TAG_FRIEND; @@ -51,6 +61,8 @@ public class CommandTestUtil { public static final String INVALID_NAME_DESC = " " + PREFIX_NAME + "James&"; // '&' not allowed in names public static final String INVALID_PHONE_DESC = " " + PREFIX_PHONE + "911a"; // 'a' not allowed in phones public static final String INVALID_EMAIL_DESC = " " + PREFIX_EMAIL + "bob!yahoo"; // missing '@' symbol + public static final String INVALID_MODULE_DESC = " " + PREFIX_MODULE + "C^1000"; // '^' not allowed in module + public static final String INVALID_YEAR_DESC = " " + PREFIX_YEAR + "-1"; // negative numbers not allowed in year public static final String INVALID_ADDRESS_DESC = " " + PREFIX_ADDRESS; // empty string not allowed for addresses public static final String INVALID_TAG_DESC = " " + PREFIX_TAG + "hubby*"; // '*' not allowed in tags @@ -62,10 +74,14 @@ public class CommandTestUtil { static { DESC_AMY = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY) - .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY) + .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY) + .withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) + .withAddress(VALID_ADDRESS_AMY) .withTags(VALID_TAG_FRIEND).build(); DESC_BOB = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB) - .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB) + .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) + .withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) + .withAddress(VALID_ADDRESS_BOB) .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); } diff --git a/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java b/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java index e0288792e72..83d3550fef9 100644 --- a/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java +++ b/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java @@ -6,9 +6,11 @@ import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; import org.junit.jupiter.api.Test; @@ -47,6 +49,14 @@ public void equals() { editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build(); assertFalse(DESC_AMY.equals(editedAmy)); + // different module -> returns false + editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withModule(VALID_MODULE_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different year -> returns false + editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withYear(VALID_YEAR_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + // different address -> returns false editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build(); assertFalse(DESC_AMY.equals(editedAmy)); diff --git a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java index 5cf487d7ebb..124c7cc2532 100644 --- a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java @@ -7,9 +7,13 @@ import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; +import static seedu.address.logic.commands.CommandTestUtil.INVALID_MODULE_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC; import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC; +import static seedu.address.logic.commands.CommandTestUtil.INVALID_YEAR_DESC; +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_BOB; import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB; import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; @@ -20,10 +24,14 @@ import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND; import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; +import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_BOB; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; import static seedu.address.testutil.TypicalPersons.AMY; @@ -34,9 +42,11 @@ import seedu.address.logic.commands.AddCommand; import seedu.address.model.person.Address; import seedu.address.model.person.Email; +import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; import seedu.address.testutil.PersonBuilder; @@ -49,28 +59,37 @@ public void parse_allFieldsPresent_success() { // whitespace only preamble assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB - + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple names - last name accepted assertParseSuccess(parser, NAME_DESC_AMY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB - + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple phones - last phone accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_AMY + PHONE_DESC_BOB + EMAIL_DESC_BOB - + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple emails - last email accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_AMY + EMAIL_DESC_BOB - + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + // multiple modules - last module accepted + assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_AMY + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + // multiple years - last year accepted + assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + + YEAR_DESC_AMY + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple addresses - last address accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_AMY - + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple tags - all accepted Person expectedPersonMultipleTags = new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND) .build(); - assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB + assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, new AddCommand(expectedPersonMultipleTags)); } @@ -78,7 +97,8 @@ public void parse_allFieldsPresent_success() { public void parse_optionalFieldsMissing_success() { // zero tags Person expectedPerson = new PersonBuilder(AMY).withTags().build(); - assertParseSuccess(parser, NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + ADDRESS_DESC_AMY, + assertParseSuccess(parser, NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + + MODULE_DESC_AMY + YEAR_DESC_AMY + ADDRESS_DESC_AMY, new AddCommand(expectedPerson)); } @@ -87,23 +107,38 @@ public void parse_compulsoryFieldMissing_failure() { String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE); // missing name prefix - assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB, + assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB, expectedMessage); // missing phone prefix - assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB, + assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB, expectedMessage); // missing email prefix - assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + ADDRESS_DESC_BOB, + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB, expectedMessage); + // missing module prefix + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + + VALID_MODULE_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB, + expectedMessage); + + // missing year prefix + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + + MODULE_DESC_BOB + VALID_YEAR_BOB + ADDRESS_DESC_BOB, + expectedMessage); + // missing address prefix - assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB, + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + + MODULE_DESC_BOB + YEAR_DESC_BOB + VALID_ADDRESS_BOB, expectedMessage); // all prefixes missing - assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + VALID_ADDRESS_BOB, + assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + + VALID_MODULE_BOB + VALID_YEAR_BOB + VALID_ADDRESS_BOB, expectedMessage); } @@ -111,31 +146,40 @@ public void parse_compulsoryFieldMissing_failure() { public void parse_invalidValue_failure() { // invalid name assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB - + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS); + + MODULE_DESC_BOB + YEAR_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS); // invalid phone assertParseFailure(parser, NAME_DESC_BOB + INVALID_PHONE_DESC + EMAIL_DESC_BOB + ADDRESS_DESC_BOB - + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS); + + MODULE_DESC_BOB + YEAR_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS); // invalid email assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + INVALID_EMAIL_DESC + ADDRESS_DESC_BOB - + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS); + + MODULE_DESC_BOB + YEAR_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS); + + // invalid module + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB + + INVALID_MODULE_DESC + YEAR_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Module.MESSAGE_CONSTRAINTS); + + // invalid year + assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB + + MODULE_DESC_BOB + INVALID_YEAR_DESC + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Year.MESSAGE_CONSTRAINTS); // invalid address assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC - + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS); + + MODULE_DESC_BOB + YEAR_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS); // invalid tag assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB - + INVALID_TAG_DESC + VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS); + + MODULE_DESC_BOB + YEAR_DESC_BOB + INVALID_TAG_DESC + VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS); // two invalid values, only first invalid value reported - assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC, + assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC + + MODULE_DESC_BOB + YEAR_DESC_BOB, Name.MESSAGE_CONSTRAINTS); // non-empty preamble assertParseFailure(parser, PREAMBLE_NON_EMPTY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB - + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, + + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); } } diff --git a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java index 83b11331cdb..8cbe12a1ecb 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java @@ -15,18 +15,24 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Module; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; public class JsonAdaptedPersonTest { private static final String INVALID_NAME = "R@chel"; private static final String INVALID_PHONE = "+651234"; private static final String INVALID_ADDRESS = " "; private static final String INVALID_EMAIL = "example.com"; + private static final String INVALID_MODULE = "CS100"; + private static final String INVALID_YEAR = "0"; private static final String INVALID_TAG = "#friend"; private static final String VALID_NAME = BENSON.getName().toString(); private static final String VALID_PHONE = BENSON.getPhone().toString(); private static final String VALID_EMAIL = BENSON.getEmail().toString(); + private static final String VALID_MODULE = BENSON.getModule().toString(); + private static final String VALID_YEAR = BENSON.getYear().toString(); private static final String VALID_ADDRESS = BENSON.getAddress().toString(); private static final List VALID_TAGS = BENSON.getTags().stream() .map(JsonAdaptedTag::new) @@ -41,14 +47,14 @@ public void toModelType_validPersonDetails_returnsPerson() throws Exception { @Test public void toModelType_invalidName_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Name.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullName_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -56,29 +62,61 @@ public void toModelType_nullName_throwsIllegalValueException() { @Test public void toModelType_invalidPhone_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Phone.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullPhone_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } + @Test + public void toModelType_invalidModule_throwsIllegalValueException() { + JsonAdaptedPerson person = + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = Module.MESSAGE_CONSTRAINTS; + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + + @Test + public void toModelType_nullModule_throwsIllegalValueException() { + JsonAdaptedPerson person = + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Module.class.getSimpleName()); + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + + @Test + public void toModelType_invalidYear_throwsIllegalValueException() { + JsonAdaptedPerson person = + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, INVALID_YEAR, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = Year.MESSAGE_CONSTRAINTS; + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + + @Test + public void toModelType_nullYear_throwsIllegalValueException() { + JsonAdaptedPerson person = + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, null, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Year.class.getSimpleName()); + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + @Test public void toModelType_invalidEmail_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Email.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullEmail_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -86,14 +124,14 @@ public void toModelType_nullEmail_throwsIllegalValueException() { @Test public void toModelType_invalidAddress_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, INVALID_ADDRESS, VALID_TAGS); String expectedMessage = Address.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullAddress_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, null, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -103,7 +141,7 @@ public void toModelType_invalidTags_throwsIllegalValueException() { List invalidTags = new ArrayList<>(VALID_TAGS); invalidTags.add(new JsonAdaptedTag(INVALID_TAG)); JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, invalidTags); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, invalidTags); assertThrows(IllegalValueException.class, person::toModelType); } diff --git a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java index 4584bd5044e..fa7bfb6b79f 100644 --- a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java +++ b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java @@ -7,9 +7,11 @@ import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.model.person.Address; import seedu.address.model.person.Email; +import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -35,6 +37,8 @@ public EditPersonDescriptorBuilder(Person person) { descriptor.setName(person.getName()); descriptor.setPhone(person.getPhone()); descriptor.setEmail(person.getEmail()); + descriptor.setModule(person.getModule()); + descriptor.setYear(person.getYear()); descriptor.setAddress(person.getAddress()); descriptor.setTags(person.getTags()); } @@ -63,6 +67,22 @@ public EditPersonDescriptorBuilder withEmail(String email) { return this; } + /** + * Sets the {@code Module} of the {@code EditPersonDescriptor} that we are building. + */ + public EditPersonDescriptorBuilder withModule(String module) { + descriptor.setModule(new Module(module)); + return this; + } + + /** + * Sets the {@code Year} of the {@code EditPersonDescriptor} that we are building. + */ + public EditPersonDescriptorBuilder withYear(String year) { + descriptor.setYear(new Year(year)); + return this; + } + /** * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building. */ diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index 6be381d39ba..02918966a9a 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -6,8 +6,10 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; +import seedu.address.model.person.Module; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; import seedu.address.model.util.SampleDataUtil; @@ -19,11 +21,15 @@ public class PersonBuilder { public static final String DEFAULT_NAME = "Amy Bee"; public static final String DEFAULT_PHONE = "85355255"; public static final String DEFAULT_EMAIL = "amy@gmail.com"; + public static final String DEFAULT_MODULE = "cs2103t"; + public static final String DEFAULT_YEAR = "3"; public static final String DEFAULT_ADDRESS = "123, Jurong West Ave 6, #08-111"; private Name name; private Phone phone; private Email email; + private Module module; + private Year year; private Address address; private Set tags; @@ -34,6 +40,8 @@ public PersonBuilder() { name = new Name(DEFAULT_NAME); phone = new Phone(DEFAULT_PHONE); email = new Email(DEFAULT_EMAIL); + module = new Module(DEFAULT_MODULE); + year = new Year(DEFAULT_YEAR); address = new Address(DEFAULT_ADDRESS); tags = new HashSet<>(); } @@ -45,6 +53,8 @@ public PersonBuilder(Person personToCopy) { name = personToCopy.getName(); phone = personToCopy.getPhone(); email = personToCopy.getEmail(); + module = personToCopy.getModule(); + year = personToCopy.getYear(); address = personToCopy.getAddress(); tags = new HashSet<>(personToCopy.getTags()); } @@ -89,8 +99,24 @@ public PersonBuilder withEmail(String email) { return this; } + /** + * Sets the {@code Module} of the {@code Person} that we are building. + */ + public PersonBuilder withModule(String module) { + this.module = new Module(module); + return this; + } + + /** + * Sets the {@code Address} of the {@code Person} that we are building. + */ + public PersonBuilder withYear(String year) { + this.year = new Year(year); + return this; + } + public Person build() { - return new Person(name, phone, email, address, tags); + return new Person(name, phone, email, module, year, address, tags); } } diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 90849945183..3d276a0398f 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -2,9 +2,11 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import java.util.Set; @@ -33,6 +35,8 @@ public static String getPersonDetails(Person person) { sb.append(PREFIX_NAME + person.getName().fullName + " "); sb.append(PREFIX_PHONE + person.getPhone().value + " "); sb.append(PREFIX_EMAIL + person.getEmail().value + " "); + sb.append(PREFIX_MODULE + person.getModule().value + " "); + sb.append(PREFIX_YEAR + person.getYear().value + " "); sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); person.getTags().stream().forEach( s -> sb.append(PREFIX_TAG + s.tagName + " ") @@ -48,6 +52,8 @@ public static String getEditPersonDescriptorDetails(EditPersonDescriptor descrip descriptor.getName().ifPresent(name -> sb.append(PREFIX_NAME).append(name.fullName).append(" ")); descriptor.getPhone().ifPresent(phone -> sb.append(PREFIX_PHONE).append(phone.value).append(" ")); descriptor.getEmail().ifPresent(email -> sb.append(PREFIX_EMAIL).append(email.value).append(" ")); + descriptor.getModule().ifPresent(module -> sb.append(PREFIX_MODULE).append(module.value).append(" ")); + descriptor.getYear().ifPresent(year -> sb.append(PREFIX_YEAR).append(year.value).append(" ")); descriptor.getAddress().ifPresent(address -> sb.append(PREFIX_ADDRESS).append(address.value).append(" ")); if (descriptor.getTags().isPresent()) { Set tags = descriptor.getTags().get(); diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index fec76fb7129..de86cef6ffb 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -4,12 +4,16 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; import java.util.ArrayList; import java.util.Arrays; @@ -25,34 +29,37 @@ public class TypicalPersons { public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") - .withPhone("94351253") + .withModule("CS2100").withYear("3").withPhone("94351253") .withTags("friends").build(); public static final Person BENSON = new PersonBuilder().withName("Benson Meier") .withAddress("311, Clementi Ave 2, #02-25") .withEmail("johnd@example.com").withPhone("98765432") + .withModule("CS2100").withYear("3") .withTags("owesMoney", "friends").build(); public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") - .withEmail("heinz@example.com").withAddress("wall street").build(); + .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withAddress("wall street").build(); public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withAddress("10th street").withTags("friends").build(); + .withEmail("cornelia@example.com").withModule("CS2100").withYear("3").withAddress("10th street").withTags("friends").build(); public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") - .withEmail("werner@example.com").withAddress("michegan ave").build(); + .withEmail("werner@example.com").withModule("CS2100").withYear("3").withAddress("michegan ave").build(); public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") - .withEmail("lydia@example.com").withAddress("little tokyo").build(); + .withEmail("lydia@example.com").withModule("CS2100").withYear("3").withAddress("little tokyo").build(); public static final Person GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") - .withEmail("anna@example.com").withAddress("4th street").build(); + .withEmail("anna@example.com").withModule("CS2100").withYear("3").withAddress("4th street").build(); // Manually added public static final Person HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") - .withEmail("stefan@example.com").withAddress("little india").build(); + .withEmail("stefan@example.com").withModule("cs2103t").withYear("3").withAddress("little india").build(); public static final Person IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") - .withEmail("hans@example.com").withAddress("chicago ave").build(); + .withEmail("hans@example.com").withModule("cs2100").withYear("4").withAddress("chicago ave").build(); // Manually added - Person's details found in {@code CommandTestUtil} public static final Person AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) - .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); + .withEmail(VALID_EMAIL_AMY).withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) + .withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); public static final Person BOB = new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) - .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND) + .withEmail(VALID_EMAIL_BOB).withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) + .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND) .build(); public static final String KEYWORD_MATCHING_MEIER = "Meier"; // A keyword that matches MEIER From fc76d8a51e5736b749b128099fd70227b3aac46c Mon Sep 17 00:00:00 2001 From: jia-han Date: Mon, 10 Oct 2022 21:58:15 +0800 Subject: [PATCH 049/482] Fix checkstyle issues --- .../address/logic/commands/AddCommand.java | 4 +- .../address/logic/commands/EditCommand.java | 5 ++- .../logic/parser/AddCommandParser.java | 9 ++-- .../logic/parser/EditCommandParser.java | 4 +- .../address/logic/parser/ParserUtil.java | 3 +- .../seedu/address/model/person/Module.java | 3 +- .../java/seedu/address/model/person/Year.java | 3 +- .../address/storage/JsonAdaptedPerson.java | 2 +- .../seedu/address/logic/LogicManagerTest.java | 2 +- .../logic/parser/AddCommandParserTest.java | 2 +- .../storage/JsonAdaptedPersonTest.java | 41 ++++++++++++------- .../seedu/address/testutil/PersonBuilder.java | 2 +- .../address/testutil/TypicalPersons.java | 3 +- 13 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index a97b7bdf920..0f59ffd8c5b 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -3,11 +3,11 @@ import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 411523026e2..a75a9dbb6f1 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -3,8 +3,8 @@ import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; @@ -107,7 +107,8 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); - return new Person(updatedName, updatedPhone, updatedEmail, updatedModule, updatedYear, updatedAddress, updatedTags); + return new Person(updatedName, updatedPhone, updatedEmail, + updatedModule, updatedYear, updatedAddress, updatedTags); } @Override diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index bf0a096b36d..f0dfcdbce7a 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -9,7 +9,6 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; - import java.util.Set; import java.util.stream.Stream; @@ -17,8 +16,8 @@ import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.person.Address; import seedu.address.model.person.Email; -import seedu.address.model.person.Name; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Year; @@ -36,9 +35,11 @@ public class AddCommandParser implements Parser { */ public AddCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, + PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_MODULE, PREFIX_YEAR, PREFIX_EMAIL) + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, + PREFIX_MODULE, PREFIX_YEAR, PREFIX_EMAIL) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); } diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index cb26ab80946..c931e6a90c8 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -34,8 +34,8 @@ public class EditCommandParser implements Parser { public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL - , PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, + PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); Index index; diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index 98bca0101c3..5b742957ca4 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -11,11 +11,10 @@ import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.person.Address; import seedu.address.model.person.Email; -import seedu.address.model.person.Name; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; import seedu.address.model.person.Phone; import seedu.address.model.person.Year; - import seedu.address.model.tag.Tag; /** diff --git a/src/main/java/seedu/address/model/person/Module.java b/src/main/java/seedu/address/model/person/Module.java index 0177b14c90b..5ee6d00ddd3 100644 --- a/src/main/java/seedu/address/model/person/Module.java +++ b/src/main/java/seedu/address/model/person/Module.java @@ -9,7 +9,8 @@ */ public class Module { - public static final String MESSAGE_CONSTRAINTS = "Module should only contain alphanumeric characters with no spaces, and it should not be blank"; + public static final String MESSAGE_CONSTRAINTS = "Module should only contain alphanumeric" + + " characters with no spaces, and it should not be blank"; /* * Covers all module code variants in NUS. diff --git a/src/main/java/seedu/address/model/person/Year.java b/src/main/java/seedu/address/model/person/Year.java index 25403c32dbf..27546ac6fa8 100644 --- a/src/main/java/seedu/address/model/person/Year.java +++ b/src/main/java/seedu/address/model/person/Year.java @@ -9,7 +9,8 @@ */ public class Year { - public static final String MESSAGE_CONSTRAINTS = "Year should only contain 1 numeric character between 1 and 6, and it should not be blank"; + public static final String MESSAGE_CONSTRAINTS = "Year should only contain 1 numeric character" + + " between 1 and 6, and it should not be blank"; /* * Years 1-4 for Undergraduate, year 5 for Masters and year 6 for PhD. diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index 20807bcd35c..a2ec869b4d9 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -12,8 +12,8 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.person.Address; import seedu.address.model.person.Email; -import seedu.address.model.person.Name; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Year; diff --git a/src/test/java/seedu/address/logic/LogicManagerTest.java b/src/test/java/seedu/address/logic/LogicManagerTest.java index 0d4b2f5bd11..750bb2a1f69 100644 --- a/src/test/java/seedu/address/logic/LogicManagerTest.java +++ b/src/test/java/seedu/address/logic/LogicManagerTest.java @@ -5,8 +5,8 @@ import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_AMY; import static seedu.address.testutil.Assert.assertThrows; diff --git a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java index 124c7cc2532..8e94e3fc433 100644 --- a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java @@ -74,7 +74,7 @@ public void parse_allFieldsPresent_success() { + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple modules - last module accepted - assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_AMY + assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_AMY + MODULE_DESC_BOB + YEAR_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); // multiple years - last year accepted diff --git a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java index 8cbe12a1ecb..ff177c74ecf 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java @@ -14,8 +14,8 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.person.Address; import seedu.address.model.person.Email; -import seedu.address.model.person.Name; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; import seedu.address.model.person.Phone; import seedu.address.model.person.Year; @@ -47,14 +47,16 @@ public void toModelType_validPersonDetails_returnsPerson() throws Exception { @Test public void toModelType_invalidName_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Name.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullName_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -62,14 +64,16 @@ public void toModelType_nullName_throwsIllegalValueException() { @Test public void toModelType_invalidPhone_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Phone.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullPhone_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -77,7 +81,8 @@ public void toModelType_nullPhone_throwsIllegalValueException() { @Test public void toModelType_invalidModule_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + INVALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Module.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -85,7 +90,8 @@ public void toModelType_invalidModule_throwsIllegalValueException() { @Test public void toModelType_nullModule_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, + VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Module.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -93,7 +99,8 @@ public void toModelType_nullModule_throwsIllegalValueException() { @Test public void toModelType_invalidYear_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, INVALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + INVALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Year.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -101,7 +108,8 @@ public void toModelType_invalidYear_throwsIllegalValueException() { @Test public void toModelType_nullYear_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, null, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + null, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Year.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -109,14 +117,16 @@ public void toModelType_nullYear_throwsIllegalValueException() { @Test public void toModelType_invalidEmail_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Email.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullEmail_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, + VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -124,14 +134,16 @@ public void toModelType_nullEmail_throwsIllegalValueException() { @Test public void toModelType_invalidAddress_throwsIllegalValueException() { JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, INVALID_ADDRESS, VALID_TAGS); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + VALID_YEAR, INVALID_ADDRESS, VALID_TAGS); String expectedMessage = Address.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @Test public void toModelType_nullAddress_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, null, VALID_TAGS); + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, null, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -141,7 +153,8 @@ public void toModelType_invalidTags_throwsIllegalValueException() { List invalidTags = new ArrayList<>(VALID_TAGS); invalidTags.add(new JsonAdaptedTag(INVALID_TAG)); JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_ADDRESS, invalidTags); + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + VALID_YEAR, VALID_ADDRESS, invalidTags); assertThrows(IllegalValueException.class, person::toModelType); } diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index 02918966a9a..8536f4b04c9 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -5,8 +5,8 @@ import seedu.address.model.person.Address; import seedu.address.model.person.Email; -import seedu.address.model.person.Name; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; import seedu.address.model.person.Year; diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index de86cef6ffb..b0dcad291df 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -39,7 +39,8 @@ public class TypicalPersons { public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withAddress("wall street").build(); public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withModule("CS2100").withYear("3").withAddress("10th street").withTags("friends").build(); + .withEmail("cornelia@example.com").withModule("CS2100").withYear("3") + .withAddress("10th street").withTags("friends").build(); public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") .withEmail("werner@example.com").withModule("CS2100").withYear("3").withAddress("michegan ave").build(); public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") From a7c1b7e46ebb20b5f56a67579fd351918a015494 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Tue, 11 Oct 2022 12:05:07 +0800 Subject: [PATCH 050/482] Change fonts --- src/main/resources/view/DarkTheme.css | 45 ++++++++++++++------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 36e6b001cd8..246046ff871 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -1,32 +1,32 @@ .background { - -fx-background-color: derive(#1d1d1d, 20%); - background-color: #383838; /* Used in the default.html file */ + -fx-background-color: #F4E9E3; + background-color: #F4E9E3; /* Used in the default.html file */ } .label { -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Semibold"; + -fx-font-family: "Courier New"; -fx-text-fill: #555555; -fx-opacity: 0.9; } .label-bright { -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Semibold"; + -fx-font-family: "Courier New"; -fx-text-fill: white; -fx-opacity: 1; } .label-header { -fx-font-size: 32pt; - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-text-fill: white; -fx-opacity: 1; } .text-field { -fx-font-size: 12pt; - -fx-font-family: "Segoe UI Semibold"; + -fx-font-family: "Courier New"; } .tab-pane { @@ -40,9 +40,9 @@ } .table-view { - -fx-base: #1d1d1d; - -fx-control-inner-background: #1d1d1d; - -fx-background-color: #1d1d1d; + -fx-base: #F4E9E3; + -fx-control-inner-background: #F4E9E3; + -fx-background-color: #F4E9E3; -fx-table-cell-border-color: transparent; -fx-table-header-border-color: transparent; -fx-padding: 5; @@ -66,7 +66,7 @@ .table-view .column-header .label { -fx-font-size: 20pt; - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-text-fill: white; -fx-alignment: center-left; -fx-opacity: 1; @@ -120,16 +120,19 @@ -fx-text-fill: white; } +/* +names of the tutor +*/ .cell_big_label { - -fx-font-family: "Segoe UI Semibold"; - -fx-font-size: 16px; - -fx-text-fill: #010504; + -fx-font-family: "Segoe UI Bold"; + -fx-font-size: 20px; + -fx-text-fill: #000000; } .cell_small_label { - -fx-font-family: "Segoe UI"; + -fx-font-family: "Courier New"; -fx-font-size: 13px; - -fx-text-fill: #010504; + -fx-text-fill: #000000; } .stack-pane { @@ -148,7 +151,7 @@ .result-display { -fx-background-color: transparent; - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-font-size: 13pt; -fx-text-fill: white; } @@ -158,7 +161,7 @@ } .status-bar .label { - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-text-fill: white; -fx-padding: 4px; -fx-pref-height: 30px; @@ -175,7 +178,7 @@ } .grid-pane { - -fx-background-color: derive(#1d1d1d, 30%); + -fx-background-color: #F4E9E3; -fx-border-color: derive(#1d1d1d, 30%); -fx-border-width: 1px; } @@ -198,7 +201,7 @@ .menu-bar .label { -fx-font-size: 14pt; - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-text-fill: white; -fx-opacity: 0.9; } @@ -218,7 +221,7 @@ -fx-border-width: 2; -fx-background-radius: 0; -fx-background-color: #1d1d1d; - -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-family: "Courier New", Helvetica, Arial, sans-serif; -fx-font-size: 11pt; -fx-text-fill: #d8d8d8; -fx-background-insets: 0 0 0 0, 0, 1, 2; @@ -323,7 +326,7 @@ -fx-border-color: #383838 #383838 #ffffff #383838; -fx-border-insets: 0; -fx-border-width: 1; - -fx-font-family: "Segoe UI Light"; + -fx-font-family: "Courier New"; -fx-font-size: 13pt; -fx-text-fill: white; } From e9266c1693c7a73d7f27a0c3d10b346350588fa0 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Tue, 11 Oct 2022 12:49:41 +0800 Subject: [PATCH 051/482] Fix add format in UG --- docs/UserGuide.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 140527e7da1..0fe5dae7d0e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -26,7 +26,7 @@ TutHub is a **desktop app for NUS School of Computing professors who have to kee * **`list`** : Lists all tutors. - * **`add`**`n/John Doe p/98765432 e/johnd@example.com y/3 m/CS2103T` : Adds a tutor named `John Doe` to Tuthub. + * **`add`**`n/John Doe p/98765432 e/johnd@example.com m/CS2103T y/3` : Adds a tutor named `John Doe` to Tuthub. * **`delete`**`3` : Deletes the 3rd tutor shown in the current list. @@ -71,15 +71,15 @@ TutHub is a **desktop app for NUS School of Computing professors who have to kee Adds a tutor to the Tuthub. -Format: `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​` +Format: `add n/NAME p/PHONE_NUMBER e/EMAIL m/MODULE y/YEAR [t/TAG]…​`
:bulb: **Tip:** A person can have any number of tags (including 0)
Examples: -* `add n/John Doe p/98765432 e/johnd@example.com y/3 m/CS2100` -* `add n/Betsy Crowe t/senior ta e/betsycrowe@example.com y/3 m/CS1101S p/1234567` +* `add n/John Doe p/98765432 e/johnd@example.com m/CS2100 y/3` +* `add n/Betsy Crowe t/senior ta e/betsycrowe@example.com m/CS1101S y/3 p/1234567` ### Listing all tutors : `list` @@ -151,7 +151,7 @@ _Details coming soon ..._ | Action | Format, Examples | |------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
e.g., `add n/Betsy Crowe t/ e/betsycrowe@example.com p/1234567 y/3 m/CS1101S t/senior` | +| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
e.g., `add n/Betsy Crowe t/ e/betsycrowe@example.com p/1234567 m/CS1101S y/3 t/senior` | | **Delete** | `delete INDEX`
e.g., `delete 3` | | **List** | `list` | | **Save** | `save` | From f680e3fecae329282dcfd525ffc3ed7e777d4fd3 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Tue, 11 Oct 2022 12:55:33 +0800 Subject: [PATCH 052/482] Add `find` to DG --- docs/DeveloperGuide.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 78be6f3cef7..d6c9ae678b7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -276,13 +276,14 @@ _{Explain here how the data archiving feature will be implemented}_ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -|----------| -------------------------------------- |-------------------------|-----------------------------------------------------| -| `* * *` | user | list all tutor profiles | get a quick view of all available tutors | -| `* * *` | user | add a new tutor | track their profiles | -| `* * *` | user | delete a tutor profile | remove tutors that are no longer available for work | -| `* * *` | user | save data | there is a local backup on the computer | -| `* * *` | user | exit the program | | +| Priority | As a …​ | I can …​ | So that I can…​ | +|----------| --------------------------------------|---------------------------------------|---------------------------------------------------| +| `* * *` | user | list all tutor profiles | get a quick view of all available tutors | +| `* * *` | user | add a new tutor | track their profiles | +| `* * *` | user | find a specific tutor by name easily | filter tutor names | +| `* * *` | user | delete a tutor profile | remove tutors that are no longer available for work | +| `* * *` | user | save data | there is a local backup on the computer | +| `* * *` | user | exit the program | | *{More to be added}* From 7195d91231e7396773113010a7001a7839cd3f47 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Tue, 11 Oct 2022 13:56:40 +0800 Subject: [PATCH 053/482] Add StudentID to AddCommand --- .../address/logic/commands/AddCommand.java | 3 ++ .../address/logic/commands/EditCommand.java | 19 +++++++- .../logic/parser/AddCommandParser.java | 9 ++-- .../seedu/address/logic/parser/CliSyntax.java | 1 + .../logic/parser/EditCommandParser.java | 6 ++- .../address/logic/parser/ParserUtil.java | 16 +++++++ .../seedu/address/model/person/Person.java | 12 ++++- .../address/model/util/SampleDataUtil.java | 19 +++----- .../address/storage/JsonAdaptedPerson.java | 17 ++++++- .../logic/commands/CommandTestUtil.java | 2 + .../storage/JsonAdaptedPersonTest.java | 46 +++++++++++++------ .../seedu/address/testutil/PersonBuilder.java | 15 +++++- .../address/testutil/TypicalPersons.java | 32 ++++++++----- 13 files changed, 150 insertions(+), 47 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 0f59ffd8c5b..ed0f8dd34e8 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -6,6 +6,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; @@ -27,6 +28,7 @@ public class AddCommand extends Command { + PREFIX_EMAIL + "EMAIL " + PREFIX_MODULE + "MODULE " + PREFIX_YEAR + "YEAR " + + PREFIX_STUDENTID + "STUDENT ID " + PREFIX_ADDRESS + "ADDRESS " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " " @@ -35,6 +37,7 @@ public class AddCommand extends Command { + PREFIX_EMAIL + "johnd@example.com " + PREFIX_MODULE + "CS2100 " + PREFIX_YEAR + "3 " + + PREFIX_STUDENTID + "A0123456X " + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 " + PREFIX_TAG + "senior "; diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index a75a9dbb6f1..9d65ff6c6a3 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -6,6 +6,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; @@ -27,6 +28,7 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; @@ -46,6 +48,7 @@ public class EditCommand extends Command { + "[" + PREFIX_EMAIL + "EMAIL] " + "[" + PREFIX_MODULE + "MODULE] " + "[" + PREFIX_YEAR + "YEAR] " + + "[" + PREFIX_STUDENTID + "STUDENT ID] " + "[" + PREFIX_ADDRESS + "ADDRESS] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " @@ -104,11 +107,12 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Email updatedEmail = editPersonDescriptor.getEmail().orElse(personToEdit.getEmail()); Module updatedModule = editPersonDescriptor.getModule().orElse(personToEdit.getModule()); Year updatedYear = editPersonDescriptor.getYear().orElse(personToEdit.getYear()); + StudentId updatedStudentId = editPersonDescriptor.getStudentId().orElse(personToEdit.getStudentId()); Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); return new Person(updatedName, updatedPhone, updatedEmail, - updatedModule, updatedYear, updatedAddress, updatedTags); + updatedModule, updatedYear, updatedStudentId, updatedAddress, updatedTags); } @Override @@ -139,6 +143,7 @@ public static class EditPersonDescriptor { private Email email; private Module module; private Year year; + private StudentId studentId; private Address address; private Set tags; @@ -154,6 +159,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setEmail(toCopy.email); setModule(toCopy.module); setYear(toCopy.year); + setStudentId(toCopy.studentId); setAddress(toCopy.address); setTags(toCopy.tags); } @@ -162,7 +168,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { * Returns true if at least one field is edited. */ public boolean isAnyFieldEdited() { - return CollectionUtil.isAnyNonNull(name, phone, email, module, year, address, tags); + return CollectionUtil.isAnyNonNull(name, phone, email, module, year, address, studentId, tags); } public void setName(Name name) { @@ -205,6 +211,14 @@ public Optional getYear() { return Optional.ofNullable(year); } + public void setStudentId(StudentId studentId) { + this.studentId = studentId; + } + + public Optional getStudentId() { + return Optional.ofNullable(studentId); + } + public void setAddress(Address address) { this.address = address; } @@ -250,6 +264,7 @@ && getPhone().equals(e.getPhone()) && getEmail().equals(e.getEmail()) && getModule().equals(e.getModule()) && getYear().equals(e.getYear()) + && getStudentId().equals(e.getStudentId()) && getAddress().equals(e.getAddress()) && getTags().equals(e.getTags()); } diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java index f0dfcdbce7a..d797506cf22 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddCommandParser.java @@ -6,6 +6,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; @@ -20,6 +21,7 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; @@ -36,9 +38,9 @@ public class AddCommandParser implements Parser { public AddCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, - PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); + PREFIX_MODULE, PREFIX_YEAR, PREFIX_STUDENTID, PREFIX_ADDRESS, PREFIX_TAG); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, + if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_STUDENTID, PREFIX_MODULE, PREFIX_YEAR, PREFIX_EMAIL) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); @@ -49,10 +51,11 @@ public AddCommand parse(String args) throws ParseException { Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()); Module module = ParserUtil.parseModule(argMultimap.getValue(PREFIX_MODULE).get()); Year year = ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get()); + StudentId studentId = ParserUtil.parseStudentId(argMultimap.getValue(PREFIX_STUDENTID).get()); Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Person person = new Person(name, phone, email, module, year, address, tagList); + Person person = new Person(name, phone, email, module, year, studentId, address, tagList); return new AddCommand(person); } diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index 61f96e08628..7a625567a20 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -11,6 +11,7 @@ public class CliSyntax { public static final Prefix PREFIX_EMAIL = new Prefix("e/"); public static final Prefix PREFIX_MODULE = new Prefix("m/"); public static final Prefix PREFIX_YEAR = new Prefix("y/"); + public static final Prefix PREFIX_STUDENTID = new Prefix("s/"); public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); public static final Prefix PREFIX_TAG = new Prefix("t/"); diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index c931e6a90c8..f8ab0e20f1c 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -7,6 +7,7 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; @@ -35,7 +36,7 @@ public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, - PREFIX_MODULE, PREFIX_YEAR, PREFIX_ADDRESS, PREFIX_TAG); + PREFIX_MODULE, PREFIX_YEAR, PREFIX_STUDENTID, PREFIX_ADDRESS, PREFIX_TAG); Index index; @@ -64,6 +65,9 @@ public EditCommand parse(String args) throws ParseException { if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) { editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get())); } + if (argMultimap.getValue(PREFIX_STUDENTID).isPresent()) { + editPersonDescriptor.setStudentId(ParserUtil.parseStudentId(argMultimap.getValue(PREFIX_STUDENTID).get())); + } parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags); if (!editPersonDescriptor.isAnyFieldEdited()) { diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index 5b742957ca4..0677f8af301 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -14,6 +14,7 @@ import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; @@ -97,6 +98,21 @@ public static Year parseYear(String year) throws ParseException { return new Year(trimmedYear); } + /** + * Parses a {@code String studentId} into a {@code StudentId}. + * Leading and trailing whitespaces will be trimmed. + * + * @throws ParseException if the given {@code studentId} is invalid. + */ + public static StudentId parseStudentId(String studentId) throws ParseException { + requireNonNull(studentId); + String trimmedStudentId = studentId.trim(); + if (!StudentId.isValidId(trimmedStudentId)) { + throw new ParseException(StudentId.MESSAGE_CONSTRAINTS); + } + return new StudentId(studentId); + } + /** * Parses a {@code String address} into an {@code Address}. * Leading and trailing whitespaces will be trimmed. diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index 4c3d45073ef..f20d8f54e02 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -19,6 +19,7 @@ public class Person { private final Name name; private final Phone phone; private final Email email; + private final StudentId studentId; // Data fields private final Address address; @@ -29,13 +30,14 @@ public class Person { /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Module module, Year year, Address address, Set tags) { + public Person(Name name, Phone phone, Email email, Module module, Year year, StudentId studentId, Address address, Set tags) { requireAllNonNull(name, phone, email, module, year, address, tags); this.name = name; this.phone = phone; this.email = email; this.module = module; this.year = year; + this.studentId = studentId; this.address = address; this.tags.addAll(tags); } @@ -51,6 +53,7 @@ public Phone getPhone() { public Email getEmail() { return email; } + public Module getModule() { return module; } @@ -63,6 +66,10 @@ public Address getAddress() { return address; } + public StudentId getStudentId() { + return studentId; + } + /** * Returns an immutable tag set, which throws {@code UnsupportedOperationException} * if modification is attempted. @@ -105,6 +112,7 @@ public boolean equals(Object other) { && otherPerson.getModule().equals(getModule()) && otherPerson.getYear().equals(getYear()) && otherPerson.getAddress().equals(getAddress()) + && otherPerson.getStudentId().equals(getStudentId()) && otherPerson.getTags().equals(getTags()); } @@ -126,6 +134,8 @@ public String toString() { .append(getModule()) .append("; Year: ") .append(getYear()) + .append("; Student ID: ") + .append(getStudentId()) .append("; Address: ") .append(getAddress()); diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index f2011c32821..74d54036212 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -6,13 +6,8 @@ import seedu.address.model.AddressBook; import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; +import seedu.address.model.person.*; import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** @@ -22,27 +17,27 @@ public class SampleDataUtil { public static Person[] getSamplePersons() { return new Person[] { new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), - new Module("cs2103"), new Year("4"), + new Module("cs2103"), new Year("4"), new StudentId("A0234567Y"), new Address("Blk 30 Geylang Street 29, #06-40"), getTagSet("friends")), new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), - new Module("cs2100"), new Year("3"), + new Module("cs2100"), new Year("3"), new StudentId("A0234527X"), new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), getTagSet("colleagues", "friends")), new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), - new Module("cs2105"), new Year("3"), + new Module("cs2105"), new Year("3"), new StudentId("A0234127M"), new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), getTagSet("neighbours")), new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), - new Module("cs2100"), new Year("3"), + new Module("cs2100"), new Year("3"), new StudentId("A1674832L"), new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), getTagSet("family")), new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), - new Module("cs2103"), new Year("4"), + new Module("cs2103"), new Year("4"), new StudentId("A9876542R"), new Address("Blk 47 Tampines Street 20, #17-35"), getTagSet("classmates")), new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), - new Module("cs2102"), new Year("3"), + new Module("cs2102"), new Year("3"), new StudentId("A3498732U"), new Address("Blk 45 Aljunied Street 85, #11-31"), getTagSet("colleagues")) }; diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index a2ec869b4d9..95fbea90903 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -16,6 +16,7 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; @@ -31,6 +32,7 @@ class JsonAdaptedPerson { private final String email; private final String module; private final String year; + private final String studentId; private final String address; private final List tagged = new ArrayList<>(); @@ -40,13 +42,15 @@ class JsonAdaptedPerson { @JsonCreator public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone") String phone, @JsonProperty("email") String email, @JsonProperty("module") String module, - @JsonProperty("year") String year, @JsonProperty("address") String address, + @JsonProperty("year") String year, @JsonProperty("studentId") String studentId, + @JsonProperty("address") String address, @JsonProperty("tagged") List tagged) { this.name = name; this.phone = phone; this.email = email; this.module = module; this.year = year; + this.studentId = studentId; this.address = address; if (tagged != null) { this.tagged.addAll(tagged); @@ -62,6 +66,7 @@ public JsonAdaptedPerson(Person source) { email = source.getEmail().value; module = source.getModule().value; year = source.getYear().value; + studentId = source.getStudentId().value; address = source.getAddress().value; tagged.addAll(source.getTags().stream() .map(JsonAdaptedTag::new) @@ -119,6 +124,14 @@ public Person toModelType() throws IllegalValueException { } final Year modelYear = new Year(year); + if (studentId == null) { + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, StudentId.class.getSimpleName())); + } + if (!StudentId.isValidId(studentId)) { + throw new IllegalValueException(StudentId.MESSAGE_CONSTRAINTS); + } + final StudentId modelStudentId = new StudentId(studentId); + if (address == null) { throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName())); } @@ -128,7 +141,7 @@ public Person toModelType() throws IllegalValueException { final Address modelAddress = new Address(address); final Set modelTags = new HashSet<>(personTags); - return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, modelAddress, modelTags); + return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, modelStudentId, modelAddress, modelTags); } } diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 324a1cdb3cf..82041765342 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -38,6 +38,8 @@ public class CommandTestUtil { public static final String VALID_MODULE_BOB = "CS2100"; public static final String VALID_YEAR_AMY = "3"; public static final String VALID_YEAR_BOB = "4"; + public static final String VALID_STUDENTID_AMY = "A1234567X"; + public static final String VALID_STUDENTID_BOB = "A9876543Y"; public static final String VALID_ADDRESS_AMY = "Block 312, Amy Street 1"; public static final String VALID_ADDRESS_BOB = "Block 123, Bobby Street 3"; public static final String VALID_TAG_HUSBAND = "husband"; diff --git a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java index ff177c74ecf..227b23ce9eb 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java @@ -17,6 +17,7 @@ import seedu.address.model.person.Module; import seedu.address.model.person.Name; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; public class JsonAdaptedPersonTest { @@ -26,6 +27,7 @@ public class JsonAdaptedPersonTest { private static final String INVALID_EMAIL = "example.com"; private static final String INVALID_MODULE = "CS100"; private static final String INVALID_YEAR = "0"; + private static final String INVALID_STUDENTID = "C1234567L"; private static final String INVALID_TAG = "#friend"; private static final String VALID_NAME = BENSON.getName().toString(); @@ -33,6 +35,7 @@ public class JsonAdaptedPersonTest { private static final String VALID_EMAIL = BENSON.getEmail().toString(); private static final String VALID_MODULE = BENSON.getModule().toString(); private static final String VALID_YEAR = BENSON.getYear().toString(); + private static final String VALID_STUDENTID = BENSON.getStudentId().toString(); private static final String VALID_ADDRESS = BENSON.getAddress().toString(); private static final List VALID_TAGS = BENSON.getTags().stream() .map(JsonAdaptedTag::new) @@ -48,7 +51,7 @@ public void toModelType_validPersonDetails_returnsPerson() throws Exception { public void toModelType_invalidName_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Name.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -56,7 +59,7 @@ public void toModelType_invalidName_throwsIllegalValueException() { @Test public void toModelType_nullName_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -65,7 +68,7 @@ public void toModelType_nullName_throwsIllegalValueException() { public void toModelType_invalidPhone_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Phone.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -73,7 +76,7 @@ public void toModelType_invalidPhone_throwsIllegalValueException() { @Test public void toModelType_nullPhone_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -82,7 +85,7 @@ public void toModelType_nullPhone_throwsIllegalValueException() { public void toModelType_invalidModule_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, - INVALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + INVALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Module.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -91,7 +94,7 @@ public void toModelType_invalidModule_throwsIllegalValueException() { public void toModelType_nullModule_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, - VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Module.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -100,7 +103,7 @@ public void toModelType_nullModule_throwsIllegalValueException() { public void toModelType_invalidYear_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, - INVALID_YEAR, VALID_ADDRESS, VALID_TAGS); + INVALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Year.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -109,7 +112,7 @@ public void toModelType_invalidYear_throwsIllegalValueException() { public void toModelType_nullYear_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, - null, VALID_ADDRESS, VALID_TAGS); + null, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Year.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -118,7 +121,7 @@ public void toModelType_nullYear_throwsIllegalValueException() { public void toModelType_invalidEmail_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = Email.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -126,16 +129,33 @@ public void toModelType_invalidEmail_throwsIllegalValueException() { @Test public void toModelType_nullEmail_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, - VALID_MODULE, VALID_YEAR, VALID_ADDRESS, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } + @Test + public void toModelType_invalidStudentId_throwsIllegalValueException() { + JsonAdaptedPerson person = + new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + VALID_YEAR, INVALID_STUDENTID, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = StudentId.MESSAGE_CONSTRAINTS; + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + + @Test + public void toModelType_nullStudentId_throwsIllegalValueException() { + JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + VALID_MODULE, VALID_YEAR, null, VALID_ADDRESS, VALID_TAGS); + String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, StudentId.class.getSimpleName()); + assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + } + @Test public void toModelType_invalidAddress_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, - VALID_YEAR, INVALID_ADDRESS, VALID_TAGS); + VALID_YEAR, VALID_STUDENTID, INVALID_ADDRESS, VALID_TAGS); String expectedMessage = Address.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -143,7 +163,7 @@ public void toModelType_invalidAddress_throwsIllegalValueException() { @Test public void toModelType_nullAddress_throwsIllegalValueException() { JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, - VALID_MODULE, VALID_YEAR, null, VALID_TAGS); + VALID_MODULE, VALID_YEAR, VALID_STUDENTID, null, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); } @@ -154,7 +174,7 @@ public void toModelType_invalidTags_throwsIllegalValueException() { invalidTags.add(new JsonAdaptedTag(INVALID_TAG)); JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, - VALID_YEAR, VALID_ADDRESS, invalidTags); + VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, invalidTags); assertThrows(IllegalValueException.class, person::toModelType); } diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index 8536f4b04c9..602d6537043 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -9,6 +9,7 @@ import seedu.address.model.person.Name; import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; import seedu.address.model.util.SampleDataUtil; @@ -23,6 +24,7 @@ public class PersonBuilder { public static final String DEFAULT_EMAIL = "amy@gmail.com"; public static final String DEFAULT_MODULE = "cs2103t"; public static final String DEFAULT_YEAR = "3"; + public static final String DEFAULT_STUDENTID = "A1234567X"; public static final String DEFAULT_ADDRESS = "123, Jurong West Ave 6, #08-111"; private Name name; @@ -30,6 +32,7 @@ public class PersonBuilder { private Email email; private Module module; private Year year; + private StudentId studentId; private Address address; private Set tags; @@ -42,6 +45,7 @@ public PersonBuilder() { email = new Email(DEFAULT_EMAIL); module = new Module(DEFAULT_MODULE); year = new Year(DEFAULT_YEAR); + studentId = new StudentId(DEFAULT_STUDENTID); address = new Address(DEFAULT_ADDRESS); tags = new HashSet<>(); } @@ -55,6 +59,7 @@ public PersonBuilder(Person personToCopy) { email = personToCopy.getEmail(); module = personToCopy.getModule(); year = personToCopy.getYear(); + studentId = personToCopy.getStudentId(); address = personToCopy.getAddress(); tags = new HashSet<>(personToCopy.getTags()); } @@ -115,8 +120,16 @@ public PersonBuilder withYear(String year) { return this; } + /** + * Sets the {@code StudentId} of the {@code Person} that we are building. + */ + public PersonBuilder withStudentId(String studentId) { + this.studentId = new StudentId(studentId); + return this; + } + public Person build() { - return new Person(name, phone, email, module, year, address, tags); + return new Person(name, phone, email, module, year, studentId, address, tags); } } diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index b0dcad291df..bb6ab0fd771 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -10,6 +10,8 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENTID_AMY; +import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENTID_BOB; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_AMY; @@ -29,39 +31,45 @@ public class TypicalPersons { public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") - .withModule("CS2100").withYear("3").withPhone("94351253") + .withModule("CS2100").withYear("3").withPhone("94351253").withStudentId("A1234569L") .withTags("friends").build(); public static final Person BENSON = new PersonBuilder().withName("Benson Meier") .withAddress("311, Clementi Ave 2, #02-25") .withEmail("johnd@example.com").withPhone("98765432") - .withModule("CS2100").withYear("3") + .withModule("CS2100").withYear("3").withStudentId("A0000009Y") .withTags("owesMoney", "friends").build(); public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") - .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withAddress("wall street").build(); + .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withStudentId("A9875647U") + .withAddress("wall street").build(); public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withModule("CS2100").withYear("3") + .withEmail("cornelia@example.com").withModule("CS2100").withYear("3").withStudentId("A9345647M") .withAddress("10th street").withTags("friends").build(); public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") - .withEmail("werner@example.com").withModule("CS2100").withYear("3").withAddress("michegan ave").build(); + .withEmail("werner@example.com").withModule("CS2100").withYear("3").withStudentId("A8768974P") + .withAddress("michegan ave").build(); public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") - .withEmail("lydia@example.com").withModule("CS2100").withYear("3").withAddress("little tokyo").build(); + .withEmail("lydia@example.com").withModule("CS2100").withYear("3").withStudentId("A9870921H") + .withAddress("little tokyo").build(); public static final Person GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") - .withEmail("anna@example.com").withModule("CS2100").withYear("3").withAddress("4th street").build(); + .withEmail("anna@example.com").withModule("CS2100").withYear("3").withStudentId("A0673201Y") + .withAddress("4th street").build(); // Manually added public static final Person HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") - .withEmail("stefan@example.com").withModule("cs2103t").withYear("3").withAddress("little india").build(); + .withEmail("stefan@example.com").withModule("cs2103t").withYear("3").withStudentId("A1234758N") + .withAddress("little india").build(); public static final Person IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") - .withEmail("hans@example.com").withModule("cs2100").withYear("4").withAddress("chicago ave").build(); + .withEmail("hans@example.com").withModule("cs2100").withYear("4").withStudentId("A0965302K") + .withAddress("chicago ave").build(); // Manually added - Person's details found in {@code CommandTestUtil} public static final Person AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) .withEmail(VALID_EMAIL_AMY).withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) - .withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); + .withStudentId(VALID_STUDENTID_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); public static final Person BOB = new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) .withEmail(VALID_EMAIL_BOB).withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) - .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND) - .build(); + .withStudentId(VALID_STUDENTID_BOB).withAddress(VALID_ADDRESS_BOB) + .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); public static final String KEYWORD_MATCHING_MEIER = "Meier"; // A keyword that matches MEIER From fda29e8a2ea0b44f8c19e6a641cd0b76754e4820 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Tue, 11 Oct 2022 14:06:30 +0800 Subject: [PATCH 054/482] Fix Checkstyle issues --- src/main/java/seedu/address/model/person/Person.java | 3 ++- .../java/seedu/address/model/util/SampleDataUtil.java | 8 +++++++- .../java/seedu/address/storage/JsonAdaptedPerson.java | 6 ++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index f20d8f54e02..d72d7d92546 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -30,7 +30,8 @@ public class Person { /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Module module, Year year, StudentId studentId, Address address, Set tags) { + public Person(Name name, Phone phone, Email email, Module module, Year year, + StudentId studentId, Address address, Set tags) { requireAllNonNull(name, phone, email, module, year, address, tags); this.name = name; this.phone = phone; diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index 74d54036212..d9662efea67 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -6,8 +6,14 @@ import seedu.address.model.AddressBook; import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.*; +import seedu.address.model.person.Address; +import seedu.address.model.person.Email; import seedu.address.model.person.Module; +import seedu.address.model.person.Name; +import seedu.address.model.person.Person; +import seedu.address.model.person.Phone; +import seedu.address.model.person.StudentId; +import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; /** diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java index 95fbea90903..93d9f6b3d28 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/seedu/address/storage/JsonAdaptedPerson.java @@ -125,7 +125,8 @@ public Person toModelType() throws IllegalValueException { final Year modelYear = new Year(year); if (studentId == null) { - throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, StudentId.class.getSimpleName())); + throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, + StudentId.class.getSimpleName())); } if (!StudentId.isValidId(studentId)) { throw new IllegalValueException(StudentId.MESSAGE_CONSTRAINTS); @@ -141,7 +142,8 @@ public Person toModelType() throws IllegalValueException { final Address modelAddress = new Address(address); final Set modelTags = new HashSet<>(personTags); - return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, modelStudentId, modelAddress, modelTags); + return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, + modelStudentId, modelAddress, modelTags); } } From 9f0a9e25bac6aae8f4456affa3b932d5a007419c Mon Sep 17 00:00:00 2001 From: fannyjian Date: Tue, 11 Oct 2022 14:37:48 +0800 Subject: [PATCH 055/482] Modify UI to include year and module --- .../java/seedu/address/ui/PersonCard.java | 16 +++++++++------ src/main/resources/view/DarkTheme.css | 20 +++++++++++++------ src/main/resources/view/PersonListCard.fxml | 14 ++++--------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 7fc927bc5d9..1feb07c73bc 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -31,26 +31,30 @@ public class PersonCard extends UiPart { @FXML private Label name; @FXML - private Label id; + private Label module; @FXML - private Label phone; + private Label studentId; + @FXML + private Label year; @FXML - private Label address; + private Label phone; @FXML private Label email; @FXML private FlowPane tags; + /** * Creates a {@code PersonCode} with the given {@code Person} and index to display. */ public PersonCard(Person person, int displayedIndex) { super(FXML); this.person = person; - id.setText(displayedIndex + ". "); +// id.setText(displayedIndex + ". "); name.setText(person.getName().fullName); + module.setText(person.getModule().value); +// studentId.setText(person.getStudentId().value); phone.setText(person.getPhone().value); - address.setText(person.getAddress().value); email.setText(person.getEmail().value); person.getTags().stream() .sorted(Comparator.comparing(tag -> tag.tagName)) @@ -71,7 +75,7 @@ public boolean equals(Object other) { // state check PersonCard card = (PersonCard) other; - return id.getText().equals(card.id.getText()) + return studentId.getText().equals(card.studentId.getText()) && person.equals(card.person); } } diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 246046ff871..01d27aea13c 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -120,15 +120,22 @@ -fx-text-fill: white; } -/* -names of the tutor -*/ .cell_big_label { -fx-font-family: "Segoe UI Bold"; - -fx-font-size: 20px; + -fx-font-size: 25px; -fx-text-fill: #000000; } +.cell_module_label { + -fx-font-family: "Segoe UI Bold"; + -fx-font-size: 14px; + -fx-text-fill: white; + -fx-background-color: #c08189; + -fx-padding: 1 3 1 3; + -fx-border-radius: 2; + -fx-background-radius: 2; +} + .cell_small_label { -fx-font-family: "Courier New"; -fx-font-size: 13px; @@ -346,10 +353,11 @@ names of the tutor } #tags .label { - -fx-text-fill: white; -fx-background-color: #3e7b91; + -fx-font-family: "Segoe UI Bold"; + -fx-font-size: 14px; + -fx-text-fill: white; -fx-padding: 1 3 1 3; -fx-border-radius: 2; -fx-background-radius: 2; - -fx-font-size: 11; } diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index f08ea32ad55..0f2cd527447 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -18,18 +18,12 @@ - - -
- + + + - - + + @@ -46,11 +46,11 @@ - + - + diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index 833e89d9210..11531c5d3ce 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -11,7 +11,7 @@ - + From 68c86bb3af434a803cb78c4c93887fc8c3c48a8c Mon Sep 17 00:00:00 2001 From: fannyjian Date: Wed, 12 Oct 2022 10:05:27 +0800 Subject: [PATCH 072/482] Display Year and studentID --- src/main/java/seedu/address/ui/PersonCard.java | 7 ++++--- src/main/resources/view/DarkTheme.css | 1 - src/main/resources/view/PersonListCard.fxml | 4 ++++ src/main/resources/view/PersonListPanel.fxml | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index d5c7a6b331c..085d511fb14 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -33,10 +33,10 @@ public class PersonCard extends UiPart { @FXML private Label module; @FXML - private Label studentId; - @FXML private Label year; @FXML + private Label studentId; + @FXML private Label phone; @FXML private Label email; @@ -54,7 +54,8 @@ public PersonCard(Person person, int displayedIndex) { this.person = person; name.setText(person.getName().fullName); module.setText(person.getModule().value); - // studentId.setText(person.getStudentId().value); + year.setText("year " + person.getYear().value); + studentId.setText(person.getStudentId().value); phone.setText(person.getPhone().value); email.setText(person.getEmail().value); comment.setText(person.getComment().value); diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 91f9793d00d..8a2d63b1b94 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -242,7 +242,6 @@ -fx-background-color: derive(#B1C5C3, 30%); -fx-font-family: "Courier New"; -fx-font-size: 11pt; - -fx-text-fill: black; } .button:hover { diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index cfc09cb4f00..f4797b0b50a 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -22,6 +22,10 @@ + +

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 E0QKuxZvX%Q From df61b5d83a9ca627db18124bfa1b9e690ad091d9 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 12:15:56 +0800 Subject: [PATCH 074/482] Add find by module feature --- src/main/java/seedu/address/MainApp.java | 3 +- .../util}/util/SampleDataUtil.java | 2 +- .../logic/commands/FindByModuleCommand.java | 44 +++++++++ .../logic/parser/AddressBookParser.java | 7 ++ .../parser/FindByModuleCommandParser.java | 32 +++++++ .../ModuleContainsKeywordPredicate.java | 30 ++++++ .../commands/FindByModuleCommandTest.java | 95 +++++++++++++++++++ .../parser/FindByModuleCommandParserTest.java | 34 +++++++ .../ModuleContainsKeywordsPredicateTest.java | 72 ++++++++++++++ .../seedu/address/testutil/PersonBuilder.java | 2 +- .../address/testutil/TypicalPersons.java | 3 + 11 files changed, 321 insertions(+), 3 deletions(-) rename src/main/java/seedu/address/{model => commons/util}/util/SampleDataUtil.java (98%) create mode 100644 src/main/java/seedu/address/logic/commands/FindByModuleCommand.java create mode 100644 src/main/java/seedu/address/logic/parser/FindByModuleCommandParser.java create mode 100644 src/main/java/seedu/address/model/person/ModuleContainsKeywordPredicate.java create mode 100644 src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/FindByModuleCommandParserTest.java create mode 100644 src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index 4133aaa0151..3c2e19af008 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -21,7 +21,7 @@ import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.ReadOnlyUserPrefs; import seedu.address.model.UserPrefs; -import seedu.address.model.util.SampleDataUtil; +import seedu.address.commons.util.util.SampleDataUtil; import seedu.address.storage.AddressBookStorage; import seedu.address.storage.JsonAddressBookStorage; import seedu.address.storage.JsonUserPrefsStorage; @@ -54,6 +54,7 @@ public void init() throws Exception { AppParameters appParameters = AppParameters.parse(getParameters()); config = initConfig(appParameters.getConfigPath()); + UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(config.getUserPrefsFilePath()); UserPrefs userPrefs = initPrefs(userPrefsStorage); AddressBookStorage addressBookStorage = new JsonAddressBookStorage(userPrefs.getAddressBookFilePath()); diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/commons/util/util/SampleDataUtil.java similarity index 98% rename from src/main/java/seedu/address/model/util/SampleDataUtil.java rename to src/main/java/seedu/address/commons/util/util/SampleDataUtil.java index d9662efea67..b927d115b55 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/commons/util/util/SampleDataUtil.java @@ -1,4 +1,4 @@ -package seedu.address.model.util; +package seedu.address.commons.util.util; import java.util.Arrays; import java.util.Set; diff --git a/src/main/java/seedu/address/logic/commands/FindByModuleCommand.java b/src/main/java/seedu/address/logic/commands/FindByModuleCommand.java new file mode 100644 index 00000000000..a096109db49 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/FindByModuleCommand.java @@ -0,0 +1,44 @@ +package seedu.address.logic.commands; + +import static java.util.Objects.requireNonNull; + +import seedu.address.commons.core.Messages; +import seedu.address.model.Model; +import seedu.address.model.person.ModuleContainsKeywordPredicate; + +/** + * Finds and list all TAs in TutHub who are teaching the module code being searched. + * Keyword matching is case insensitive. + */ +public class FindByModuleCommand extends Command { + + public static final String COMMAND_WORD = "findbymodule"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all tutors who are teaching " + + "the specified module code (case-insensitive) being searched" + + " and displays them as a list with index numbers.\n" + + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" + + "Example: " + COMMAND_WORD + " CS2040"; + + private final ModuleContainsKeywordPredicate predicate; + + public FindByModuleCommand(ModuleContainsKeywordPredicate predicate) { + this.predicate = predicate; + } + + @Override + public CommandResult execute(Model model) { + requireNonNull(model); + model.updateFilteredPersonList(predicate); + System.out.println(model.getFilteredPersonList()); + return new CommandResult(( + String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size()))); + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof FindByModuleCommand // instanceof handles nulls + && predicate.equals(((FindByModuleCommand) other).predicate)); // state check + } +} diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 1e466792b46..7d12a1f5155 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -3,6 +3,8 @@ import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; +import java.util.Arrays; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -12,10 +14,12 @@ import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.ExitCommand; +import seedu.address.logic.commands.FindByModuleCommand; import seedu.address.logic.commands.FindCommand; import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.person.NameContainsKeywordsPredicate; /** * Parses user input. @@ -59,6 +63,9 @@ public Command parseCommand(String userInput) throws ParseException { case FindCommand.COMMAND_WORD: return new FindCommandParser().parse(arguments); + case FindByModuleCommand.COMMAND_WORD: + return new FindByModuleCommandParser().parse(arguments); + case ListCommand.COMMAND_WORD: return new ListCommand(); diff --git a/src/main/java/seedu/address/logic/parser/FindByModuleCommandParser.java b/src/main/java/seedu/address/logic/parser/FindByModuleCommandParser.java new file mode 100644 index 00000000000..e6e8e792331 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/FindByModuleCommandParser.java @@ -0,0 +1,32 @@ +package seedu.address.logic.parser; + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import java.util.Arrays; + +import seedu.address.logic.commands.FindByModuleCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.person.ModuleContainsKeywordPredicate; + +/** + * Parses input arguments and creates a new FindByModuleCommand object. + */ +public class FindByModuleCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the FindByModuleCommand + * and returns a FindByModuleCommand object for execution. + * @throws ParseException if the user input does not conform the expected format + */ + public FindByModuleCommand parse(String args) throws ParseException { + String trimmedArgs = args.trim(); + if (trimmedArgs.isEmpty()) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindByModuleCommand.MESSAGE_USAGE)); + } + + String[] nameKeywords = trimmedArgs.split("\\s+"); + + return new FindByModuleCommand(new ModuleContainsKeywordPredicate(Arrays.asList(nameKeywords))); + } +} diff --git a/src/main/java/seedu/address/model/person/ModuleContainsKeywordPredicate.java b/src/main/java/seedu/address/model/person/ModuleContainsKeywordPredicate.java new file mode 100644 index 00000000000..66a262b31a9 --- /dev/null +++ b/src/main/java/seedu/address/model/person/ModuleContainsKeywordPredicate.java @@ -0,0 +1,30 @@ +package seedu.address.model.person; + +import java.util.List; +import java.util.function.Predicate; + +import seedu.address.commons.util.StringUtil; + +/** + * Tests that a {@code Person}'s {@code Module} matches any of the keywords given. + */ +public class ModuleContainsKeywordPredicate implements Predicate { + private final List keywords; + + public ModuleContainsKeywordPredicate(List keywords) { + this.keywords = keywords; + } + + @Override + public boolean test(Person person) { + return keywords.stream() + .anyMatch((keyword -> StringUtil.containsWordIgnoreCase(person.getModule().value, keyword))); + } + + @Override + public boolean equals(Object other) { + return other == this + || (other instanceof ModuleContainsKeywordPredicate + && keywords.equals(((ModuleContainsKeywordPredicate) other).keywords)); + } +} diff --git a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java new file mode 100644 index 00000000000..1d17f2717af --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java @@ -0,0 +1,95 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.commons.core.Messages.MESSAGE_PERSONS_LISTED_OVERVIEW; +import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.testutil.TypicalPersons.HOON; +import static seedu.address.testutil.TypicalPersons.IDA; +import static seedu.address.testutil.TypicalPersons.JACKSON; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import seedu.address.model.AddressBook; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.person.ModuleContainsKeywordPredicate; +import seedu.address.model.person.Person; + +/** + * Contains integration tests (interaction with the model) for {@code FindByModuleCommand}. + */ +public class FindByModuleCommandTest { + List testTAList = Arrays.asList(IDA, HOON, JACKSON); + + private AddressBook getTestTAAddressBook() { + AddressBook testTAAddressBook = new AddressBook(); + for (Person person : testTAList) { + testTAAddressBook.addPerson(person); + } + return testTAAddressBook; + } + + private Model model = new ModelManager(getTestTAAddressBook(), new UserPrefs()); + private Model expectedModel = new ModelManager(getTestTAAddressBook(), new UserPrefs()); + + @Test + public void equals() { + ModuleContainsKeywordPredicate firstPredicate = + new ModuleContainsKeywordPredicate(Collections.singletonList("first")); + ModuleContainsKeywordPredicate secondPredicate = + new ModuleContainsKeywordPredicate(Collections.singletonList("second")); + + FindByModuleCommand findByModuleFirstCommand = new FindByModuleCommand(firstPredicate); + FindByModuleCommand findByModuleSecondCommand = new FindByModuleCommand(secondPredicate); + + // same object -> returns true + assertTrue(findByModuleFirstCommand.equals(findByModuleFirstCommand)); + + // same values -> returns true + FindByModuleCommand findByModuleFirstCommandCopy = new FindByModuleCommand(firstPredicate); + assertTrue(findByModuleFirstCommand.equals(findByModuleFirstCommandCopy)); + + // different types -> returns false + assertFalse(findByModuleFirstCommand.equals(1)); + + // null -> returns false + assertFalse(findByModuleFirstCommand.equals(null)); + + // different person -> returns false + assertFalse(findByModuleFirstCommand.equals(findByModuleSecondCommand)); + } + + @Test + public void execute_zeroKeywords_noPersonFound() { + String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 0); + ModuleContainsKeywordPredicate predicate = preparePredicate(" "); + FindByModuleCommand command = new FindByModuleCommand(predicate); + expectedModel.updateFilteredPersonList(predicate); + assertCommandSuccess(command, model, expectedMessage, expectedModel); + assertEquals(Collections.emptyList(), model.getFilteredPersonList()); + } + + @Test + public void execute_multipleKeywords_multiplePersonsFound() { + String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 2); + ModuleContainsKeywordPredicate predicate = preparePredicate("cs2105 cs2103t"); + FindByModuleCommand command = new FindByModuleCommand(predicate); + expectedModel.updateFilteredPersonList(predicate); + assertCommandSuccess(command, model, expectedMessage, expectedModel); + assertEquals(Arrays.asList(HOON, JACKSON), model.getFilteredPersonList()); + } + + /** + * Parses {@code userInput} into a {@code ModuleContainsKeywordsPredicate}. + */ + private ModuleContainsKeywordPredicate preparePredicate(String userInput) { + return new ModuleContainsKeywordPredicate(Arrays.asList(userInput.split("\\s+"))); + } +} diff --git a/src/test/java/seedu/address/logic/parser/FindByModuleCommandParserTest.java b/src/test/java/seedu/address/logic/parser/FindByModuleCommandParserTest.java new file mode 100644 index 00000000000..9f3445d9591 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/FindByModuleCommandParserTest.java @@ -0,0 +1,34 @@ +package seedu.address.logic.parser; + +import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; + +import java.util.Arrays; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.FindByModuleCommand; +import seedu.address.model.person.ModuleContainsKeywordPredicate; + +public class FindByModuleCommandParserTest { + + private FindByModuleCommandParser parser = new FindByModuleCommandParser(); + + @Test + public void parse_emptyArg_throwsParseException() { + assertParseFailure(parser, " ", + String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindByModuleCommand.MESSAGE_USAGE)); + } + + @Test + public void parse_validArgs_returnsFindByModuleCommand() { + // no leading and trailing whitespaces + FindByModuleCommand expectedFindByModuleCommand = + new FindByModuleCommand(new ModuleContainsKeywordPredicate(Arrays.asList("cs2100", "cs2105"))); + assertParseSuccess(parser, "cs2100 cs2105", expectedFindByModuleCommand); + + // multiple whitespaces between keywords + assertParseSuccess(parser, " \n cs2100 \n \t cs2105 \t", expectedFindByModuleCommand); + } +} diff --git a/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java new file mode 100644 index 00000000000..fd9de5b678f --- /dev/null +++ b/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java @@ -0,0 +1,72 @@ +package seedu.address.model.person; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import seedu.address.testutil.PersonBuilder; + +public class ModuleContainsKeywordsPredicateTest { + + @Test + public void equals() { + List firstPredicateKeywordList = Collections.singletonList("cs2100"); + List secondPredicateKeywordList = Arrays.asList("cs2100", "cs2105"); + + ModuleContainsKeywordPredicate firstPredicate = + new ModuleContainsKeywordPredicate(firstPredicateKeywordList); + ModuleContainsKeywordPredicate secondPredicate = + new ModuleContainsKeywordPredicate(secondPredicateKeywordList); + + // same object -> returns true + assertTrue(firstPredicate.equals(firstPredicate)); + + // same values -> return true + ModuleContainsKeywordPredicate firstPredicateCopy = + new ModuleContainsKeywordPredicate(firstPredicateKeywordList); + assertTrue(firstPredicate.equals(firstPredicateCopy)); + + // different types -> returns false + assertFalse(firstPredicate.equals(1)); + + // null -> returns false + assertFalse(firstPredicate.equals(null)); + + // different person -> returns false + assertFalse(firstPredicate.equals(secondPredicate)); + } + + @Test + public void test_moduleContainsKeywords_returnsTrue() { + // One keyword + ModuleContainsKeywordPredicate predicate = + new ModuleContainsKeywordPredicate(Collections.singletonList("cs2105")); + assertTrue(predicate.test(new PersonBuilder().withName("Alice").withModule("cs2105").build())); + + // Mixed case keywords + predicate = new ModuleContainsKeywordPredicate(Collections.singletonList("cS2105")); + assertTrue(predicate.test(new PersonBuilder().withName("Alice").withModule("cs2105").build())); + } + + @Test + public void test_ModuleDoesNotContainKeywords_returnFalse() { + // Zero keywords + ModuleContainsKeywordPredicate predicate = + new ModuleContainsKeywordPredicate(Collections.emptyList()); + assertFalse(predicate.test(new PersonBuilder().withName("Alice").build())); + + // Non-matching keyword + predicate = new ModuleContainsKeywordPredicate(Arrays.asList("cs2100")); + assertFalse(predicate.test(new PersonBuilder().withName("Alice").withModule("cs2105").build())); + + // Keywords match phone, email and address, but does not match module + predicate = new ModuleContainsKeywordPredicate(Arrays.asList("99999999", "alice@email.com", "Main", "Street")); + assertFalse(predicate.test(new PersonBuilder().withName("Alice").withPhone("99999999") + .withEmail("alice@email.com").withAddress("Main Street").withModule("cs2105").build())); + } +} diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index 602d6537043..fbffc7c5bd8 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -12,7 +12,7 @@ import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; -import seedu.address.model.util.SampleDataUtil; +import seedu.address.commons.util.util.SampleDataUtil; /** * A utility class to help with building Person objects. diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index bb6ab0fd771..670518ce3e6 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -61,6 +61,9 @@ public class TypicalPersons { public static final Person IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") .withEmail("hans@example.com").withModule("cs2100").withYear("4").withStudentId("A0965302K") .withAddress("chicago ave").build(); + public static final Person JACKSON = new PersonBuilder().withName("Jackson Tan").withPhone("98765432") + .withEmail("jackson@example.com").withModule("cs2105").withYear("2").withStudentId("A2345678Y") + .withAddress("Kent Ridge").build(); // Manually added - Person's details found in {@code CommandTestUtil} public static final Person AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) From 0c40eb53e0a7a8b839698630abc626931fcc8691 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 12:21:38 +0800 Subject: [PATCH 075/482] Fix checkstyle issues --- src/main/java/seedu/address/MainApp.java | 2 +- .../java/seedu/address/logic/parser/AddressBookParser.java | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index 3c2e19af008..1d443d779d0 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -13,6 +13,7 @@ import seedu.address.commons.exceptions.DataConversionException; import seedu.address.commons.util.ConfigUtil; import seedu.address.commons.util.StringUtil; +import seedu.address.commons.util.util.SampleDataUtil; import seedu.address.logic.Logic; import seedu.address.logic.LogicManager; import seedu.address.model.AddressBook; @@ -21,7 +22,6 @@ import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.ReadOnlyUserPrefs; import seedu.address.model.UserPrefs; -import seedu.address.commons.util.util.SampleDataUtil; import seedu.address.storage.AddressBookStorage; import seedu.address.storage.JsonAddressBookStorage; import seedu.address.storage.JsonUserPrefsStorage; diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 7d12a1f5155..df35e0c42cb 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -3,8 +3,6 @@ import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; -import java.util.Arrays; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,7 +17,6 @@ import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; /** * Parses user input. From eecd0fa9150758aca58c0762bc29e2a52931957d Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 12:41:27 +0800 Subject: [PATCH 076/482] Fix checkstyle errors --- .../logic/commands/FindByModuleCommandTest.java | 16 ++++++++-------- .../ModuleContainsKeywordsPredicateTest.java | 2 +- .../seedu/address/testutil/PersonBuilder.java | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java index 1d17f2717af..f716f8802b8 100644 --- a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java @@ -26,18 +26,18 @@ * Contains integration tests (interaction with the model) for {@code FindByModuleCommand}. */ public class FindByModuleCommandTest { - List testTAList = Arrays.asList(IDA, HOON, JACKSON); + private List testTaList = Arrays.asList(IDA, HOON, JACKSON); - private AddressBook getTestTAAddressBook() { - AddressBook testTAAddressBook = new AddressBook(); - for (Person person : testTAList) { - testTAAddressBook.addPerson(person); + private AddressBook getTestTaAddressBook() { + AddressBook testTaAddressBook = new AddressBook(); + for (Person person : testTaList) { + testTaAddressBook.addPerson(person); } - return testTAAddressBook; + return testTaAddressBook; } - private Model model = new ModelManager(getTestTAAddressBook(), new UserPrefs()); - private Model expectedModel = new ModelManager(getTestTAAddressBook(), new UserPrefs()); + private Model model = new ModelManager(getTestTaAddressBook(), new UserPrefs()); + private Model expectedModel = new ModelManager(getTestTaAddressBook(), new UserPrefs()); @Test public void equals() { diff --git a/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java index fd9de5b678f..0ba4e20cf50 100644 --- a/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java +++ b/src/test/java/seedu/address/model/person/ModuleContainsKeywordsPredicateTest.java @@ -54,7 +54,7 @@ public void test_moduleContainsKeywords_returnsTrue() { } @Test - public void test_ModuleDoesNotContainKeywords_returnFalse() { + public void test_moduleDoesNotContainKeywords_returnFalse() { // Zero keywords ModuleContainsKeywordPredicate predicate = new ModuleContainsKeywordPredicate(Collections.emptyList()); diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index fbffc7c5bd8..dcc941fc15d 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -3,6 +3,7 @@ import java.util.HashSet; import java.util.Set; +import seedu.address.commons.util.util.SampleDataUtil; import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Module; @@ -12,7 +13,6 @@ import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; -import seedu.address.commons.util.util.SampleDataUtil; /** * A utility class to help with building Person objects. From 23f534efc6163fdfcdc69a948a2a3e4998d29193 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 12:48:31 +0800 Subject: [PATCH 077/482] Fix checkstyle error --- .../address/logic/commands/FindByModuleCommandTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java index f716f8802b8..914f0d66ca6 100644 --- a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java @@ -26,6 +26,9 @@ * Contains integration tests (interaction with the model) for {@code FindByModuleCommand}. */ public class FindByModuleCommandTest { + private Model model = new ModelManager(getTestTaAddressBook(), new UserPrefs()); + private Model expectedModel = new ModelManager(getTestTaAddressBook(), new UserPrefs()); + private List testTaList = Arrays.asList(IDA, HOON, JACKSON); private AddressBook getTestTaAddressBook() { @@ -36,9 +39,6 @@ private AddressBook getTestTaAddressBook() { return testTaAddressBook; } - private Model model = new ModelManager(getTestTaAddressBook(), new UserPrefs()); - private Model expectedModel = new ModelManager(getTestTaAddressBook(), new UserPrefs()); - @Test public void equals() { ModuleContainsKeywordPredicate firstPredicate = From 159e7591f4352920b0765c370ea41fe285908872 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 13:05:50 +0800 Subject: [PATCH 078/482] Fix failing tests --- .../commands/FindByModuleCommandTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java index 914f0d66ca6..17dc2be70f5 100644 --- a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java @@ -26,21 +26,13 @@ * Contains integration tests (interaction with the model) for {@code FindByModuleCommand}. */ public class FindByModuleCommandTest { + private List testTaList = Arrays.asList(IDA, HOON, JACKSON); private Model model = new ModelManager(getTestTaAddressBook(), new UserPrefs()); private Model expectedModel = new ModelManager(getTestTaAddressBook(), new UserPrefs()); - private List testTaList = Arrays.asList(IDA, HOON, JACKSON); - - private AddressBook getTestTaAddressBook() { - AddressBook testTaAddressBook = new AddressBook(); - for (Person person : testTaList) { - testTaAddressBook.addPerson(person); - } - return testTaAddressBook; - } - @Test public void equals() { + System.out.println(getTestTaAddressBook()); ModuleContainsKeywordPredicate firstPredicate = new ModuleContainsKeywordPredicate(Collections.singletonList("first")); ModuleContainsKeywordPredicate secondPredicate = @@ -92,4 +84,12 @@ public void execute_multipleKeywords_multiplePersonsFound() { private ModuleContainsKeywordPredicate preparePredicate(String userInput) { return new ModuleContainsKeywordPredicate(Arrays.asList(userInput.split("\\s+"))); } + + private AddressBook getTestTaAddressBook() { + AddressBook testTaAddressBook = new AddressBook(); + for (Person person : testTaList) { + testTaAddressBook.addPerson(person); + } + return testTaAddressBook; + } } From 6a149e22935d65adc7e2aec9bc2020106b6bac3d Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 13:09:56 +0800 Subject: [PATCH 079/482] Fix error --- .../logic/commands/FindByModuleCommandTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java index 17dc2be70f5..f5924eb841c 100644 --- a/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindByModuleCommandTest.java @@ -78,13 +78,6 @@ public void execute_multipleKeywords_multiplePersonsFound() { assertEquals(Arrays.asList(HOON, JACKSON), model.getFilteredPersonList()); } - /** - * Parses {@code userInput} into a {@code ModuleContainsKeywordsPredicate}. - */ - private ModuleContainsKeywordPredicate preparePredicate(String userInput) { - return new ModuleContainsKeywordPredicate(Arrays.asList(userInput.split("\\s+"))); - } - private AddressBook getTestTaAddressBook() { AddressBook testTaAddressBook = new AddressBook(); for (Person person : testTaList) { @@ -92,4 +85,11 @@ private AddressBook getTestTaAddressBook() { } return testTaAddressBook; } + + /** + * Parses {@code userInput} into a {@code ModuleContainsKeywordsPredicate}. + */ + private ModuleContainsKeywordPredicate preparePredicate(String userInput) { + return new ModuleContainsKeywordPredicate(Arrays.asList(userInput.split("\\s+"))); + } } From f2e581dd6826e625233aab5624f3fdcd90b66d47 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 13:34:45 +0800 Subject: [PATCH 080/482] Fix merge conflicts --- src/main/java/seedu/address/MainApp.java | 2 +- .../address/{commons/util => model}/util/SampleDataUtil.java | 2 +- src/test/java/seedu/address/testutil/PersonBuilder.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/seedu/address/{commons/util => model}/util/SampleDataUtil.java (98%) diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index 1d443d779d0..7eba37d6a76 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -13,7 +13,6 @@ import seedu.address.commons.exceptions.DataConversionException; import seedu.address.commons.util.ConfigUtil; import seedu.address.commons.util.StringUtil; -import seedu.address.commons.util.util.SampleDataUtil; import seedu.address.logic.Logic; import seedu.address.logic.LogicManager; import seedu.address.model.AddressBook; @@ -22,6 +21,7 @@ import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.ReadOnlyUserPrefs; import seedu.address.model.UserPrefs; +import seedu.address.model.util.SampleDataUtil; import seedu.address.storage.AddressBookStorage; import seedu.address.storage.JsonAddressBookStorage; import seedu.address.storage.JsonUserPrefsStorage; diff --git a/src/main/java/seedu/address/commons/util/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java similarity index 98% rename from src/main/java/seedu/address/commons/util/util/SampleDataUtil.java rename to src/main/java/seedu/address/model/util/SampleDataUtil.java index b927d115b55..d9662efea67 100644 --- a/src/main/java/seedu/address/commons/util/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -1,4 +1,4 @@ -package seedu.address.commons.util.util; +package seedu.address.model.util; import java.util.Arrays; import java.util.Set; diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index dcc941fc15d..dac99ebbec2 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -3,7 +3,7 @@ import java.util.HashSet; import java.util.Set; -import seedu.address.commons.util.util.SampleDataUtil; +import seedu.address.model.util.SampleDataUtil; import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Module; From bf3b435178d023d8546790b44fcf3aad1636a987 Mon Sep 17 00:00:00 2001 From: leirdas Date: Wed, 12 Oct 2022 13:43:16 +0800 Subject: [PATCH 081/482] Fix errors --- src/test/java/seedu/address/testutil/PersonBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index dac99ebbec2..602d6537043 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -3,7 +3,6 @@ import java.util.HashSet; import java.util.Set; -import seedu.address.model.util.SampleDataUtil; import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Module; @@ -13,6 +12,7 @@ import seedu.address.model.person.StudentId; import seedu.address.model.person.Year; import seedu.address.model.tag.Tag; +import seedu.address.model.util.SampleDataUtil; /** * A utility class to help with building Person objects. From 96b19a017c4cb34e2c86f4add0c009a77e143771 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Wed, 12 Oct 2022 15:11:14 +0800 Subject: [PATCH 082/482] Remove address model --- .../logic/commands/CommentCommand.java | 2 +- .../address/logic/commands/EditCommand.java | 19 +------ .../logic/parser/AddCommandParser.java | 9 +-- .../seedu/address/logic/parser/CliSyntax.java | 1 - .../address/logic/parser/ParserUtil.java | 16 ------ .../seedu/address/model/person/Address.java | 57 ------------------- .../seedu/address/model/person/Person.java | 15 +---- .../address/model/util/SampleDataUtil.java | 19 ++----- .../address/storage/JsonAdaptedPerson.java | 16 +----- .../storage/JsonAdaptedPersonTest.java | 46 +++++---------- 10 files changed, 30 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/seedu/address/model/person/Address.java diff --git a/src/main/java/seedu/address/logic/commands/CommentCommand.java b/src/main/java/seedu/address/logic/commands/CommentCommand.java index 608241a7d5f..9d928001726 100644 --- a/src/main/java/seedu/address/logic/commands/CommentCommand.java +++ b/src/main/java/seedu/address/logic/commands/CommentCommand.java @@ -77,7 +77,7 @@ public CommandResult execute(Model model) throws CommandException { Person editedPerson = new Person( personToEdit.getName(), personToEdit.getPhone(), personToEdit.getEmail(), personToEdit.getModule(), personToEdit.getYear(), personToEdit.getStudentId(), - personToEdit.getAddress(), comment, personToEdit.getTags()); + comment, personToEdit.getTags()); model.setPerson(personToEdit, editedPerson); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index d66d2f53f2f..87d0e9f09dc 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -1,7 +1,6 @@ package seedu.address.logic.commands; import static java.util.Objects.requireNonNull; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; @@ -22,7 +21,6 @@ import seedu.address.commons.util.CollectionUtil; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; -import seedu.address.model.person.Address; import seedu.address.model.person.Comment; import seedu.address.model.person.Email; import seedu.address.model.person.Module; @@ -50,7 +48,6 @@ public class EditCommand extends Command { + "[" + PREFIX_MODULE + "MODULE] " + "[" + PREFIX_YEAR + "YEAR] " + "[" + PREFIX_STUDENTID + "STUDENT ID] " - + "[" + PREFIX_ADDRESS + "ADDRESS] " + "[" + PREFIX_TAG + "TAG]...\n" + "Example: " + COMMAND_WORD + " 1 " + PREFIX_PHONE + "91234567 " @@ -109,12 +106,11 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript Module updatedModule = editPersonDescriptor.getModule().orElse(personToEdit.getModule()); Year updatedYear = editPersonDescriptor.getYear().orElse(personToEdit.getYear()); StudentId updatedStudentId = editPersonDescriptor.getStudentId().orElse(personToEdit.getStudentId()); - Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); Comment updatedComment = personToEdit.getComment(); Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); return new Person(updatedName, updatedPhone, updatedEmail, - updatedModule, updatedYear, updatedStudentId, updatedAddress, updatedComment, updatedTags); + updatedModule, updatedYear, updatedStudentId, updatedComment, updatedTags); } @Override @@ -146,7 +142,6 @@ public static class EditPersonDescriptor { private Module module; private Year year; private StudentId studentId; - private Address address; private Set tags; public EditPersonDescriptor() {} @@ -162,7 +157,6 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { setModule(toCopy.module); setYear(toCopy.year); setStudentId(toCopy.studentId); - setAddress(toCopy.address); setTags(toCopy.tags); } @@ -170,7 +164,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { * Returns true if at least one field is edited. */ public boolean isAnyFieldEdited() { - return CollectionUtil.isAnyNonNull(name, phone, email, module, year, address, studentId, tags); + return CollectionUtil.isAnyNonNull(name, phone, email, module, year, studentId, tags); } public void setName(Name name) { @@ -221,14 +215,6 @@ public Optional getStudentId() { return Optional.ofNullable(studentId); } - public void setAddress(Address address) { - this.address = address; - } - - public Optional

-A quick look at the `seedu.address.logic.Logic` (an extract given below) confirms that this indeed might be what we’re looking for. +A quick look at the `tuthub.logic.Logic` (an extract given below) confirms that this indeed might be what we’re looking for. ```java public interface Logic { diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java deleted file mode 100644 index 1a943a0781a..00000000000 --- a/src/main/java/seedu/address/model/AddressBook.java +++ /dev/null @@ -1,120 +0,0 @@ -package seedu.address.model; - -import static java.util.Objects.requireNonNull; - -import java.util.List; - -import javafx.collections.ObservableList; -import seedu.address.model.person.Person; -import seedu.address.model.person.UniquePersonList; - -/** - * Wraps all data at the address-book level - * Duplicates are not allowed (by .isSamePerson comparison) - */ -public class AddressBook implements ReadOnlyAddressBook { - - private final UniquePersonList persons; - - /* - * The 'unusual' code block below is a non-static initialization block, sometimes used to avoid duplication - * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html - * - * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication - * among constructors. - */ - { - persons = new UniquePersonList(); - } - - public AddressBook() {} - - /** - * Creates an AddressBook using the Persons in the {@code toBeCopied} - */ - public AddressBook(ReadOnlyAddressBook toBeCopied) { - this(); - resetData(toBeCopied); - } - - //// list overwrite operations - - /** - * Replaces the contents of the person list with {@code persons}. - * {@code persons} must not contain duplicate persons. - */ - public void setPersons(List persons) { - this.persons.setPersons(persons); - } - - /** - * Resets the existing data of this {@code AddressBook} with {@code newData}. - */ - public void resetData(ReadOnlyAddressBook newData) { - requireNonNull(newData); - - setPersons(newData.getPersonList()); - } - - //// person-level operations - - /** - * Returns true if a person with the same identity as {@code person} exists in the address book. - */ - public boolean hasPerson(Person person) { - requireNonNull(person); - return persons.contains(person); - } - - /** - * Adds a person to the address book. - * The person must not already exist in the address book. - */ - public void addPerson(Person p) { - persons.add(p); - } - - /** - * Replaces the given person {@code target} in the list with {@code editedPerson}. - * {@code target} must exist in the address book. - * The person identity of {@code editedPerson} must not be the same as another existing person in the address book. - */ - public void setPerson(Person target, Person editedPerson) { - requireNonNull(editedPerson); - - persons.setPerson(target, editedPerson); - } - - /** - * Removes {@code key} from this {@code AddressBook}. - * {@code key} must exist in the address book. - */ - public void removePerson(Person key) { - persons.remove(key); - } - - //// util methods - - @Override - public String toString() { - return persons.asUnmodifiableObservableList().size() + " persons"; - // TODO: refine later - } - - @Override - public ObservableList getPersonList() { - return persons.asUnmodifiableObservableList(); - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof AddressBook // instanceof handles nulls - && persons.equals(((AddressBook) other).persons)); - } - - @Override - public int hashCode() { - return persons.hashCode(); - } -} diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java deleted file mode 100644 index d54df471c1f..00000000000 --- a/src/main/java/seedu/address/model/Model.java +++ /dev/null @@ -1,87 +0,0 @@ -package seedu.address.model; - -import java.nio.file.Path; -import java.util.function.Predicate; - -import javafx.collections.ObservableList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.model.person.Person; - -/** - * The API of the Model component. - */ -public interface Model { - /** {@code Predicate} that always evaluate to true */ - Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; - - /** - * Replaces user prefs data with the data in {@code userPrefs}. - */ - void setUserPrefs(ReadOnlyUserPrefs userPrefs); - - /** - * Returns the user prefs. - */ - ReadOnlyUserPrefs getUserPrefs(); - - /** - * Returns the user prefs' GUI settings. - */ - GuiSettings getGuiSettings(); - - /** - * Sets the user prefs' GUI settings. - */ - void setGuiSettings(GuiSettings guiSettings); - - /** - * Returns the user prefs' address book file path. - */ - Path getAddressBookFilePath(); - - /** - * Sets the user prefs' address book file path. - */ - void setAddressBookFilePath(Path addressBookFilePath); - - /** - * Replaces address book data with the data in {@code addressBook}. - */ - void setAddressBook(ReadOnlyAddressBook addressBook); - - /** Returns the AddressBook */ - ReadOnlyAddressBook getAddressBook(); - - /** - * Returns true if a person with the same identity as {@code person} exists in the address book. - */ - boolean hasPerson(Person person); - - /** - * Deletes the given person. - * The person must exist in the address book. - */ - void deletePerson(Person target); - - /** - * Adds the given person. - * {@code person} must not already exist in the address book. - */ - void addPerson(Person person); - - /** - * Replaces the given person {@code target} with {@code editedPerson}. - * {@code target} must exist in the address book. - * The person identity of {@code editedPerson} must not be the same as another existing person in the address book. - */ - void setPerson(Person target, Person editedPerson); - - /** Returns an unmodifiable view of the filtered person list */ - ObservableList getFilteredPersonList(); - - /** - * Updates the filter of the filtered person list to filter by the given {@code predicate}. - * @throws NullPointerException if {@code predicate} is null. - */ - void updateFilteredPersonList(Predicate predicate); -} diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java deleted file mode 100644 index 86c1df298d7..00000000000 --- a/src/main/java/seedu/address/model/ModelManager.java +++ /dev/null @@ -1,150 +0,0 @@ -package seedu.address.model; - -import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; - -import java.nio.file.Path; -import java.util.function.Predicate; -import java.util.logging.Logger; - -import javafx.collections.ObservableList; -import javafx.collections.transformation.FilteredList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.commons.core.LogsCenter; -import seedu.address.model.person.Person; - -/** - * Represents the in-memory model of the address book data. - */ -public class ModelManager implements Model { - private static final Logger logger = LogsCenter.getLogger(ModelManager.class); - - private final AddressBook addressBook; - private final UserPrefs userPrefs; - private final FilteredList filteredPersons; - - /** - * Initializes a ModelManager with the given addressBook and userPrefs. - */ - public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) { - requireAllNonNull(addressBook, userPrefs); - - logger.fine("Initializing with address book: " + addressBook + " and user prefs " + userPrefs); - - this.addressBook = new AddressBook(addressBook); - this.userPrefs = new UserPrefs(userPrefs); - filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); - } - - public ModelManager() { - this(new AddressBook(), new UserPrefs()); - } - - //=========== UserPrefs ================================================================================== - - @Override - public void setUserPrefs(ReadOnlyUserPrefs userPrefs) { - requireNonNull(userPrefs); - this.userPrefs.resetData(userPrefs); - } - - @Override - public ReadOnlyUserPrefs getUserPrefs() { - return userPrefs; - } - - @Override - public GuiSettings getGuiSettings() { - return userPrefs.getGuiSettings(); - } - - @Override - public void setGuiSettings(GuiSettings guiSettings) { - requireNonNull(guiSettings); - userPrefs.setGuiSettings(guiSettings); - } - - @Override - public Path getAddressBookFilePath() { - return userPrefs.getAddressBookFilePath(); - } - - @Override - public void setAddressBookFilePath(Path addressBookFilePath) { - requireNonNull(addressBookFilePath); - userPrefs.setAddressBookFilePath(addressBookFilePath); - } - - //=========== AddressBook ================================================================================ - - @Override - public void setAddressBook(ReadOnlyAddressBook addressBook) { - this.addressBook.resetData(addressBook); - } - - @Override - public ReadOnlyAddressBook getAddressBook() { - return addressBook; - } - - @Override - public boolean hasPerson(Person person) { - requireNonNull(person); - return addressBook.hasPerson(person); - } - - @Override - public void deletePerson(Person target) { - addressBook.removePerson(target); - } - - @Override - public void addPerson(Person person) { - addressBook.addPerson(person); - updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); - } - - @Override - public void setPerson(Person target, Person editedPerson) { - requireAllNonNull(target, editedPerson); - - addressBook.setPerson(target, editedPerson); - } - - //=========== Filtered Person List Accessors ============================================================= - - /** - * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of - * {@code versionedAddressBook} - */ - @Override - public ObservableList getFilteredPersonList() { - return filteredPersons; - } - - @Override - public void updateFilteredPersonList(Predicate predicate) { - requireNonNull(predicate); - filteredPersons.setPredicate(predicate); - } - - @Override - public boolean equals(Object obj) { - // short circuit if same object - if (obj == this) { - return true; - } - - // instanceof handles nulls - if (!(obj instanceof ModelManager)) { - return false; - } - - // state check - ModelManager other = (ModelManager) obj; - return addressBook.equals(other.addressBook) - && userPrefs.equals(other.userPrefs) - && filteredPersons.equals(other.filteredPersons); - } - -} diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java deleted file mode 100644 index 6ddc2cd9a29..00000000000 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ /dev/null @@ -1,17 +0,0 @@ -package seedu.address.model; - -import javafx.collections.ObservableList; -import seedu.address.model.person.Person; - -/** - * Unmodifiable view of an address book - */ -public interface ReadOnlyAddressBook { - - /** - * Returns an unmodifiable view of the persons list. - * This list will not contain any duplicate persons. - */ - ObservableList getPersonList(); - -} diff --git a/src/main/java/seedu/address/model/person/UniquePersonList.java b/src/main/java/seedu/address/model/person/UniquePersonList.java deleted file mode 100644 index 0fee4fe57e6..00000000000 --- a/src/main/java/seedu/address/model/person/UniquePersonList.java +++ /dev/null @@ -1,137 +0,0 @@ -package seedu.address.model.person; - -import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; - -import java.util.Iterator; -import java.util.List; - -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import seedu.address.model.person.exceptions.DuplicatePersonException; -import seedu.address.model.person.exceptions.PersonNotFoundException; - -/** - * A list of persons that enforces uniqueness between its elements and does not allow nulls. - * A person is considered unique by comparing using {@code Person#isSamePerson(Person)}. As such, adding and updating of - * persons uses Person#isSamePerson(Person) for equality so as to ensure that the person being added or updated is - * unique in terms of identity in the UniquePersonList. However, the removal of a person uses Person#equals(Object) so - * as to ensure that the person with exactly the same fields will be removed. - * - * Supports a minimal set of list operations. - * - * @see Person#isSamePerson(Person) - */ -public class UniquePersonList implements Iterable { - - private final ObservableList internalList = FXCollections.observableArrayList(); - private final ObservableList internalUnmodifiableList = - FXCollections.unmodifiableObservableList(internalList); - - /** - * Returns true if the list contains an equivalent person as the given argument. - */ - public boolean contains(Person toCheck) { - requireNonNull(toCheck); - return internalList.stream().anyMatch(toCheck::isSamePerson); - } - - /** - * Adds a person to the list. - * The person must not already exist in the list. - */ - public void add(Person toAdd) { - requireNonNull(toAdd); - if (contains(toAdd)) { - throw new DuplicatePersonException(); - } - internalList.add(toAdd); - } - - /** - * Replaces the person {@code target} in the list with {@code editedPerson}. - * {@code target} must exist in the list. - * The person identity of {@code editedPerson} must not be the same as another existing person in the list. - */ - public void setPerson(Person target, Person editedPerson) { - requireAllNonNull(target, editedPerson); - - int index = internalList.indexOf(target); - if (index == -1) { - throw new PersonNotFoundException(); - } - - if (!target.isSamePerson(editedPerson) && contains(editedPerson)) { - throw new DuplicatePersonException(); - } - - internalList.set(index, editedPerson); - } - - /** - * Removes the equivalent person from the list. - * The person must exist in the list. - */ - public void remove(Person toRemove) { - requireNonNull(toRemove); - if (!internalList.remove(toRemove)) { - throw new PersonNotFoundException(); - } - } - - public void setPersons(UniquePersonList replacement) { - requireNonNull(replacement); - internalList.setAll(replacement.internalList); - } - - /** - * Replaces the contents of this list with {@code persons}. - * {@code persons} must not contain duplicate persons. - */ - public void setPersons(List persons) { - requireAllNonNull(persons); - if (!personsAreUnique(persons)) { - throw new DuplicatePersonException(); - } - - internalList.setAll(persons); - } - - /** - * Returns the backing list as an unmodifiable {@code ObservableList}. - */ - public ObservableList asUnmodifiableObservableList() { - return internalUnmodifiableList; - } - - @Override - public Iterator iterator() { - return internalList.iterator(); - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof UniquePersonList // instanceof handles nulls - && internalList.equals(((UniquePersonList) other).internalList)); - } - - @Override - public int hashCode() { - return internalList.hashCode(); - } - - /** - * Returns true if {@code persons} contains only unique persons. - */ - private boolean personsAreUnique(List persons) { - for (int i = 0; i < persons.size() - 1; i++) { - for (int j = i + 1; j < persons.size(); j++) { - if (persons.get(i).isSamePerson(persons.get(j))) { - return false; - } - } - } - return true; - } -} diff --git a/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java b/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java deleted file mode 100644 index d7290f59442..00000000000 --- a/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.address.model.person.exceptions; - -/** - * Signals that the operation will result in duplicate Persons (Persons are considered duplicates if they have the same - * identity). - */ -public class DuplicatePersonException extends RuntimeException { - public DuplicatePersonException() { - super("Operation would result in duplicate persons"); - } -} diff --git a/src/main/java/seedu/address/model/person/exceptions/PersonNotFoundException.java b/src/main/java/seedu/address/model/person/exceptions/PersonNotFoundException.java deleted file mode 100644 index fa764426ca7..00000000000 --- a/src/main/java/seedu/address/model/person/exceptions/PersonNotFoundException.java +++ /dev/null @@ -1,6 +0,0 @@ -package seedu.address.model.person.exceptions; - -/** - * Signals that the operation is unable to find the specified person. - */ -public class PersonNotFoundException extends RuntimeException {} diff --git a/src/main/java/seedu/address/storage/AddressBookStorage.java b/src/main/java/seedu/address/storage/AddressBookStorage.java deleted file mode 100644 index 4599182b3f9..00000000000 --- a/src/main/java/seedu/address/storage/AddressBookStorage.java +++ /dev/null @@ -1,45 +0,0 @@ -package seedu.address.storage; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.Optional; - -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.ReadOnlyAddressBook; - -/** - * Represents a storage for {@link seedu.address.model.AddressBook}. - */ -public interface AddressBookStorage { - - /** - * Returns the file path of the data file. - */ - Path getAddressBookFilePath(); - - /** - * Returns AddressBook data as a {@link ReadOnlyAddressBook}. - * Returns {@code Optional.empty()} if storage file is not found. - * @throws DataConversionException if the data in storage is not in the expected format. - * @throws IOException if there was any problem when reading from the storage. - */ - Optional readAddressBook() throws DataConversionException, IOException; - - /** - * @see #getAddressBookFilePath() - */ - Optional readAddressBook(Path filePath) throws DataConversionException, IOException; - - /** - * Saves the given {@link ReadOnlyAddressBook} to the storage. - * @param addressBook cannot be null. - * @throws IOException if there was any problem writing to the file. - */ - void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException; - - /** - * @see #saveAddressBook(ReadOnlyAddressBook) - */ - void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) throws IOException; - -} diff --git a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java b/src/main/java/seedu/address/storage/JsonAddressBookStorage.java deleted file mode 100644 index dfab9daaa0d..00000000000 --- a/src/main/java/seedu/address/storage/JsonAddressBookStorage.java +++ /dev/null @@ -1,80 +0,0 @@ -package seedu.address.storage; - -import static java.util.Objects.requireNonNull; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.Optional; -import java.util.logging.Logger; - -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.commons.util.FileUtil; -import seedu.address.commons.util.JsonUtil; -import seedu.address.model.ReadOnlyAddressBook; - -/** - * A class to access AddressBook data stored as a json file on the hard disk. - */ -public class JsonAddressBookStorage implements AddressBookStorage { - - private static final Logger logger = LogsCenter.getLogger(JsonAddressBookStorage.class); - - private Path filePath; - - public JsonAddressBookStorage(Path filePath) { - this.filePath = filePath; - } - - public Path getAddressBookFilePath() { - return filePath; - } - - @Override - public Optional readAddressBook() throws DataConversionException { - return readAddressBook(filePath); - } - - /** - * Similar to {@link #readAddressBook()}. - * - * @param filePath location of the data. Cannot be null. - * @throws DataConversionException if the file is not in the correct format. - */ - public Optional readAddressBook(Path filePath) throws DataConversionException { - requireNonNull(filePath); - - Optional jsonAddressBook = JsonUtil.readJsonFile( - filePath, JsonSerializableAddressBook.class); - if (!jsonAddressBook.isPresent()) { - return Optional.empty(); - } - - try { - return Optional.of(jsonAddressBook.get().toModelType()); - } catch (IllegalValueException ive) { - logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); - throw new DataConversionException(ive); - } - } - - @Override - public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - saveAddressBook(addressBook, filePath); - } - - /** - * Similar to {@link #saveAddressBook(ReadOnlyAddressBook)}. - * - * @param filePath location of the data. Cannot be null. - */ - public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) throws IOException { - requireNonNull(addressBook); - requireNonNull(filePath); - - FileUtil.createIfMissing(filePath); - JsonUtil.saveJsonFile(new JsonSerializableAddressBook(addressBook), filePath); - } - -} diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java deleted file mode 100644 index 5efd834091d..00000000000 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ /dev/null @@ -1,60 +0,0 @@ -package seedu.address.storage; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonRootName; - -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.AddressBook; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Person; - -/** - * An Immutable AddressBook that is serializable to JSON format. - */ -@JsonRootName(value = "addressbook") -class JsonSerializableAddressBook { - - public static final String MESSAGE_DUPLICATE_PERSON = "Persons list contains duplicate person(s)."; - - private final List persons = new ArrayList<>(); - - /** - * Constructs a {@code JsonSerializableAddressBook} with the given persons. - */ - @JsonCreator - public JsonSerializableAddressBook(@JsonProperty("persons") List persons) { - this.persons.addAll(persons); - } - - /** - * Converts a given {@code ReadOnlyAddressBook} into this class for Jackson use. - * - * @param source future changes to this will not affect the created {@code JsonSerializableAddressBook}. - */ - public JsonSerializableAddressBook(ReadOnlyAddressBook source) { - persons.addAll(source.getPersonList().stream().map(JsonAdaptedPerson::new).collect(Collectors.toList())); - } - - /** - * Converts this address book into the model's {@code AddressBook} object. - * - * @throws IllegalValueException if there were any data constraints violated. - */ - public AddressBook toModelType() throws IllegalValueException { - AddressBook addressBook = new AddressBook(); - for (JsonAdaptedPerson jsonAdaptedPerson : persons) { - Person person = jsonAdaptedPerson.toModelType(); - if (addressBook.hasPerson(person)) { - throw new IllegalValueException(MESSAGE_DUPLICATE_PERSON); - } - addressBook.addPerson(person); - } - return addressBook; - } - -} diff --git a/src/main/java/seedu/address/storage/Storage.java b/src/main/java/seedu/address/storage/Storage.java deleted file mode 100644 index beda8bd9f11..00000000000 --- a/src/main/java/seedu/address/storage/Storage.java +++ /dev/null @@ -1,32 +0,0 @@ -package seedu.address.storage; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.Optional; - -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.UserPrefs; - -/** - * API of the Storage component - */ -public interface Storage extends AddressBookStorage, UserPrefsStorage { - - @Override - Optional readUserPrefs() throws DataConversionException, IOException; - - @Override - void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException; - - @Override - Path getAddressBookFilePath(); - - @Override - Optional readAddressBook() throws DataConversionException, IOException; - - @Override - void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException; - -} diff --git a/src/main/java/seedu/address/storage/StorageManager.java b/src/main/java/seedu/address/storage/StorageManager.java deleted file mode 100644 index 6cfa0162164..00000000000 --- a/src/main/java/seedu/address/storage/StorageManager.java +++ /dev/null @@ -1,78 +0,0 @@ -package seedu.address.storage; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.Optional; -import java.util.logging.Logger; - -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.UserPrefs; - -/** - * Manages storage of AddressBook data in local storage. - */ -public class StorageManager implements Storage { - - private static final Logger logger = LogsCenter.getLogger(StorageManager.class); - private AddressBookStorage addressBookStorage; - private UserPrefsStorage userPrefsStorage; - - /** - * Creates a {@code StorageManager} with the given {@code AddressBookStorage} and {@code UserPrefStorage}. - */ - public StorageManager(AddressBookStorage addressBookStorage, UserPrefsStorage userPrefsStorage) { - this.addressBookStorage = addressBookStorage; - this.userPrefsStorage = userPrefsStorage; - } - - // ================ UserPrefs methods ============================== - - @Override - public Path getUserPrefsFilePath() { - return userPrefsStorage.getUserPrefsFilePath(); - } - - @Override - public Optional readUserPrefs() throws DataConversionException, IOException { - return userPrefsStorage.readUserPrefs(); - } - - @Override - public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { - userPrefsStorage.saveUserPrefs(userPrefs); - } - - - // ================ AddressBook methods ============================== - - @Override - public Path getAddressBookFilePath() { - return addressBookStorage.getAddressBookFilePath(); - } - - @Override - public Optional readAddressBook() throws DataConversionException, IOException { - return readAddressBook(addressBookStorage.getAddressBookFilePath()); - } - - @Override - public Optional readAddressBook(Path filePath) throws DataConversionException, IOException { - logger.fine("Attempting to read data from file: " + filePath); - return addressBookStorage.readAddressBook(filePath); - } - - @Override - public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - saveAddressBook(addressBook, addressBookStorage.getAddressBookFilePath()); - } - - @Override - public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath) throws IOException { - logger.fine("Attempting to write to data file: " + filePath); - addressBookStorage.saveAddressBook(addressBook, filePath); - } - -} diff --git a/src/main/java/seedu/address/ui/PersonListPanel.java b/src/main/java/seedu/address/ui/PersonListPanel.java deleted file mode 100644 index f4c501a897b..00000000000 --- a/src/main/java/seedu/address/ui/PersonListPanel.java +++ /dev/null @@ -1,49 +0,0 @@ -package seedu.address.ui; - -import java.util.logging.Logger; - -import javafx.collections.ObservableList; -import javafx.fxml.FXML; -import javafx.scene.control.ListCell; -import javafx.scene.control.ListView; -import javafx.scene.layout.Region; -import seedu.address.commons.core.LogsCenter; -import seedu.address.model.person.Person; - -/** - * Panel containing the list of persons. - */ -public class PersonListPanel extends UiPart { - private static final String FXML = "PersonListPanel.fxml"; - private final Logger logger = LogsCenter.getLogger(PersonListPanel.class); - - @FXML - private ListView personListView; - - /** - * Creates a {@code PersonListPanel} with the given {@code ObservableList}. - */ - public PersonListPanel(ObservableList personList) { - super(FXML); - personListView.setItems(personList); - personListView.setCellFactory(listView -> new PersonListViewCell()); - } - - /** - * Custom {@code ListCell} that displays the graphics of a {@code Person} using a {@code PersonCard}. - */ - class PersonListViewCell extends ListCell { - @Override - protected void updateItem(Person person, boolean empty) { - super.updateItem(person, empty); - - if (empty || person == null) { - setGraphic(null); - setText(null); - } else { - setGraphic(new PersonCard(person, getIndex() + 1).getRoot()); - } - } - } - -} diff --git a/src/main/java/seedu/address/AppParameters.java b/src/main/java/tuthub/AppParameters.java similarity index 93% rename from src/main/java/seedu/address/AppParameters.java rename to src/main/java/tuthub/AppParameters.java index ab552c398f3..0e8d6e7d487 100644 --- a/src/main/java/seedu/address/AppParameters.java +++ b/src/main/java/tuthub/AppParameters.java @@ -1,4 +1,4 @@ -package seedu.address; +package tuthub; import java.nio.file.Path; import java.nio.file.Paths; @@ -7,8 +7,8 @@ import java.util.logging.Logger; import javafx.application.Application; -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.util.FileUtil; +import tuthub.commons.core.LogsCenter; +import tuthub.commons.util.FileUtil; /** * Represents the parsed command-line parameters given to the application. diff --git a/src/main/java/seedu/address/Main.java b/src/main/java/tuthub/Main.java similarity index 97% rename from src/main/java/seedu/address/Main.java rename to src/main/java/tuthub/Main.java index 052a5068631..ddd5f305aa9 100644 --- a/src/main/java/seedu/address/Main.java +++ b/src/main/java/tuthub/Main.java @@ -1,4 +1,4 @@ -package seedu.address; +package tuthub; import javafx.application.Application; diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/tuthub/MainApp.java similarity index 72% rename from src/main/java/seedu/address/MainApp.java rename to src/main/java/tuthub/MainApp.java index 4133aaa0151..916b2e4a0f9 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/tuthub/MainApp.java @@ -1,4 +1,4 @@ -package seedu.address; +package tuthub; import java.io.IOException; import java.nio.file.Path; @@ -7,29 +7,29 @@ import javafx.application.Application; import javafx.stage.Stage; -import seedu.address.commons.core.Config; -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.core.Version; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.commons.util.ConfigUtil; -import seedu.address.commons.util.StringUtil; -import seedu.address.logic.Logic; -import seedu.address.logic.LogicManager; -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.UserPrefs; -import seedu.address.model.util.SampleDataUtil; -import seedu.address.storage.AddressBookStorage; -import seedu.address.storage.JsonAddressBookStorage; -import seedu.address.storage.JsonUserPrefsStorage; -import seedu.address.storage.Storage; -import seedu.address.storage.StorageManager; -import seedu.address.storage.UserPrefsStorage; -import seedu.address.ui.Ui; -import seedu.address.ui.UiManager; +import tuthub.commons.core.Config; +import tuthub.commons.core.LogsCenter; +import tuthub.commons.core.Version; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.commons.util.ConfigUtil; +import tuthub.commons.util.StringUtil; +import tuthub.logic.Logic; +import tuthub.logic.LogicManager; +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.UserPrefs; +import tuthub.model.util.SampleDataUtil; +import tuthub.storage.TuthubStorage; +import tuthub.storage.JsonTuthubStorage; +import tuthub.storage.JsonUserPrefsStorage; +import tuthub.storage.Storage; +import tuthub.storage.StorageManager; +import tuthub.storage.UserPrefsStorage; +import tuthub.ui.Ui; +import tuthub.ui.UiManager; /** * Runs the application. @@ -48,7 +48,7 @@ public class MainApp extends Application { @Override public void init() throws Exception { - logger.info("=============================[ Initializing AddressBook ]==========================="); + logger.info("=============================[ Initializing Tuthub ]==========================="); super.init(); AppParameters appParameters = AppParameters.parse(getParameters()); @@ -56,8 +56,8 @@ public void init() throws Exception { UserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(config.getUserPrefsFilePath()); UserPrefs userPrefs = initPrefs(userPrefsStorage); - AddressBookStorage addressBookStorage = new JsonAddressBookStorage(userPrefs.getAddressBookFilePath()); - storage = new StorageManager(addressBookStorage, userPrefsStorage); + TuthubStorage tuthubStorage = new JsonTuthubStorage(userPrefs.getTuthubFilePath()); + storage = new StorageManager(tuthubStorage, userPrefsStorage); initLogging(config); @@ -74,20 +74,20 @@ public void init() throws Exception { * or an empty address book will be used instead if errors occur when reading {@code storage}'s address book. */ private Model initModelManager(Storage storage, ReadOnlyUserPrefs userPrefs) { - Optional addressBookOptional; - ReadOnlyAddressBook initialData; + Optional tuthubOptional; + ReadOnlyTuthub initialData; try { - addressBookOptional = storage.readAddressBook(); - if (!addressBookOptional.isPresent()) { - logger.info("Data file not found. Will be starting with a sample AddressBook"); + tuthubOptional = storage.readTuthub(); + if (!tuthubOptional.isPresent()) { + logger.info("Data file not found. Will be starting with a sample Tuthub"); } - initialData = addressBookOptional.orElseGet(SampleDataUtil::getSampleAddressBook); + initialData = tuthubOptional.orElseGet(SampleDataUtil::getSampleTuthub); } catch (DataConversionException e) { - logger.warning("Data file not in the correct format. Will be starting with an empty AddressBook"); - initialData = new AddressBook(); + logger.warning("Data file not in the correct format. Will be starting with an empty Tuthub"); + initialData = new Tuthub(); } catch (IOException e) { - logger.warning("Problem while reading from the file. Will be starting with an empty AddressBook"); - initialData = new AddressBook(); + logger.warning("Problem while reading from the file. Will be starting with an empty Tuthub"); + initialData = new Tuthub(); } return new ModelManager(initialData, userPrefs); @@ -151,7 +151,7 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { + "Using default user prefs"); initializedPrefs = new UserPrefs(); } catch (IOException e) { - logger.warning("Problem while reading from the file. Will be starting with an empty AddressBook"); + logger.warning("Problem while reading from the file. Will be starting with an empty Tuthub"); initializedPrefs = new UserPrefs(); } @@ -167,13 +167,13 @@ protected UserPrefs initPrefs(UserPrefsStorage storage) { @Override public void start(Stage primaryStage) { - logger.info("Starting AddressBook " + MainApp.VERSION); + logger.info("Starting Tuthub " + MainApp.VERSION); ui.start(primaryStage); } @Override public void stop() { - logger.info("============================ [ Stopping Address Book ] ============================="); + logger.info("============================ [ Stopping Tuthub ] ============================="); try { storage.saveUserPrefs(model.getUserPrefs()); } catch (IOException e) { diff --git a/src/main/java/seedu/address/commons/core/Config.java b/src/main/java/tuthub/commons/core/Config.java similarity index 97% rename from src/main/java/seedu/address/commons/core/Config.java rename to src/main/java/tuthub/commons/core/Config.java index 91145745521..7ee3526edfd 100644 --- a/src/main/java/seedu/address/commons/core/Config.java +++ b/src/main/java/tuthub/commons/core/Config.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/src/main/java/seedu/address/commons/core/GuiSettings.java b/src/main/java/tuthub/commons/core/GuiSettings.java similarity index 98% rename from src/main/java/seedu/address/commons/core/GuiSettings.java rename to src/main/java/tuthub/commons/core/GuiSettings.java index ba33653be67..f4bc5997088 100644 --- a/src/main/java/seedu/address/commons/core/GuiSettings.java +++ b/src/main/java/tuthub/commons/core/GuiSettings.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import java.awt.Point; import java.io.Serializable; diff --git a/src/main/java/seedu/address/commons/core/LogsCenter.java b/src/main/java/tuthub/commons/core/LogsCenter.java similarity index 99% rename from src/main/java/seedu/address/commons/core/LogsCenter.java rename to src/main/java/tuthub/commons/core/LogsCenter.java index 431e7185e76..18387c3e84a 100644 --- a/src/main/java/seedu/address/commons/core/LogsCenter.java +++ b/src/main/java/tuthub/commons/core/LogsCenter.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import java.io.IOException; import java.util.Arrays; diff --git a/src/main/java/seedu/address/commons/core/Messages.java b/src/main/java/tuthub/commons/core/Messages.java similarity index 51% rename from src/main/java/seedu/address/commons/core/Messages.java rename to src/main/java/tuthub/commons/core/Messages.java index 1deb3a1e469..92c242a1ae2 100644 --- a/src/main/java/seedu/address/commons/core/Messages.java +++ b/src/main/java/tuthub/commons/core/Messages.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; /** * Container for user visible messages. @@ -7,7 +7,7 @@ public class Messages { public static final String MESSAGE_UNKNOWN_COMMAND = "Unknown command"; public static final String MESSAGE_INVALID_COMMAND_FORMAT = "Invalid command format! \n%1$s"; - public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX = "The person index provided is invalid"; - public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!"; + public static final String MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX = "The tutor index provided is invalid"; + public static final String MESSAGE_TUTORS_LISTED_OVERVIEW = "%1$d tutors listed!"; } diff --git a/src/main/java/seedu/address/commons/core/Version.java b/src/main/java/tuthub/commons/core/Version.java similarity index 98% rename from src/main/java/seedu/address/commons/core/Version.java rename to src/main/java/tuthub/commons/core/Version.java index 12142ec1e32..dc4ee4841f0 100644 --- a/src/main/java/seedu/address/commons/core/Version.java +++ b/src/main/java/tuthub/commons/core/Version.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/seedu/address/commons/core/index/Index.java b/src/main/java/tuthub/commons/core/index/Index.java similarity index 97% rename from src/main/java/seedu/address/commons/core/index/Index.java rename to src/main/java/tuthub/commons/core/index/Index.java index 19536439c09..0226eea2dd2 100644 --- a/src/main/java/seedu/address/commons/core/index/Index.java +++ b/src/main/java/tuthub/commons/core/index/Index.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core.index; +package tuthub.commons.core.index; /** * Represents a zero-based or one-based index. diff --git a/src/main/java/seedu/address/commons/exceptions/DataConversionException.java b/src/main/java/tuthub/commons/exceptions/DataConversionException.java similarity index 84% rename from src/main/java/seedu/address/commons/exceptions/DataConversionException.java rename to src/main/java/tuthub/commons/exceptions/DataConversionException.java index 1f689bd8e3f..b8b4648d440 100644 --- a/src/main/java/seedu/address/commons/exceptions/DataConversionException.java +++ b/src/main/java/tuthub/commons/exceptions/DataConversionException.java @@ -1,4 +1,4 @@ -package seedu.address.commons.exceptions; +package tuthub.commons.exceptions; /** * Represents an error during conversion of data from one format to another diff --git a/src/main/java/seedu/address/commons/exceptions/IllegalValueException.java b/src/main/java/tuthub/commons/exceptions/IllegalValueException.java similarity index 93% rename from src/main/java/seedu/address/commons/exceptions/IllegalValueException.java rename to src/main/java/tuthub/commons/exceptions/IllegalValueException.java index 19124db485c..c490f7f1bcc 100644 --- a/src/main/java/seedu/address/commons/exceptions/IllegalValueException.java +++ b/src/main/java/tuthub/commons/exceptions/IllegalValueException.java @@ -1,4 +1,4 @@ -package seedu.address.commons.exceptions; +package tuthub.commons.exceptions; /** * Signals that some given data does not fulfill some constraints. diff --git a/src/main/java/seedu/address/commons/util/AppUtil.java b/src/main/java/tuthub/commons/util/AppUtil.java similarity index 94% rename from src/main/java/seedu/address/commons/util/AppUtil.java rename to src/main/java/tuthub/commons/util/AppUtil.java index 87aa89c0326..51670e12694 100644 --- a/src/main/java/seedu/address/commons/util/AppUtil.java +++ b/src/main/java/tuthub/commons/util/AppUtil.java @@ -1,9 +1,9 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static java.util.Objects.requireNonNull; import javafx.scene.image.Image; -import seedu.address.MainApp; +import tuthub.MainApp; /** * A container for App specific utility functions diff --git a/src/main/java/seedu/address/commons/util/CollectionUtil.java b/src/main/java/tuthub/commons/util/CollectionUtil.java similarity index 96% rename from src/main/java/seedu/address/commons/util/CollectionUtil.java rename to src/main/java/tuthub/commons/util/CollectionUtil.java index eafe4dfd681..147fc013cdb 100644 --- a/src/main/java/seedu/address/commons/util/CollectionUtil.java +++ b/src/main/java/tuthub/commons/util/CollectionUtil.java @@ -1,4 +1,4 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static java.util.Objects.requireNonNull; diff --git a/src/main/java/seedu/address/commons/util/ConfigUtil.java b/src/main/java/tuthub/commons/util/ConfigUtil.java similarity index 77% rename from src/main/java/seedu/address/commons/util/ConfigUtil.java rename to src/main/java/tuthub/commons/util/ConfigUtil.java index f7f8a2bd44c..e2dbe1ccb25 100644 --- a/src/main/java/seedu/address/commons/util/ConfigUtil.java +++ b/src/main/java/tuthub/commons/util/ConfigUtil.java @@ -1,11 +1,11 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; -import seedu.address.commons.core.Config; -import seedu.address.commons.exceptions.DataConversionException; +import tuthub.commons.core.Config; +import tuthub.commons.exceptions.DataConversionException; /** * A class for accessing the Config File. diff --git a/src/main/java/seedu/address/commons/util/FileUtil.java b/src/main/java/tuthub/commons/util/FileUtil.java similarity index 98% rename from src/main/java/seedu/address/commons/util/FileUtil.java rename to src/main/java/tuthub/commons/util/FileUtil.java index b1e2767cdd9..c77bed8e47a 100644 --- a/src/main/java/seedu/address/commons/util/FileUtil.java +++ b/src/main/java/tuthub/commons/util/FileUtil.java @@ -1,4 +1,4 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import java.io.IOException; import java.nio.file.Files; diff --git a/src/main/java/seedu/address/commons/util/JsonUtil.java b/src/main/java/tuthub/commons/util/JsonUtil.java similarity index 97% rename from src/main/java/seedu/address/commons/util/JsonUtil.java rename to src/main/java/tuthub/commons/util/JsonUtil.java index 8ef609f055d..6a11543d479 100644 --- a/src/main/java/seedu/address/commons/util/JsonUtil.java +++ b/src/main/java/tuthub/commons/util/JsonUtil.java @@ -1,4 +1,4 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static java.util.Objects.requireNonNull; @@ -20,8 +20,8 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.exceptions.DataConversionException; +import tuthub.commons.core.LogsCenter; +import tuthub.commons.exceptions.DataConversionException; /** * Converts a Java object instance to JSON and vice versa diff --git a/src/main/java/seedu/address/commons/util/StringUtil.java b/src/main/java/tuthub/commons/util/StringUtil.java similarity index 95% rename from src/main/java/seedu/address/commons/util/StringUtil.java rename to src/main/java/tuthub/commons/util/StringUtil.java index 61cc8c9a1cb..ab66d65c585 100644 --- a/src/main/java/seedu/address/commons/util/StringUtil.java +++ b/src/main/java/tuthub/commons/util/StringUtil.java @@ -1,7 +1,7 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/tuthub/logic/Logic.java similarity index 57% rename from src/main/java/seedu/address/logic/Logic.java rename to src/main/java/tuthub/logic/Logic.java index 92cd8fa605a..45dc15e842a 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/tuthub/logic/Logic.java @@ -1,14 +1,14 @@ -package seedu.address.logic; +package tuthub.logic; import java.nio.file.Path; import javafx.collections.ObservableList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Person; +import tuthub.commons.core.GuiSettings; +import tuthub.logic.commands.CommandResult; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.tutor.Tutor; /** * API of the Logic component @@ -24,19 +24,19 @@ public interface Logic { CommandResult execute(String commandText) throws CommandException, ParseException; /** - * Returns the AddressBook. + * Returns the Tuthub. * - * @see seedu.address.model.Model#getAddressBook() + * @see tuthub.model.Model#getTuthub() */ - ReadOnlyAddressBook getAddressBook(); + ReadOnlyTuthub getTuthub(); - /** Returns an unmodifiable view of the filtered list of persons */ - ObservableList getFilteredPersonList(); + /** Returns an unmodifiable view of the filtered list of tutors */ + ObservableList getFilteredTutorList(); /** * Returns the user prefs' address book file path. */ - Path getAddressBookFilePath(); + Path getTuthubFilePath(); /** * Returns the user prefs' GUI settings. diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/tuthub/logic/LogicManager.java similarity index 56% rename from src/main/java/seedu/address/logic/LogicManager.java rename to src/main/java/tuthub/logic/LogicManager.java index 9d9c6d15bdc..184b5d59546 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/tuthub/logic/LogicManager.java @@ -1,21 +1,21 @@ -package seedu.address.logic; +package tuthub.logic; import java.io.IOException; import java.nio.file.Path; import java.util.logging.Logger; import javafx.collections.ObservableList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.commons.core.LogsCenter; -import seedu.address.logic.commands.Command; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.AddressBookParser; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.Model; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Person; -import seedu.address.storage.Storage; +import tuthub.commons.core.GuiSettings; +import tuthub.commons.core.LogsCenter; +import tuthub.logic.commands.Command; +import tuthub.logic.commands.CommandResult; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.logic.parser.TuthubParser; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.Model; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.tutor.Tutor; +import tuthub.storage.Storage; /** * The main LogicManager of the app. @@ -26,7 +26,7 @@ public class LogicManager implements Logic { private final Model model; private final Storage storage; - private final AddressBookParser addressBookParser; + private final TuthubParser tuthubParser; /** * Constructs a {@code LogicManager} with the given {@code Model} and {@code Storage}. @@ -34,7 +34,7 @@ public class LogicManager implements Logic { public LogicManager(Model model, Storage storage) { this.model = model; this.storage = storage; - addressBookParser = new AddressBookParser(); + tuthubParser = new TuthubParser(); } @Override @@ -42,11 +42,11 @@ public CommandResult execute(String commandText) throws CommandException, ParseE logger.info("----------------[USER COMMAND][" + commandText + "]"); CommandResult commandResult; - Command command = addressBookParser.parseCommand(commandText); + Command command = tuthubParser.parseCommand(commandText); commandResult = command.execute(model); try { - storage.saveAddressBook(model.getAddressBook()); + storage.saveTuthub(model.getTuthub()); } catch (IOException ioe) { throw new CommandException(FILE_OPS_ERROR_MESSAGE + ioe, ioe); } @@ -55,18 +55,18 @@ public CommandResult execute(String commandText) throws CommandException, ParseE } @Override - public ReadOnlyAddressBook getAddressBook() { - return model.getAddressBook(); + public ReadOnlyTuthub getTuthub() { + return model.getTuthub(); } @Override - public ObservableList getFilteredPersonList() { - return model.getFilteredPersonList(); + public ObservableList getFilteredTutorList() { + return model.getFilteredTutorList(); } @Override - public Path getAddressBookFilePath() { - return model.getAddressBookFilePath(); + public Path getTuthubFilePath() { + return model.getTuthubFilePath(); } @Override diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/tuthub/logic/commands/AddCommand.java similarity index 53% rename from src/main/java/seedu/address/logic/commands/AddCommand.java rename to src/main/java/tuthub/logic/commands/AddCommand.java index ed0f8dd34e8..02576ce7a23 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/tuthub/logic/commands/AddCommand.java @@ -1,27 +1,27 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; -import seedu.address.model.person.Person; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Model; +import tuthub.model.tutor.Tutor; /** - * Adds a person to the address book. + * Adds a tutor to tuthub. */ public class AddCommand extends Command { public static final String COMMAND_WORD = "add"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a person to the address book. " + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a tutor to tuthub. " + "Parameters: " + PREFIX_NAME + "NAME " + PREFIX_PHONE + "PHONE " @@ -41,28 +41,28 @@ public class AddCommand extends Command { + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 " + PREFIX_TAG + "senior "; - public static final String MESSAGE_SUCCESS = "New person added: %1$s"; - public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book"; + public static final String MESSAGE_SUCCESS = "New tutor added: %1$s"; + public static final String MESSAGE_DUPLICATE_TUTOR = "This tutor already exists in tuthub"; - private final Person toAdd; + private final Tutor toAdd; /** - * Creates an AddCommand to add the specified {@code Person} + * Creates an AddCommand to add the specified {@code Tutor} */ - public AddCommand(Person person) { - requireNonNull(person); - toAdd = person; + public AddCommand(Tutor tutor) { + requireNonNull(tutor); + toAdd = tutor; } @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - if (model.hasPerson(toAdd)) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); + if (model.hasTutor(toAdd)) { + throw new CommandException(MESSAGE_DUPLICATE_TUTOR); } - model.addPerson(toAdd); + model.addTutor(toAdd); return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); } diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/tuthub/logic/commands/ClearCommand.java similarity index 53% rename from src/main/java/seedu/address/logic/commands/ClearCommand.java rename to src/main/java/tuthub/logic/commands/ClearCommand.java index 9c86b1fa6e4..efbb11ea794 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/tuthub/logic/commands/ClearCommand.java @@ -1,23 +1,23 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; -import seedu.address.model.AddressBook; -import seedu.address.model.Model; +import tuthub.model.Tuthub; +import tuthub.model.Model; /** - * Clears the address book. + * Clears tuthub. */ public class ClearCommand extends Command { public static final String COMMAND_WORD = "clear"; - public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; + public static final String MESSAGE_SUCCESS = "Tuthub has been cleared!"; @Override public CommandResult execute(Model model) { requireNonNull(model); - model.setAddressBook(new AddressBook()); + model.setTuthub(new Tuthub()); return new CommandResult(MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/Command.java b/src/main/java/tuthub/logic/commands/Command.java similarity index 78% rename from src/main/java/seedu/address/logic/commands/Command.java rename to src/main/java/tuthub/logic/commands/Command.java index 64f18992160..9a4b5d5f232 100644 --- a/src/main/java/seedu/address/logic/commands/Command.java +++ b/src/main/java/tuthub/logic/commands/Command.java @@ -1,7 +1,7 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Model; /** * Represents a command with hidden internal logic and the ability to be executed. diff --git a/src/main/java/seedu/address/logic/commands/CommandResult.java b/src/main/java/tuthub/logic/commands/CommandResult.java similarity index 97% rename from src/main/java/seedu/address/logic/commands/CommandResult.java rename to src/main/java/tuthub/logic/commands/CommandResult.java index 92f900b7916..3d84d50af9c 100644 --- a/src/main/java/seedu/address/logic/commands/CommandResult.java +++ b/src/main/java/tuthub/logic/commands/CommandResult.java @@ -1,4 +1,4 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; diff --git a/src/main/java/seedu/address/logic/commands/CommentCommand.java b/src/main/java/tuthub/logic/commands/CommentCommand.java similarity index 52% rename from src/main/java/seedu/address/logic/commands/CommentCommand.java rename to src/main/java/tuthub/logic/commands/CommentCommand.java index 608241a7d5f..9d21a7b0362 100644 --- a/src/main/java/seedu/address/logic/commands/CommentCommand.java +++ b/src/main/java/tuthub/logic/commands/CommentCommand.java @@ -1,35 +1,35 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; -import static seedu.address.logic.parser.CliSyntax.PREFIX_COMMENT; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static tuthub.commons.util.CollectionUtil.requireAllNonNull; +import static tuthub.logic.parser.CliSyntax.PREFIX_COMMENT; +import static tuthub.model.Model.PREDICATE_SHOW_ALL_TUTORS; import java.util.List; -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Person; +import tuthub.commons.core.Messages; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Model; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Tutor; /** - * Changes the comment of an existing person in the address book. + * Changes the comment of an existing tutor in tuthub. */ public class CommentCommand extends Command { public static final String COMMAND_WORD = "comment"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the comment of the person identified " - + "by the index number used in the last person listing. " + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the comment of the tutor identified " + + "by the index number used in the last tutor listing. " + "Existing comment will be overwritten by the input.\n" + "Parameters: INDEX (must be a positive integer) " + PREFIX_COMMENT + "[COMMENT]\n" + "Example: " + COMMAND_WORD + " 1 " + PREFIX_COMMENT + "Good class management"; - public static final String MESSAGE_ADD_COMMENT_SUCCESS = "Added comment to Person: %1$s"; - public static final String MESSAGE_DELETE_COMMENT_SUCCESS = "Removed comment from Person: %1$s"; + public static final String MESSAGE_ADD_COMMENT_SUCCESS = "Added comment to Tutor: %1$s"; + public static final String MESSAGE_DELETE_COMMENT_SUCCESS = "Removed comment from Tutor: %1$s"; public static final String MESSAGE_ARGUMENTS = "Index: %1$d, Comment: %2$s"; @@ -37,8 +37,8 @@ public class CommentCommand extends Command { private final Comment comment; /** - * @param index of the person in the filtered person list to edit the comment - * @param comment of the person to be updated to + * @param index of the tutor in the filtered tutor list to edit the comment + * @param comment of the tutor to be updated to */ public CommentCommand(Index index, Comment comment) { requireAllNonNull(index, comment); @@ -67,32 +67,32 @@ public boolean equals(Object other) { @Override public CommandResult execute(Model model) throws CommandException { - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredTutorList(); if (index.getZeroBased() >= lastShownList.size()) { - throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + throw new CommandException(Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } - Person personToEdit = lastShownList.get(index.getZeroBased()); - Person editedPerson = new Person( - personToEdit.getName(), personToEdit.getPhone(), personToEdit.getEmail(), - personToEdit.getModule(), personToEdit.getYear(), personToEdit.getStudentId(), - personToEdit.getAddress(), comment, personToEdit.getTags()); + Tutor tutorToEdit = lastShownList.get(index.getZeroBased()); + Tutor editedTutor = new Tutor( + tutorToEdit.getName(), tutorToEdit.getPhone(), tutorToEdit.getEmail(), + tutorToEdit.getModule(), tutorToEdit.getYear(), tutorToEdit.getStudentId(), + tutorToEdit.getAddress(), comment, tutorToEdit.getTags()); - model.setPerson(personToEdit, editedPerson); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.setTutor(tutorToEdit, editedTutor); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); - return new CommandResult(generateSuccessMessage(editedPerson)); + return new CommandResult(generateSuccessMessage(editedTutor)); } /** * Generates a command execution success message based on whether * the comment is added to or removed from - * {@code personToEdit}. + * {@code tutorToEdit}. */ - private String generateSuccessMessage(Person personToEdit) { + private String generateSuccessMessage(Tutor tutorToEdit) { String message = !comment.value.isEmpty() ? MESSAGE_ADD_COMMENT_SUCCESS : MESSAGE_DELETE_COMMENT_SUCCESS; - return String.format(message, personToEdit); + return String.format(message, tutorToEdit); } } diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/tuthub/logic/commands/DeleteCommand.java similarity index 60% rename from src/main/java/seedu/address/logic/commands/DeleteCommand.java rename to src/main/java/tuthub/logic/commands/DeleteCommand.java index 98e05dbf25a..7f240de12fe 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/tuthub/logic/commands/DeleteCommand.java @@ -1,17 +1,17 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; import java.util.List; -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; -import seedu.address.model.person.Person; +import tuthub.commons.core.Messages; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Model; +import tuthub.model.tutor.Tutor; /** - * Deletes a person identified using it's displayed index from the address book. + * Deletes a tutor identified using it's displayed index from tuthub. */ public class DeleteCommand extends Command { @@ -22,7 +22,7 @@ public class DeleteCommand extends Command { + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1"; - public static final String MESSAGE_DELETE_PERSON_SUCCESS = "Deleted Tutor: %1$s"; + public static final String MESSAGE_DELETE_TUTOR_SUCCESS = "Deleted Tutor: %1$s"; private final Index targetIndex; @@ -33,15 +33,15 @@ public DeleteCommand(Index targetIndex) { @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredTutorList(); if (targetIndex.getZeroBased() >= lastShownList.size()) { - throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + throw new CommandException(Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } - Person personToDelete = lastShownList.get(targetIndex.getZeroBased()); - model.deletePerson(personToDelete); - return new CommandResult(String.format(MESSAGE_DELETE_PERSON_SUCCESS, personToDelete)); + Tutor tutorToDelete = lastShownList.get(targetIndex.getZeroBased()); + model.deleteTutor(tutorToDelete); + return new CommandResult(String.format(MESSAGE_DELETE_TUTOR_SUCCESS, tutorToDelete)); } @Override diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/tuthub/logic/commands/EditCommand.java similarity index 56% rename from src/main/java/seedu/address/logic/commands/EditCommand.java rename to src/main/java/tuthub/logic/commands/EditCommand.java index d66d2f53f2f..ef3c6b7849d 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/tuthub/logic/commands/EditCommand.java @@ -1,15 +1,15 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; +import static tuthub.model.Model.PREDICATE_SHOW_ALL_TUTORS; import java.util.Collections; import java.util.HashSet; @@ -17,31 +17,31 @@ import java.util.Optional; import java.util.Set; -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.commons.util.CollectionUtil; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; -import seedu.address.model.person.Address; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; +import tuthub.commons.core.Messages; +import tuthub.commons.core.index.Index; +import tuthub.commons.util.CollectionUtil; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Model; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; /** - * Edits the details of an existing person in the address book. + * Edits the details of an existing tutor in the address book. */ public class EditCommand extends Command { public static final String COMMAND_WORD = "edit"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the details of the person identified " - + "by the index number used in the displayed person list. " + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the details of the tutor identified " + + "by the index number used in the displayed tutor list. " + "Existing values will be overwritten by the input values.\n" + "Parameters: INDEX (must be a positive integer) " + "[" + PREFIX_NAME + "NAME] " @@ -56,64 +56,64 @@ public class EditCommand extends Command { + PREFIX_PHONE + "91234567 " + PREFIX_EMAIL + "johndoe@example.com"; - public static final String MESSAGE_EDIT_PERSON_SUCCESS = "Edited Person: %1$s"; + public static final String MESSAGE_EDIT_TUTOR_SUCCESS = "Edited Tutor: %1$s"; public static final String MESSAGE_NOT_EDITED = "At least one field to edit must be provided."; - public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book."; + public static final String MESSAGE_DUPLICATE_TUTOR = "This tutor already exists in the address book."; private final Index index; - private final EditPersonDescriptor editPersonDescriptor; + private final EditTutorDescriptor editTutorDescriptor; /** - * @param index of the person in the filtered person list to edit - * @param editPersonDescriptor details to edit the person with + * @param index of the tutor in the filtered tutor list to edit + * @param editTutorDescriptor details to edit the tutor with */ - public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) { + public EditCommand(Index index, EditTutorDescriptor editTutorDescriptor) { requireNonNull(index); - requireNonNull(editPersonDescriptor); + requireNonNull(editTutorDescriptor); this.index = index; - this.editPersonDescriptor = new EditPersonDescriptor(editPersonDescriptor); + this.editTutorDescriptor = new EditTutorDescriptor(editTutorDescriptor); } @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - List lastShownList = model.getFilteredPersonList(); + List lastShownList = model.getFilteredTutorList(); if (index.getZeroBased() >= lastShownList.size()) { - throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + throw new CommandException(Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } - Person personToEdit = lastShownList.get(index.getZeroBased()); - Person editedPerson = createEditedPerson(personToEdit, editPersonDescriptor); + Tutor tutorToEdit = lastShownList.get(index.getZeroBased()); + Tutor editedTutor = createEditedTutor(tutorToEdit, editTutorDescriptor); - if (!personToEdit.isSamePerson(editedPerson) && model.hasPerson(editedPerson)) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); + if (!tutorToEdit.isSameTutor(editedTutor) && model.hasTutor(editedTutor)) { + throw new CommandException(MESSAGE_DUPLICATE_TUTOR); } - model.setPerson(personToEdit, editedPerson); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); - return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson)); + model.setTutor(tutorToEdit, editedTutor); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); + return new CommandResult(String.format(MESSAGE_EDIT_TUTOR_SUCCESS, editedTutor)); } /** - * Creates and returns a {@code Person} with the details of {@code personToEdit} - * edited with {@code editPersonDescriptor}. + * Creates and returns a {@code Tutor} with the details of {@code tutorToEdit} + * edited with {@code editTutorDescriptor}. */ - private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) { - assert personToEdit != null; - - Name updatedName = editPersonDescriptor.getName().orElse(personToEdit.getName()); - Phone updatedPhone = editPersonDescriptor.getPhone().orElse(personToEdit.getPhone()); - Email updatedEmail = editPersonDescriptor.getEmail().orElse(personToEdit.getEmail()); - Module updatedModule = editPersonDescriptor.getModule().orElse(personToEdit.getModule()); - Year updatedYear = editPersonDescriptor.getYear().orElse(personToEdit.getYear()); - StudentId updatedStudentId = editPersonDescriptor.getStudentId().orElse(personToEdit.getStudentId()); - Address updatedAddress = editPersonDescriptor.getAddress().orElse(personToEdit.getAddress()); - Comment updatedComment = personToEdit.getComment(); - Set updatedTags = editPersonDescriptor.getTags().orElse(personToEdit.getTags()); - - return new Person(updatedName, updatedPhone, updatedEmail, + private static Tutor createEditedTutor(Tutor tutorToEdit, EditTutorDescriptor editTutorDescriptor) { + assert tutorToEdit != null; + + Name updatedName = editTutorDescriptor.getName().orElse(tutorToEdit.getName()); + Phone updatedPhone = editTutorDescriptor.getPhone().orElse(tutorToEdit.getPhone()); + Email updatedEmail = editTutorDescriptor.getEmail().orElse(tutorToEdit.getEmail()); + Module updatedModule = editTutorDescriptor.getModule().orElse(tutorToEdit.getModule()); + Year updatedYear = editTutorDescriptor.getYear().orElse(tutorToEdit.getYear()); + StudentId updatedStudentId = editTutorDescriptor.getStudentId().orElse(tutorToEdit.getStudentId()); + Address updatedAddress = editTutorDescriptor.getAddress().orElse(tutorToEdit.getAddress()); + Comment updatedComment = tutorToEdit.getComment(); + Set updatedTags = editTutorDescriptor.getTags().orElse(tutorToEdit.getTags()); + + return new Tutor(updatedName, updatedPhone, updatedEmail, updatedModule, updatedYear, updatedStudentId, updatedAddress, updatedComment, updatedTags); } @@ -132,14 +132,14 @@ public boolean equals(Object other) { // state check EditCommand e = (EditCommand) other; return index.equals(e.index) - && editPersonDescriptor.equals(e.editPersonDescriptor); + && editTutorDescriptor.equals(e.editTutorDescriptor); } /** - * Stores the details to edit the person with. Each non-empty field value will replace the - * corresponding field value of the person. + * Stores the details to edit the Tutor with. Each non-empty field value will replace the + * corresponding field value of the Tutor. */ - public static class EditPersonDescriptor { + public static class EditTutorDescriptor { private Name name; private Phone phone; private Email email; @@ -149,13 +149,13 @@ public static class EditPersonDescriptor { private Address address; private Set tags; - public EditPersonDescriptor() {} + public EditTutorDescriptor() {} /** * Copy constructor. * A defensive copy of {@code tags} is used internally. */ - public EditPersonDescriptor(EditPersonDescriptor toCopy) { + public EditTutorDescriptor(EditTutorDescriptor toCopy) { setName(toCopy.name); setPhone(toCopy.phone); setEmail(toCopy.email); @@ -254,12 +254,12 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof EditPersonDescriptor)) { + if (!(other instanceof EditTutorDescriptor)) { return false; } // state check - EditPersonDescriptor e = (EditPersonDescriptor) other; + EditTutorDescriptor e = (EditTutorDescriptor) other; return getName().equals(e.getName()) && getPhone().equals(e.getPhone()) diff --git a/src/main/java/seedu/address/logic/commands/ExitCommand.java b/src/main/java/tuthub/logic/commands/ExitCommand.java similarity index 84% rename from src/main/java/seedu/address/logic/commands/ExitCommand.java rename to src/main/java/tuthub/logic/commands/ExitCommand.java index 7a4d5980135..44d352ed8ae 100644 --- a/src/main/java/seedu/address/logic/commands/ExitCommand.java +++ b/src/main/java/tuthub/logic/commands/ExitCommand.java @@ -1,6 +1,6 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import seedu.address.model.Model; +import tuthub.model.Model; /** * Terminates the program. diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/tuthub/logic/commands/FindCommand.java similarity index 68% rename from src/main/java/seedu/address/logic/commands/FindCommand.java rename to src/main/java/tuthub/logic/commands/FindCommand.java index d6b19b0a0de..c742ab40c69 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/tuthub/logic/commands/FindCommand.java @@ -1,20 +1,20 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; -import seedu.address.commons.core.Messages; -import seedu.address.model.Model; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import tuthub.commons.core.Messages; +import tuthub.model.Model; +import tuthub.model.tutor.NameContainsKeywordsPredicate; /** - * Finds and lists all persons in address book whose name contains any of the argument keywords. + * Finds and lists all tutors in tuthub whose name contains any of the argument keywords. * Keyword matching is case insensitive. */ public class FindCommand extends Command { public static final String COMMAND_WORD = "find"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all persons whose names contain any of " + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all tutors whose names contain any of " + "the specified keywords (case-insensitive) and displays them as a list with index numbers.\n" + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" + "Example: " + COMMAND_WORD + " alice bob charlie"; @@ -28,9 +28,9 @@ public FindCommand(NameContainsKeywordsPredicate predicate) { @Override public CommandResult execute(Model model) { requireNonNull(model); - model.updateFilteredPersonList(predicate); + model.updateFilteredTutorList(predicate); return new CommandResult( - String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size())); + String.format(Messages.MESSAGE_TUTORS_LISTED_OVERVIEW, model.getFilteredTutorList().size())); } @Override diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/tuthub/logic/commands/HelpCommand.java similarity index 88% rename from src/main/java/seedu/address/logic/commands/HelpCommand.java rename to src/main/java/tuthub/logic/commands/HelpCommand.java index bf824f91bd0..b17fbb225fa 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/tuthub/logic/commands/HelpCommand.java @@ -1,6 +1,6 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import seedu.address.model.Model; +import tuthub.model.Model; /** * Format full help instructions for every command for display. diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/tuthub/logic/commands/ListCommand.java similarity index 59% rename from src/main/java/seedu/address/logic/commands/ListCommand.java rename to src/main/java/tuthub/logic/commands/ListCommand.java index 54600bf3d72..c27d4c1a1cc 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/tuthub/logic/commands/ListCommand.java @@ -1,12 +1,12 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static tuthub.model.Model.PREDICATE_SHOW_ALL_TUTORS; -import seedu.address.model.Model; +import tuthub.model.Model; /** - * Lists all persons in the address book to the user. + * Lists all tutors in tuthub to the user. */ public class ListCommand extends Command { @@ -18,7 +18,7 @@ public class ListCommand extends Command { @Override public CommandResult execute(Model model) { requireNonNull(model); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); return new CommandResult(MESSAGE_SUCCESS); } } diff --git a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java b/src/main/java/tuthub/logic/commands/exceptions/CommandException.java similarity index 89% rename from src/main/java/seedu/address/logic/commands/exceptions/CommandException.java rename to src/main/java/tuthub/logic/commands/exceptions/CommandException.java index a16bd14f2cd..4bab2e0b48e 100644 --- a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java +++ b/src/main/java/tuthub/logic/commands/exceptions/CommandException.java @@ -1,4 +1,4 @@ -package seedu.address.logic.commands.exceptions; +package tuthub.logic.commands.exceptions; /** * Represents an error which occurs during execution of a {@link Command}. diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/tuthub/logic/parser/AddCommandParser.java similarity index 62% rename from src/main/java/seedu/address/logic/parser/AddCommandParser.java rename to src/main/java/tuthub/logic/parser/AddCommandParser.java index 58d7fb97060..50941ef2896 100644 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ b/src/main/java/tuthub/logic/parser/AddCommandParser.java @@ -1,30 +1,30 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; import java.util.Set; import java.util.stream.Stream; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; +import tuthub.logic.commands.AddCommand; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; /** * Parses input arguments and creates a new AddCommand object @@ -57,9 +57,9 @@ public AddCommand parse(String args) throws ParseException { Comment comment = new Comment(""); Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - Person person = new Person(name, phone, email, module, year, studentId, address, comment, tagList); + Tutor tutor = new Tutor(name, phone, email, module, year, studentId, address, comment, tagList); - return new AddCommand(person); + return new AddCommand(tutor); } /** diff --git a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java b/src/main/java/tuthub/logic/parser/ArgumentMultimap.java similarity index 98% rename from src/main/java/seedu/address/logic/parser/ArgumentMultimap.java rename to src/main/java/tuthub/logic/parser/ArgumentMultimap.java index 954c8e18f8e..58c26b340be 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentMultimap.java +++ b/src/main/java/tuthub/logic/parser/ArgumentMultimap.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java b/src/main/java/tuthub/logic/parser/ArgumentTokenizer.java similarity index 99% rename from src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java rename to src/main/java/tuthub/logic/parser/ArgumentTokenizer.java index 5c9aebfa488..519c88b8f4e 100644 --- a/src/main/java/seedu/address/logic/parser/ArgumentTokenizer.java +++ b/src/main/java/tuthub/logic/parser/ArgumentTokenizer.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/tuthub/logic/parser/CliSyntax.java similarity index 95% rename from src/main/java/seedu/address/logic/parser/CliSyntax.java rename to src/main/java/tuthub/logic/parser/CliSyntax.java index b04a919cfce..aaf13cf53a6 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/tuthub/logic/parser/CliSyntax.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; /** * Contains Command Line Interface (CLI) syntax definitions common to multiple commands diff --git a/src/main/java/seedu/address/logic/parser/CommentCommandParser.java b/src/main/java/tuthub/logic/parser/CommentCommandParser.java similarity index 70% rename from src/main/java/seedu/address/logic/parser/CommentCommandParser.java rename to src/main/java/tuthub/logic/parser/CommentCommandParser.java index 0badd146364..3fdca11f9a6 100644 --- a/src/main/java/seedu/address/logic/parser/CommentCommandParser.java +++ b/src/main/java/tuthub/logic/parser/CommentCommandParser.java @@ -1,14 +1,14 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_COMMENT; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.parser.CliSyntax.PREFIX_COMMENT; -import seedu.address.commons.core.index.Index; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.logic.commands.CommentCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Comment; +import tuthub.commons.core.index.Index; +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.logic.commands.CommentCommand; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.Comment; /** * Parses input arguments and creates a new {@code CommentCommand} object diff --git a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java b/src/main/java/tuthub/logic/parser/DeleteCommandParser.java similarity index 73% rename from src/main/java/seedu/address/logic/parser/DeleteCommandParser.java rename to src/main/java/tuthub/logic/parser/DeleteCommandParser.java index 522b93081cc..5c6014d3c82 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java +++ b/src/main/java/tuthub/logic/parser/DeleteCommandParser.java @@ -1,10 +1,10 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.DeleteCommand; +import tuthub.logic.parser.exceptions.ParseException; /** * Parses input arguments and creates a new DeleteCommand object diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/tuthub/logic/parser/EditCommandParser.java similarity index 55% rename from src/main/java/seedu/address/logic/parser/EditCommandParser.java rename to src/main/java/tuthub/logic/parser/EditCommandParser.java index f8ab0e20f1c..88606919b92 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/tuthub/logic/parser/EditCommandParser.java @@ -1,26 +1,26 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.Set; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.tag.Tag; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.EditCommand; +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tag.Tag; /** * Parses input arguments and creates a new EditCommand object @@ -46,35 +46,35 @@ public EditCommand parse(String args) throws ParseException { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe); } - EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); + EditTutorDescriptor editTutorDescriptor = new EditTutorDescriptor(); if (argMultimap.getValue(PREFIX_NAME).isPresent()) { - editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get())); + editTutorDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get())); } if (argMultimap.getValue(PREFIX_PHONE).isPresent()) { - editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get())); + editTutorDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get())); } if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) { - editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get())); + editTutorDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get())); } if (argMultimap.getValue(PREFIX_MODULE).isPresent()) { - editPersonDescriptor.setModule(ParserUtil.parseModule(argMultimap.getValue(PREFIX_MODULE).get())); + editTutorDescriptor.setModule(ParserUtil.parseModule(argMultimap.getValue(PREFIX_MODULE).get())); } if (argMultimap.getValue(PREFIX_YEAR).isPresent()) { - editPersonDescriptor.setYear(ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get())); + editTutorDescriptor.setYear(ParserUtil.parseYear(argMultimap.getValue(PREFIX_YEAR).get())); } if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) { - editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get())); + editTutorDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get())); } if (argMultimap.getValue(PREFIX_STUDENTID).isPresent()) { - editPersonDescriptor.setStudentId(ParserUtil.parseStudentId(argMultimap.getValue(PREFIX_STUDENTID).get())); + editTutorDescriptor.setStudentId(ParserUtil.parseStudentId(argMultimap.getValue(PREFIX_STUDENTID).get())); } - parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags); + parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editTutorDescriptor::setTags); - if (!editPersonDescriptor.isAnyFieldEdited()) { + if (!editTutorDescriptor.isAnyFieldEdited()) { throw new ParseException(EditCommand.MESSAGE_NOT_EDITED); } - return new EditCommand(index, editPersonDescriptor); + return new EditCommand(index, editTutorDescriptor); } /** diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/tuthub/logic/parser/FindCommandParser.java similarity index 74% rename from src/main/java/seedu/address/logic/parser/FindCommandParser.java rename to src/main/java/tuthub/logic/parser/FindCommandParser.java index 4fb71f23103..f5c23ca121a 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/tuthub/logic/parser/FindCommandParser.java @@ -1,12 +1,12 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import java.util.Arrays; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import tuthub.logic.commands.FindCommand; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.NameContainsKeywordsPredicate; /** * Parses input arguments and creates a new FindCommand object diff --git a/src/main/java/seedu/address/logic/parser/Parser.java b/src/main/java/tuthub/logic/parser/Parser.java similarity index 72% rename from src/main/java/seedu/address/logic/parser/Parser.java rename to src/main/java/tuthub/logic/parser/Parser.java index d6551ad8e3f..7a0b6dd65df 100644 --- a/src/main/java/seedu/address/logic/parser/Parser.java +++ b/src/main/java/tuthub/logic/parser/Parser.java @@ -1,7 +1,7 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import seedu.address.logic.commands.Command; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.logic.commands.Command; +import tuthub.logic.parser.exceptions.ParseException; /** * Represents a Parser that is able to parse user input into a {@code Command} of type {@code T}. diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/tuthub/logic/parser/ParserUtil.java similarity index 91% rename from src/main/java/seedu/address/logic/parser/ParserUtil.java rename to src/main/java/tuthub/logic/parser/ParserUtil.java index 0677f8af301..1da4cddb84c 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/tuthub/logic/parser/ParserUtil.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static java.util.Objects.requireNonNull; @@ -6,17 +6,17 @@ import java.util.HashSet; import java.util.Set; -import seedu.address.commons.core.index.Index; -import seedu.address.commons.util.StringUtil; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; +import tuthub.commons.core.index.Index; +import tuthub.commons.util.StringUtil; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; /** * Contains utility methods used for parsing strings in the various *Parser classes. diff --git a/src/main/java/seedu/address/logic/parser/Prefix.java b/src/main/java/tuthub/logic/parser/Prefix.java similarity index 95% rename from src/main/java/seedu/address/logic/parser/Prefix.java rename to src/main/java/tuthub/logic/parser/Prefix.java index c859d5fa5db..a7ce4cc443c 100644 --- a/src/main/java/seedu/address/logic/parser/Prefix.java +++ b/src/main/java/tuthub/logic/parser/Prefix.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; /** * A prefix that marks the beginning of an argument in an arguments string. diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/tuthub/logic/parser/TuthubParser.java similarity index 71% rename from src/main/java/seedu/address/logic/parser/AddressBookParser.java rename to src/main/java/tuthub/logic/parser/TuthubParser.java index 4ca8df8e0cd..78f6a740cea 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/tuthub/logic/parser/TuthubParser.java @@ -1,27 +1,27 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; import java.util.regex.Matcher; import java.util.regex.Pattern; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.Command; -import seedu.address.logic.commands.CommentCommand; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.ListCommand; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.logic.commands.AddCommand; +import tuthub.logic.commands.ClearCommand; +import tuthub.logic.commands.Command; +import tuthub.logic.commands.CommentCommand; +import tuthub.logic.commands.DeleteCommand; +import tuthub.logic.commands.EditCommand; +import tuthub.logic.commands.ExitCommand; +import tuthub.logic.commands.FindCommand; +import tuthub.logic.commands.HelpCommand; +import tuthub.logic.commands.ListCommand; +import tuthub.logic.parser.exceptions.ParseException; /** * Parses user input. */ -public class AddressBookParser { +public class TuthubParser { /** * Used for initial separation of command word and args. diff --git a/src/main/java/seedu/address/logic/parser/exceptions/ParseException.java b/src/main/java/tuthub/logic/parser/exceptions/ParseException.java similarity index 73% rename from src/main/java/seedu/address/logic/parser/exceptions/ParseException.java rename to src/main/java/tuthub/logic/parser/exceptions/ParseException.java index 158a1a54c1c..08a6c8fdd25 100644 --- a/src/main/java/seedu/address/logic/parser/exceptions/ParseException.java +++ b/src/main/java/tuthub/logic/parser/exceptions/ParseException.java @@ -1,6 +1,6 @@ -package seedu.address.logic.parser.exceptions; +package tuthub.logic.parser.exceptions; -import seedu.address.commons.exceptions.IllegalValueException; +import tuthub.commons.exceptions.IllegalValueException; /** * Represents a parse error encountered by a parser. diff --git a/src/main/java/tuthub/model/Model.java b/src/main/java/tuthub/model/Model.java new file mode 100644 index 00000000000..a5ff88d2f1e --- /dev/null +++ b/src/main/java/tuthub/model/Model.java @@ -0,0 +1,87 @@ +package tuthub.model; + +import java.nio.file.Path; +import java.util.function.Predicate; + +import javafx.collections.ObservableList; +import tuthub.commons.core.GuiSettings; +import tuthub.model.tutor.Tutor; + +/** + * The API of the Model component. + */ +public interface Model { + /** {@code Predicate} that always evaluate to true */ + Predicate PREDICATE_SHOW_ALL_TUTORS = unused -> true; + + /** + * Replaces user prefs data with the data in {@code userPrefs}. + */ + void setUserPrefs(ReadOnlyUserPrefs userPrefs); + + /** + * Returns the user prefs. + */ + ReadOnlyUserPrefs getUserPrefs(); + + /** + * Returns the user prefs' GUI settings. + */ + GuiSettings getGuiSettings(); + + /** + * Sets the user prefs' GUI settings. + */ + void setGuiSettings(GuiSettings guiSettings); + + /** + * Returns the user prefs' tuthub file path. + */ + Path getTuthubFilePath(); + + /** + * Sets the user prefs' tuthub file path. + */ + void setTuthubFilePath(Path tuthubFilePath); + + /** + * Replaces tuthub data with the data in {@code tuthub}. + */ + void setTuthub(ReadOnlyTuthub tuthub); + + /** Returns the Tuthub */ + ReadOnlyTuthub getTuthub(); + + /** + * Returns true if a tutor with the same identity as {@code tutor} exists in the tuthub. + */ + boolean hasTutor(Tutor tutor); + + /** + * Deletes the given tutor. + * The tutor must exist in the tuthub. + */ + void deleteTutor(Tutor target); + + /** + * Adds the given tutor. + * {@code tutor} must not already exist in the tuthub. + */ + void addTutor(Tutor tutor); + + /** + * Replaces the given tutor {@code target} with {@code editedTutor}. + * {@code target} must exist in the tuthub. + * The tutor identity of {@code editedTutor} must not be the same as another existing tutor in the tuthub. + */ + void setTutor(Tutor target, Tutor editedTutor); + + /** Returns an unmodifiable view of the filtered tutor list */ + ObservableList getFilteredTutorList(); + + /** + * Updates the filter of the filtered tutor list to filter by the given {@code predicate}. + * @throws NullPointerException if {@code predicate} is null. + */ + void updateFilteredTutorList(Predicate predicate); +} diff --git a/src/main/java/tuthub/model/ModelManager.java b/src/main/java/tuthub/model/ModelManager.java new file mode 100644 index 00000000000..816cf243468 --- /dev/null +++ b/src/main/java/tuthub/model/ModelManager.java @@ -0,0 +1,150 @@ +package tuthub.model; + +import static java.util.Objects.requireNonNull; +import static tuthub.commons.util.CollectionUtil.requireAllNonNull; + +import java.nio.file.Path; +import java.util.function.Predicate; +import java.util.logging.Logger; + +import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; +import tuthub.commons.core.GuiSettings; +import tuthub.commons.core.LogsCenter; +import tuthub.model.tutor.Tutor; + +/** + * Represents the in-memory model of the address book data. + */ +public class ModelManager implements Model { + private static final Logger logger = LogsCenter.getLogger(ModelManager.class); + + private final Tuthub tuthub; + private final UserPrefs userPrefs; + private final FilteredList filteredTutors; + + /** + * Initializes a ModelManager with the given tuthub and userPrefs. + */ + public ModelManager(ReadOnlyTuthub tuthub, ReadOnlyUserPrefs userPrefs) { + requireAllNonNull(tuthub, userPrefs); + + logger.fine("Initializing with address book: " + tuthub + " and user prefs " + userPrefs); + + this.tuthub = new Tuthub(tuthub); + this.userPrefs = new UserPrefs(userPrefs); + filteredTutors = new FilteredList<>(this.tuthub.getTutorList()); + } + + public ModelManager() { + this(new Tuthub(), new UserPrefs()); + } + + //=========== UserPrefs ================================================================================== + + @Override + public void setUserPrefs(ReadOnlyUserPrefs userPrefs) { + requireNonNull(userPrefs); + this.userPrefs.resetData(userPrefs); + } + + @Override + public ReadOnlyUserPrefs getUserPrefs() { + return userPrefs; + } + + @Override + public GuiSettings getGuiSettings() { + return userPrefs.getGuiSettings(); + } + + @Override + public void setGuiSettings(GuiSettings guiSettings) { + requireNonNull(guiSettings); + userPrefs.setGuiSettings(guiSettings); + } + + @Override + public Path getTuthubFilePath() { + return userPrefs.getTuthubFilePath(); + } + + @Override + public void setTuthubFilePath(Path tuthubFilePath) { + requireNonNull(tuthubFilePath); + userPrefs.setTuthubFilePath(tuthubFilePath); + } + + //=========== Tuthub ================================================================================ + + @Override + public void setTuthub(ReadOnlyTuthub tuthub) { + this.tuthub.resetData(tuthub); + } + + @Override + public ReadOnlyTuthub getTuthub() { + return tuthub; + } + + @Override + public boolean hasTutor(Tutor tutor) { + requireNonNull(tutor); + return tuthub.hasTutor(tutor); + } + + @Override + public void deleteTutor(Tutor target) { + tuthub.removeTutor(target); + } + + @Override + public void addTutor(Tutor tutor) { + tuthub.addTutor(tutor); + updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); + } + + @Override + public void setTutor(Tutor target, Tutor editedTutor) { + requireAllNonNull(target, editedTutor); + + tuthub.setTutor(target, editedTutor); + } + + //=========== Filtered Tutor List Accessors ============================================================= + + /** + * Returns an unmodifiable view of the list of {@code Tutor} backed by the internal list of + * {@code versionedTuthub} + */ + @Override + public ObservableList getFilteredTutorList() { + return filteredTutors; + } + + @Override + public void updateFilteredTutorList(Predicate predicate) { + requireNonNull(predicate); + filteredTutors.setPredicate(predicate); + } + + @Override + public boolean equals(Object obj) { + // short circuit if same object + if (obj == this) { + return true; + } + + // instanceof handles nulls + if (!(obj instanceof ModelManager)) { + return false; + } + + // state check + ModelManager other = (ModelManager) obj; + return tuthub.equals(other.tuthub) + && userPrefs.equals(other.userPrefs) + && filteredTutors.equals(other.filteredTutors); + } + +} diff --git a/src/main/java/tuthub/model/ReadOnlyTuthub.java b/src/main/java/tuthub/model/ReadOnlyTuthub.java new file mode 100644 index 00000000000..0899970015e --- /dev/null +++ b/src/main/java/tuthub/model/ReadOnlyTuthub.java @@ -0,0 +1,17 @@ +package tuthub.model; + +import javafx.collections.ObservableList; +import tuthub.model.tutor.Tutor; + +/** + * Unmodifiable view of an address book + */ +public interface ReadOnlyTuthub { + + /** + * Returns an unmodifiable view of the tutors list. + * This list will not contain any duplicate tutors. + */ + ObservableList getTutorList(); + +} diff --git a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java b/src/main/java/tuthub/model/ReadOnlyUserPrefs.java similarity index 57% rename from src/main/java/seedu/address/model/ReadOnlyUserPrefs.java rename to src/main/java/tuthub/model/ReadOnlyUserPrefs.java index befd58a4c73..830d4a28f94 100644 --- a/src/main/java/seedu/address/model/ReadOnlyUserPrefs.java +++ b/src/main/java/tuthub/model/ReadOnlyUserPrefs.java @@ -1,8 +1,8 @@ -package seedu.address.model; +package tuthub.model; import java.nio.file.Path; -import seedu.address.commons.core.GuiSettings; +import tuthub.commons.core.GuiSettings; /** * Unmodifiable view of user prefs. @@ -11,6 +11,6 @@ public interface ReadOnlyUserPrefs { GuiSettings getGuiSettings(); - Path getAddressBookFilePath(); + Path getTuthubFilePath(); } diff --git a/src/main/java/tuthub/model/Tuthub.java b/src/main/java/tuthub/model/Tuthub.java new file mode 100644 index 00000000000..3a049fa0150 --- /dev/null +++ b/src/main/java/tuthub/model/Tuthub.java @@ -0,0 +1,120 @@ +package tuthub.model; + +import static java.util.Objects.requireNonNull; + +import java.util.List; + +import javafx.collections.ObservableList; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.UniqueTutorList; + +/** + * Wraps all data at the Tuthub level + * Duplicates are not allowed (by .isSameTutor comparison) + */ +public class Tuthub implements ReadOnlyTuthub { + + private final UniqueTutorList tutors; + + /* + * The 'unusual' code block below is a non-static initialization block, sometimes used to avoid duplication + * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html + * + * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication + * among constructors. + */ + { + tutors = new UniqueTutorList(); + } + + public Tuthub() {} + + /** + * Creates an Tuthub using the Tutors in the {@code toBeCopied} + */ + public Tuthub(ReadOnlyTuthub toBeCopied) { + this(); + resetData(toBeCopied); + } + + //// list overwrite operations + + /** + * Replaces the contents of the Tutor list with {@code Tutors}. + * {@code Tutors} must not contain duplicate Tutors. + */ + public void setTutors(List tutors) { + this.tutors.setTutors(tutors); + } + + /** + * Resets the existing data of this {@code Tuthub} with {@code newData}. + */ + public void resetData(ReadOnlyTuthub newData) { + requireNonNull(newData); + + setTutors(newData.getTutorList()); + } + + //// Tutor-level operations + + /** + * Returns true if a Tutor with the same identity as {@code Tutor} exists in tuthub. + */ + public boolean hasTutor(Tutor tutor) { + requireNonNull(tutor); + return tutors.contains(tutor); + } + + /** + * Adds a Tutor to tuthub. + * The Tutor must not already exist in tuthub. + */ + public void addTutor(Tutor p) { + tutors.add(p); + } + + /** + * Replaces the given Tutor {@code target} in the list with {@code editedTutor}. + * {@code target} must exist in tuthub. + * The Tutor identity of {@code editedTutor} must not be the same as another existing Tutor in tuthub. + */ + public void setTutor(Tutor target, Tutor editedTutor) { + requireNonNull(editedTutor); + + tutors.setTutor(target, editedTutor); + } + + /** + * Removes {@code key} from this {@code Tuthub}. + * {@code key} must exist in tuthub. + */ + public void removeTutor(Tutor key) { + tutors.remove(key); + } + + //// util methods + + @Override + public String toString() { + return tutors.asUnmodifiableObservableList().size() + " Tutors"; + // TODO: refine later + } + + @Override + public ObservableList getTutorList() { + return tutors.asUnmodifiableObservableList(); + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Tuthub // instanceof handles nulls + && tutors.equals(((Tuthub) other).tutors)); + } + + @Override + public int hashCode() { + return tutors.hashCode(); + } +} diff --git a/src/main/java/seedu/address/model/UserPrefs.java b/src/main/java/tuthub/model/UserPrefs.java similarity index 70% rename from src/main/java/seedu/address/model/UserPrefs.java rename to src/main/java/tuthub/model/UserPrefs.java index 25a5fd6eab9..ca6e9d4d30d 100644 --- a/src/main/java/seedu/address/model/UserPrefs.java +++ b/src/main/java/tuthub/model/UserPrefs.java @@ -1,4 +1,4 @@ -package seedu.address.model; +package tuthub.model; import static java.util.Objects.requireNonNull; @@ -6,7 +6,7 @@ import java.nio.file.Paths; import java.util.Objects; -import seedu.address.commons.core.GuiSettings; +import tuthub.commons.core.GuiSettings; /** * Represents User's preferences. @@ -14,7 +14,7 @@ public class UserPrefs implements ReadOnlyUserPrefs { private GuiSettings guiSettings = new GuiSettings(); - private Path addressBookFilePath = Paths.get("data" , "addressbook.json"); + private Path tuthubFilePath = Paths.get("data" , "tuthub.json"); /** * Creates a {@code UserPrefs} with default values. @@ -35,7 +35,7 @@ public UserPrefs(ReadOnlyUserPrefs userPrefs) { public void resetData(ReadOnlyUserPrefs newUserPrefs) { requireNonNull(newUserPrefs); setGuiSettings(newUserPrefs.getGuiSettings()); - setAddressBookFilePath(newUserPrefs.getAddressBookFilePath()); + setTuthubFilePath(newUserPrefs.getTuthubFilePath()); } public GuiSettings getGuiSettings() { @@ -47,13 +47,13 @@ public void setGuiSettings(GuiSettings guiSettings) { this.guiSettings = guiSettings; } - public Path getAddressBookFilePath() { - return addressBookFilePath; + public Path getTuthubFilePath() { + return tuthubFilePath; } - public void setAddressBookFilePath(Path addressBookFilePath) { - requireNonNull(addressBookFilePath); - this.addressBookFilePath = addressBookFilePath; + public void setTuthubFilePath(Path tuthubFilePath) { + requireNonNull(tuthubFilePath); + this.tuthubFilePath = tuthubFilePath; } @Override @@ -68,19 +68,19 @@ public boolean equals(Object other) { UserPrefs o = (UserPrefs) other; return guiSettings.equals(o.guiSettings) - && addressBookFilePath.equals(o.addressBookFilePath); + && tuthubFilePath.equals(o.tuthubFilePath); } @Override public int hashCode() { - return Objects.hash(guiSettings, addressBookFilePath); + return Objects.hash(guiSettings, tuthubFilePath); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Gui Settings : " + guiSettings); - sb.append("\nLocal data file location : " + addressBookFilePath); + sb.append("\nLocal data file location : " + tuthubFilePath); return sb.toString(); } diff --git a/src/main/java/seedu/address/model/tag/Tag.java b/src/main/java/tuthub/model/tag/Tag.java similarity index 90% rename from src/main/java/seedu/address/model/tag/Tag.java rename to src/main/java/tuthub/model/tag/Tag.java index b0ea7e7dad7..7bc2964ef90 100644 --- a/src/main/java/seedu/address/model/tag/Tag.java +++ b/src/main/java/tuthub/model/tag/Tag.java @@ -1,10 +1,10 @@ -package seedu.address.model.tag; +package tuthub.model.tag; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Tag in the address book. + * Represents a Tag in Tuthub. * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)} */ public class Tag { diff --git a/src/main/java/seedu/address/model/person/Address.java b/src/main/java/tuthub/model/tutor/Address.java similarity index 90% rename from src/main/java/seedu/address/model/person/Address.java rename to src/main/java/tuthub/model/tutor/Address.java index 60472ca22a0..f4868134f30 100644 --- a/src/main/java/seedu/address/model/person/Address.java +++ b/src/main/java/tuthub/model/tutor/Address.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's address in the address book. + * Represents a tutor's address in the address book. * Guarantees: immutable; is valid as declared in {@link #isValidAddress(String)} */ public class Address { diff --git a/src/main/java/seedu/address/model/person/Comment.java b/src/main/java/tuthub/model/tutor/Comment.java similarity index 89% rename from src/main/java/seedu/address/model/person/Comment.java rename to src/main/java/tuthub/model/tutor/Comment.java index ceac51b1113..44bd91e85c2 100644 --- a/src/main/java/seedu/address/model/person/Comment.java +++ b/src/main/java/tuthub/model/tutor/Comment.java @@ -1,9 +1,9 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; /** - * Represents a Person's comment in the address book. + * Represents a Tutor's comment in tuthub. * Guarantees: immutable; is always valid */ public class Comment { diff --git a/src/main/java/seedu/address/model/person/Email.java b/src/main/java/tuthub/model/tutor/Email.java similarity index 94% rename from src/main/java/seedu/address/model/person/Email.java rename to src/main/java/tuthub/model/tutor/Email.java index f866e7133de..da0c26295f3 100644 --- a/src/main/java/seedu/address/model/person/Email.java +++ b/src/main/java/tuthub/model/tutor/Email.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's email in the address book. + * Represents a Tutor's email in tuthub. * Guarantees: immutable; is valid as declared in {@link #isValidEmail(String)} */ public class Email { diff --git a/src/main/java/seedu/address/model/person/Module.java b/src/main/java/tuthub/model/tutor/Module.java similarity index 90% rename from src/main/java/seedu/address/model/person/Module.java rename to src/main/java/tuthub/model/tutor/Module.java index 5ee6d00ddd3..ffd57f8cd1e 100644 --- a/src/main/java/seedu/address/model/person/Module.java +++ b/src/main/java/tuthub/model/tutor/Module.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's module in the address book. + * Represents a Tutor's module in tuthub. * Guarantees: immutable; is valid as declared in {@link #isValidModule(String)} */ public class Module { diff --git a/src/main/java/seedu/address/model/person/Name.java b/src/main/java/tuthub/model/tutor/Name.java similarity index 90% rename from src/main/java/seedu/address/model/person/Name.java rename to src/main/java/tuthub/model/tutor/Name.java index 79244d71cf7..b661232feab 100644 --- a/src/main/java/seedu/address/model/person/Name.java +++ b/src/main/java/tuthub/model/tutor/Name.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's name in the address book. + * Represents a Tutor's name in tuthub. * Guarantees: immutable; is valid as declared in {@link #isValidName(String)} */ public class Name { diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/tuthub/model/tutor/NameContainsKeywordsPredicate.java similarity index 73% rename from src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java rename to src/main/java/tuthub/model/tutor/NameContainsKeywordsPredicate.java index c9b5868427c..416d53c19ac 100644 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ b/src/main/java/tuthub/model/tutor/NameContainsKeywordsPredicate.java @@ -1,14 +1,14 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import java.util.List; import java.util.function.Predicate; -import seedu.address.commons.util.StringUtil; +import tuthub.commons.util.StringUtil; /** - * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. + * Tests that a {@code Tutor}'s {@code Name} matches any of the keywords given. */ -public class NameContainsKeywordsPredicate implements Predicate { +public class NameContainsKeywordsPredicate implements Predicate { private final List keywords; public NameContainsKeywordsPredicate(List keywords) { @@ -16,9 +16,9 @@ public NameContainsKeywordsPredicate(List keywords) { } @Override - public boolean test(Person person) { + public boolean test(Tutor tutor) { return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(tutor.getName().fullName, keyword)); } @Override diff --git a/src/main/java/seedu/address/model/person/Phone.java b/src/main/java/tuthub/model/tutor/Phone.java similarity index 88% rename from src/main/java/seedu/address/model/person/Phone.java rename to src/main/java/tuthub/model/tutor/Phone.java index 872c76b382f..5807a57ae8d 100644 --- a/src/main/java/seedu/address/model/person/Phone.java +++ b/src/main/java/tuthub/model/tutor/Phone.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's phone number in the address book. + * Represents a Tutor's phone number in tuthub. * Guarantees: immutable; is valid as declared in {@link #isValidPhone(String)} */ public class Phone { diff --git a/src/main/java/seedu/address/model/person/StudentId.java b/src/main/java/tuthub/model/tutor/StudentId.java similarity index 93% rename from src/main/java/seedu/address/model/person/StudentId.java rename to src/main/java/tuthub/model/tutor/StudentId.java index f56d643c69e..31972b56c34 100644 --- a/src/main/java/seedu/address/model/person/StudentId.java +++ b/src/main/java/tuthub/model/tutor/StudentId.java @@ -1,7 +1,7 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** * Represents a Tutor's ID in Tuthub. diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/tuthub/model/tutor/Tutor.java similarity index 69% rename from src/main/java/seedu/address/model/person/Person.java rename to src/main/java/tuthub/model/tutor/Tutor.java index 32ee24c05cf..4b20c0822aa 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/tuthub/model/tutor/Tutor.java @@ -1,19 +1,19 @@ -package seedu.address.model.person; +package tuthub.model.tutor; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import static tuthub.commons.util.CollectionUtil.requireAllNonNull; import java.util.Collections; import java.util.HashSet; import java.util.Objects; import java.util.Set; -import seedu.address.model.tag.Tag; +import tuthub.model.tag.Tag; /** - * Represents a Person in the address book. + * Represents a Tutor in tuthub. * Guarantees: details are present and not null, field values are validated, immutable. */ -public class Person { +public class Tutor { // Identity fields private final Name name; @@ -31,7 +31,7 @@ public class Person { /** * Every field must be present and not null. */ - public Person(Name name, Phone phone, Email email, Module module, Year year, + public Tutor(Name name, Phone phone, Email email, Module module, Year year, StudentId studentId, Address address, Comment comment, Set tags) { requireAllNonNull(name, phone, email, module, year, address, comment, tags); this.name = name; @@ -86,21 +86,21 @@ public Set getTags() { } /** - * Returns true if both persons have the same name. - * This defines a weaker notion of equality between two persons. + * Returns true if both Tutors have the same name. + * This defines a weaker notion of equality between two Tutors. */ - public boolean isSamePerson(Person otherPerson) { - if (otherPerson == this) { + public boolean isSameTutor(Tutor otherTutor) { + if (otherTutor == this) { return true; } - return otherPerson != null - && otherPerson.getName().equals(getName()); + return otherTutor != null + && otherTutor.getName().equals(getName()); } /** - * Returns true if both persons have the same identity and data fields. - * This defines a stronger notion of equality between two persons. + * Returns true if both Tutors have the same identity and data fields. + * This defines a stronger notion of equality between two Tutors. */ @Override public boolean equals(Object other) { @@ -108,20 +108,20 @@ public boolean equals(Object other) { return true; } - if (!(other instanceof Person)) { + if (!(other instanceof Tutor)) { return false; } - Person otherPerson = (Person) other; - return otherPerson.getName().equals(getName()) - && otherPerson.getPhone().equals(getPhone()) - && otherPerson.getEmail().equals(getEmail()) - && otherPerson.getModule().equals(getModule()) - && otherPerson.getYear().equals(getYear()) - && otherPerson.getStudentId().equals(getStudentId()) - && otherPerson.getAddress().equals(getAddress()) - && otherPerson.getComment().equals(getComment()) - && otherPerson.getTags().equals(getTags()); + Tutor otherTutor = (Tutor) other; + return otherTutor.getName().equals(getName()) + && otherTutor.getPhone().equals(getPhone()) + && otherTutor.getEmail().equals(getEmail()) + && otherTutor.getModule().equals(getModule()) + && otherTutor.getYear().equals(getYear()) + && otherTutor.getStudentId().equals(getStudentId()) + && otherTutor.getAddress().equals(getAddress()) + && otherTutor.getComment().equals(getComment()) + && otherTutor.getTags().equals(getTags()); } @Override diff --git a/src/main/java/tuthub/model/tutor/UniqueTutorList.java b/src/main/java/tuthub/model/tutor/UniqueTutorList.java new file mode 100644 index 00000000000..4eeb4da5c9c --- /dev/null +++ b/src/main/java/tuthub/model/tutor/UniqueTutorList.java @@ -0,0 +1,137 @@ +package tuthub.model.tutor; + +import static java.util.Objects.requireNonNull; +import static tuthub.commons.util.CollectionUtil.requireAllNonNull; + +import java.util.Iterator; +import java.util.List; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import tuthub.model.tutor.exceptions.DuplicateTutorException; +import tuthub.model.tutor.exceptions.TutorNotFoundException; + +/** + * A list of tutors that enforces uniqueness between its elements and does not allow nulls. + * A tutor is considered unique by comparing using {@code Tutor#isSameTutor(Tutor)}. As such, adding and updating of + * Tutors uses Tutor#isSameTutor(Tutor) for equality so as to ensure that the tutor being added or updated is + * unique in terms of identity in the UniqueTutorList. However, the removal of a tutor uses Tutor#equals(Object) so + * as to ensure that the tutor with exactly the same fields will be removed. + * + * Supports a minimal set of list operations. + * + * @see Tutor#isSameTutor(Tutor) + */ +public class UniqueTutorList implements Iterable { + + private final ObservableList internalList = FXCollections.observableArrayList(); + private final ObservableList internalUnmodifiableList = + FXCollections.unmodifiableObservableList(internalList); + + /** + * Returns true if the list contains an equivalent Tutor as the given argument. + */ + public boolean contains(Tutor toCheck) { + requireNonNull(toCheck); + return internalList.stream().anyMatch(toCheck::isSameTutor); + } + + /** + * Adds a Tutor to the list. + * The Tutor must not already exist in the list. + */ + public void add(Tutor toAdd) { + requireNonNull(toAdd); + if (contains(toAdd)) { + throw new DuplicateTutorException(); + } + internalList.add(toAdd); + } + + /** + * Replaces the Tutor {@code target} in the list with {@code editedTutor}. + * {@code target} must exist in the list. + * The Tutor identity of {@code editedTutor} must not be the same as another existing Tutor in the list. + */ + public void setTutor(Tutor target, Tutor editedTutor) { + requireAllNonNull(target, editedTutor); + + int index = internalList.indexOf(target); + if (index == -1) { + throw new TutorNotFoundException(); + } + + if (!target.isSameTutor(editedTutor) && contains(editedTutor)) { + throw new DuplicateTutorException(); + } + + internalList.set(index, editedTutor); + } + + /** + * Removes the equivalent Tutor from the list. + * The Tutor must exist in the list. + */ + public void remove(Tutor toRemove) { + requireNonNull(toRemove); + if (!internalList.remove(toRemove)) { + throw new TutorNotFoundException(); + } + } + + public void setTutors(UniqueTutorList replacement) { + requireNonNull(replacement); + internalList.setAll(replacement.internalList); + } + + /** + * Replaces the contents of this list with {@code Tutors}. + * {@code Tutors} must not contain duplicate Tutors. + */ + public void setTutors(List tutors) { + requireAllNonNull(tutors); + if (!TutorsAreUnique(tutors)) { + throw new DuplicateTutorException(); + } + + internalList.setAll(tutors); + } + + /** + * Returns the backing list as an unmodifiable {@code ObservableList}. + */ + public ObservableList asUnmodifiableObservableList() { + return internalUnmodifiableList; + } + + @Override + public Iterator iterator() { + return internalList.iterator(); + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof UniqueTutorList // instanceof handles nulls + && internalList.equals(((UniqueTutorList) other).internalList)); + } + + @Override + public int hashCode() { + return internalList.hashCode(); + } + + /** + * Returns true if {@code Tutors} contains only unique Tutors. + */ + private boolean TutorsAreUnique(List tutors) { + for (int i = 0; i < tutors.size() - 1; i++) { + for (int j = i + 1; j < tutors.size(); j++) { + if (tutors.get(i).isSameTutor(tutors.get(j))) { + return false; + } + } + } + return true; + } +} diff --git a/src/main/java/seedu/address/model/person/Year.java b/src/main/java/tuthub/model/tutor/Year.java similarity index 89% rename from src/main/java/seedu/address/model/person/Year.java rename to src/main/java/tuthub/model/tutor/Year.java index 27546ac6fa8..e71d5f0c1d5 100644 --- a/src/main/java/seedu/address/model/person/Year.java +++ b/src/main/java/tuthub/model/tutor/Year.java @@ -1,10 +1,10 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static java.util.Objects.requireNonNull; -import static seedu.address.commons.util.AppUtil.checkArgument; +import static tuthub.commons.util.AppUtil.checkArgument; /** - * Represents a Person's year in the address book. + * Represents a Tutor's year in tuthub. * Guarantees: immutable; is valid as declared in {@link #isValidYear(String)} */ public class Year { diff --git a/src/main/java/tuthub/model/tutor/exceptions/DuplicateTutorException.java b/src/main/java/tuthub/model/tutor/exceptions/DuplicateTutorException.java new file mode 100644 index 00000000000..a9292d8ef63 --- /dev/null +++ b/src/main/java/tuthub/model/tutor/exceptions/DuplicateTutorException.java @@ -0,0 +1,11 @@ +package tuthub.model.tutor.exceptions; + +/** + * Signals that the operation will result in duplicate Tutors (Tutors are considered duplicates if they have the same + * identity). + */ +public class DuplicateTutorException extends RuntimeException { + public DuplicateTutorException() { + super("Operation would result in duplicate tutors"); + } +} diff --git a/src/main/java/tuthub/model/tutor/exceptions/TutorNotFoundException.java b/src/main/java/tuthub/model/tutor/exceptions/TutorNotFoundException.java new file mode 100644 index 00000000000..2e87346d07b --- /dev/null +++ b/src/main/java/tuthub/model/tutor/exceptions/TutorNotFoundException.java @@ -0,0 +1,6 @@ +package tuthub.model.tutor.exceptions; + +/** + * Signals that the operation is unable to find the specified tutor. + */ +public class TutorNotFoundException extends RuntimeException {} diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/tuthub/model/util/SampleDataUtil.java similarity index 52% rename from src/main/java/seedu/address/model/util/SampleDataUtil.java rename to src/main/java/tuthub/model/util/SampleDataUtil.java index edceea80768..37b7cfa7c97 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/tuthub/model/util/SampleDataUtil.java @@ -1,59 +1,59 @@ -package seedu.address.model.util; +package tuthub.model.util; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; -import seedu.address.model.AddressBook; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Address; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; +import tuthub.model.Tuthub; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; /** - * Contains utility methods for populating {@code AddressBook} with sample data. + * Contains utility methods for populating {@code Tuthub} with sample data. */ public class SampleDataUtil { - public static Person[] getSamplePersons() { - return new Person[] { - new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), + public static Tutor[] getSampleTutors() { + return new Tutor[] { + new Tutor(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), new Module("cs2103"), new Year("4"), new StudentId("A0234567Y"), new Address("Blk 30 Geylang Street 29, #06-40"), new Comment(""), getTagSet("friends")), - new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), + new Tutor(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), new Module("cs2100"), new Year("3"), new StudentId("A0234527X"), new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), new Comment(""), getTagSet("colleagues", "friends")), - new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), + new Tutor(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), new Module("cs2105"), new Year("3"), new StudentId("A0234127M"), new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), new Comment(""), getTagSet("neighbours")), - new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), + new Tutor(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), new Module("cs2100"), new Year("3"), new StudentId("A1674832L"), new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), new Comment(""), getTagSet("family")), - new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), + new Tutor(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), new Module("cs2103"), new Year("4"), new StudentId("A9876542R"), new Address("Blk 47 Tampines Street 20, #17-35"), new Comment(""), getTagSet("classmates")), - new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), + new Tutor(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), new Module("cs2102"), new Year("3"), new StudentId("A3498732U"), new Address("Blk 45 Aljunied Street 85, #11-31"), new Comment(""), getTagSet("colleagues")) }; } - public static ReadOnlyAddressBook getSampleAddressBook() { - AddressBook sampleAb = new AddressBook(); - for (Person samplePerson : getSamplePersons()) { - sampleAb.addPerson(samplePerson); + public static ReadOnlyTuthub getSampleTuthub() { + Tuthub sampleAb = new Tuthub(); + for (Tutor sampleTutor : getSampleTutors()) { + sampleAb.addTutor(sampleTutor); } return sampleAb; } diff --git a/src/main/java/seedu/address/storage/JsonAdaptedTag.java b/src/main/java/tuthub/storage/JsonAdaptedTag.java similarity index 89% rename from src/main/java/seedu/address/storage/JsonAdaptedTag.java rename to src/main/java/tuthub/storage/JsonAdaptedTag.java index 0df22bdb754..bb3875168b7 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedTag.java +++ b/src/main/java/tuthub/storage/JsonAdaptedTag.java @@ -1,10 +1,10 @@ -package seedu.address.storage; +package tuthub.storage; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.tag.Tag; +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.model.tag.Tag; /** * Jackson-friendly version of {@link Tag}. diff --git a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java b/src/main/java/tuthub/storage/JsonAdaptedTutor.java similarity index 76% rename from src/main/java/seedu/address/storage/JsonAdaptedPerson.java rename to src/main/java/tuthub/storage/JsonAdaptedTutor.java index c176bb00728..13c5b250a3c 100644 --- a/src/main/java/seedu/address/storage/JsonAdaptedPerson.java +++ b/src/main/java/tuthub/storage/JsonAdaptedTutor.java @@ -1,4 +1,4 @@ -package seedu.address.storage; +package tuthub.storage; import java.util.ArrayList; import java.util.HashSet; @@ -9,24 +9,24 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; /** - * Jackson-friendly version of {@link Person}. + * Jackson-friendly version of {@link Tutor}. */ -class JsonAdaptedPerson { +class JsonAdaptedTutor { - public static final String MISSING_FIELD_MESSAGE_FORMAT = "Person's %s field is missing!"; + public static final String MISSING_FIELD_MESSAGE_FORMAT = "Tutor's %s field is missing!"; private final String name; private final String phone; @@ -39,10 +39,10 @@ class JsonAdaptedPerson { private final List tagged = new ArrayList<>(); /** - * Constructs a {@code JsonAdaptedPerson} with the given person details. + * Constructs a {@code JsonAdaptedTutor} with the given tutor details. */ @JsonCreator - public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone") String phone, + public JsonAdaptedTutor(@JsonProperty("name") String name, @JsonProperty("phone") String phone, @JsonProperty("email") String email, @JsonProperty("module") String module, @JsonProperty("year") String year, @JsonProperty("studentId") String studentId, @JsonProperty("address") String address, @JsonProperty("comment") String comment, @@ -61,9 +61,9 @@ public JsonAdaptedPerson(@JsonProperty("name") String name, @JsonProperty("phone } /** - * Converts a given {@code Person} into this class for Jackson use. + * Converts a given {@code Tutor} into this class for Jackson use. */ - public JsonAdaptedPerson(Person source) { + public JsonAdaptedTutor(Tutor source) { name = source.getName().fullName; phone = source.getPhone().value; email = source.getEmail().value; @@ -78,14 +78,14 @@ public JsonAdaptedPerson(Person source) { } /** - * Converts this Jackson-friendly adapted person object into the model's {@code Person} object. + * Converts this Jackson-friendly adapted tutor object into the model's {@code Tutor} object. * - * @throws IllegalValueException if there were any data constraints violated in the adapted person. + * @throws IllegalValueException if there were any data constraints violated in the adapted tutor. */ - public Person toModelType() throws IllegalValueException { - final List personTags = new ArrayList<>(); + public Tutor toModelType() throws IllegalValueException { + final List tutorTags = new ArrayList<>(); for (JsonAdaptedTag tag : tagged) { - personTags.add(tag.toModelType()); + tutorTags.add(tag.toModelType()); } if (name == null) { @@ -150,9 +150,9 @@ public Person toModelType() throws IllegalValueException { } final Comment modelComment = new Comment(comment); - final Set modelTags = new HashSet<>(personTags); + final Set modelTags = new HashSet<>(tutorTags); - return new Person(modelName, modelPhone, modelEmail, modelModule, modelYear, + return new Tutor(modelName, modelPhone, modelEmail, modelModule, modelYear, modelStudentId, modelAddress, modelComment, modelTags); } diff --git a/src/main/java/tuthub/storage/JsonSerializableTuthub.java b/src/main/java/tuthub/storage/JsonSerializableTuthub.java new file mode 100644 index 00000000000..7e4a8d5a13f --- /dev/null +++ b/src/main/java/tuthub/storage/JsonSerializableTuthub.java @@ -0,0 +1,60 @@ +package tuthub.storage; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; + +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.model.Tuthub; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.tutor.Tutor; + +/** + * An Immutable Tuthub that is serializable to JSON format. + */ +@JsonRootName(value = "addressbook") +class JsonSerializableTuthub { + + public static final String MESSAGE_DUPLICATE_TUTOR = "Tutors list contains duplicate tutor(s)."; + + private final List tutors = new ArrayList<>(); + + /** + * Constructs a {@code JsonSerializableTuthub} with the given tutors. + */ + @JsonCreator + public JsonSerializableTuthub(@JsonProperty("tutors") List tutors) { + this.tutors.addAll(tutors); + } + + /** + * Converts a given {@code ReadOnlyTuthub} into this class for Jackson use. + * + * @param source future changes to this will not affect the created {@code JsonSerializableTuthub}. + */ + public JsonSerializableTuthub(ReadOnlyTuthub source) { + tutors.addAll(source.getTutorList().stream().map(JsonAdaptedTutor::new).collect(Collectors.toList())); + } + + /** + * Converts this address book into the model's {@code Tuthub} object. + * + * @throws IllegalValueException if there were any data constraints violated. + */ + public Tuthub toModelType() throws IllegalValueException { + Tuthub addressBook = new Tuthub(); + for (JsonAdaptedTutor jsonAdaptedTutor : tutors) { + Tutor tutor = jsonAdaptedTutor.toModelType(); + if (addressBook.hasTutor(tutor)) { + throw new IllegalValueException(MESSAGE_DUPLICATE_TUTOR); + } + addressBook.addTutor(tutor); + } + return addressBook; + } + +} diff --git a/src/main/java/tuthub/storage/JsonTuthubStorage.java b/src/main/java/tuthub/storage/JsonTuthubStorage.java new file mode 100644 index 00000000000..31745e05808 --- /dev/null +++ b/src/main/java/tuthub/storage/JsonTuthubStorage.java @@ -0,0 +1,80 @@ +package tuthub.storage; + +import static java.util.Objects.requireNonNull; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Optional; +import java.util.logging.Logger; + +import tuthub.commons.core.LogsCenter; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.commons.util.FileUtil; +import tuthub.commons.util.JsonUtil; +import tuthub.model.ReadOnlyTuthub; + +/** + * A class to access Tuthub data stored as a json file on the hard disk. + */ +public class JsonTuthubStorage implements TuthubStorage { + + private static final Logger logger = LogsCenter.getLogger(JsonTuthubStorage.class); + + private Path filePath; + + public JsonTuthubStorage(Path filePath) { + this.filePath = filePath; + } + + public Path getTuthubFilePath() { + return filePath; + } + + @Override + public Optional readTuthub() throws DataConversionException { + return readTuthub(filePath); + } + + /** + * Similar to {@link #readTuthub()}. + * + * @param filePath location of the data. Cannot be null. + * @throws DataConversionException if the file is not in the correct format. + */ + public Optional readTuthub(Path filePath) throws DataConversionException { + requireNonNull(filePath); + + Optional jsonTuthub = JsonUtil.readJsonFile( + filePath, JsonSerializableTuthub.class); + if (!jsonTuthub.isPresent()) { + return Optional.empty(); + } + + try { + return Optional.of(jsonTuthub.get().toModelType()); + } catch (IllegalValueException ive) { + logger.info("Illegal values found in " + filePath + ": " + ive.getMessage()); + throw new DataConversionException(ive); + } + } + + @Override + public void saveTuthub(ReadOnlyTuthub tuthub) throws IOException { + saveTuthub(tuthub, filePath); + } + + /** + * Similar to {@link #saveTuthub(ReadOnlyTuthub)}. + * + * @param filePath location of the data. Cannot be null. + */ + public void saveTuthub(ReadOnlyTuthub tuthub, Path filePath) throws IOException { + requireNonNull(tuthub); + requireNonNull(filePath); + + FileUtil.createIfMissing(filePath); + JsonUtil.saveJsonFile(new JsonSerializableTuthub(tuthub), filePath); + } + +} diff --git a/src/main/java/seedu/address/storage/JsonUserPrefsStorage.java b/src/main/java/tuthub/storage/JsonUserPrefsStorage.java similarity index 83% rename from src/main/java/seedu/address/storage/JsonUserPrefsStorage.java rename to src/main/java/tuthub/storage/JsonUserPrefsStorage.java index bc2bbad84aa..ed2e5cdcd2e 100644 --- a/src/main/java/seedu/address/storage/JsonUserPrefsStorage.java +++ b/src/main/java/tuthub/storage/JsonUserPrefsStorage.java @@ -1,13 +1,13 @@ -package seedu.address.storage; +package tuthub.storage; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.commons.util.JsonUtil; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.UserPrefs; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.commons.util.JsonUtil; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.UserPrefs; /** * A class to access UserPrefs stored in the hard disk as a json file diff --git a/src/main/java/tuthub/storage/Storage.java b/src/main/java/tuthub/storage/Storage.java new file mode 100644 index 00000000000..ae7094103a3 --- /dev/null +++ b/src/main/java/tuthub/storage/Storage.java @@ -0,0 +1,32 @@ +package tuthub.storage; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Optional; + +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.UserPrefs; + +/** + * API of the Storage component + */ +public interface Storage extends TuthubStorage, UserPrefsStorage { + + @Override + Optional readUserPrefs() throws DataConversionException, IOException; + + @Override + void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException; + + @Override + Path getTuthubFilePath(); + + @Override + Optional readTuthub() throws DataConversionException, IOException; + + @Override + void saveTuthub(ReadOnlyTuthub tuthub) throws IOException; + +} diff --git a/src/main/java/tuthub/storage/StorageManager.java b/src/main/java/tuthub/storage/StorageManager.java new file mode 100644 index 00000000000..81d4443ac26 --- /dev/null +++ b/src/main/java/tuthub/storage/StorageManager.java @@ -0,0 +1,78 @@ +package tuthub.storage; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Optional; +import java.util.logging.Logger; + +import tuthub.commons.core.LogsCenter; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.UserPrefs; + +/** + * Manages storage of Tuthub data in local storage. + */ +public class StorageManager implements Storage { + + private static final Logger logger = LogsCenter.getLogger(StorageManager.class); + private TuthubStorage tuthubStorage; + private UserPrefsStorage userPrefsStorage; + + /** + * Creates a {@code StorageManager} with the given {@code TuthubStorage} and {@code UserPrefStorage}. + */ + public StorageManager(TuthubStorage tuthubStorage, UserPrefsStorage userPrefsStorage) { + this.tuthubStorage = tuthubStorage; + this.userPrefsStorage = userPrefsStorage; + } + + // ================ UserPrefs methods ============================== + + @Override + public Path getUserPrefsFilePath() { + return userPrefsStorage.getUserPrefsFilePath(); + } + + @Override + public Optional readUserPrefs() throws DataConversionException, IOException { + return userPrefsStorage.readUserPrefs(); + } + + @Override + public void saveUserPrefs(ReadOnlyUserPrefs userPrefs) throws IOException { + userPrefsStorage.saveUserPrefs(userPrefs); + } + + + // ================ Tuthub methods ============================== + + @Override + public Path getTuthubFilePath() { + return tuthubStorage.getTuthubFilePath(); + } + + @Override + public Optional readTuthub() throws DataConversionException, IOException { + return readTuthub(tuthubStorage.getTuthubFilePath()); + } + + @Override + public Optional readTuthub(Path filePath) throws DataConversionException, IOException { + logger.fine("Attempting to read data from file: " + filePath); + return tuthubStorage.readTuthub(filePath); + } + + @Override + public void saveTuthub(ReadOnlyTuthub tuthub) throws IOException { + saveTuthub(tuthub, tuthubStorage.getTuthubFilePath()); + } + + @Override + public void saveTuthub(ReadOnlyTuthub tuthub, Path filePath) throws IOException { + logger.fine("Attempting to write to data file: " + filePath); + tuthubStorage.saveTuthub(tuthub, filePath); + } + +} diff --git a/src/main/java/tuthub/storage/TuthubStorage.java b/src/main/java/tuthub/storage/TuthubStorage.java new file mode 100644 index 00000000000..be4fa11ec5b --- /dev/null +++ b/src/main/java/tuthub/storage/TuthubStorage.java @@ -0,0 +1,45 @@ +package tuthub.storage; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Optional; + +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.ReadOnlyTuthub; + +/** + * Represents a storage for {@link tuthub.model.Tuthub}. + */ +public interface TuthubStorage { + + /** + * Returns the file path of the data file. + */ + Path getTuthubFilePath(); + + /** + * Returns Tuthub data as a {@link ReadOnlyTuthub}. + * Returns {@code Optional.empty()} if storage file is not found. + * @throws DataConversionException if the data in storage is not in the expected format. + * @throws IOException if there was any problem when reading from the storage. + */ + Optional readTuthub() throws DataConversionException, IOException; + + /** + * @see #getTuthubFilePath() + */ + Optional readTuthub(Path filePath) throws DataConversionException, IOException; + + /** + * Saves the given {@link ReadOnlyTuthub} to the storage. + * @param tuthub cannot be null. + * @throws IOException if there was any problem writing to the file. + */ + void saveTuthub(ReadOnlyTuthub tuthub) throws IOException; + + /** + * @see #saveTuthub(ReadOnlyTuthub) + */ + void saveTuthub(ReadOnlyTuthub tuthub, Path filePath) throws IOException; + +} diff --git a/src/main/java/seedu/address/storage/UserPrefsStorage.java b/src/main/java/tuthub/storage/UserPrefsStorage.java similarity index 71% rename from src/main/java/seedu/address/storage/UserPrefsStorage.java rename to src/main/java/tuthub/storage/UserPrefsStorage.java index 29eef178dbc..e1b7c9e8ff8 100644 --- a/src/main/java/seedu/address/storage/UserPrefsStorage.java +++ b/src/main/java/tuthub/storage/UserPrefsStorage.java @@ -1,15 +1,15 @@ -package seedu.address.storage; +package tuthub.storage; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.UserPrefs; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.UserPrefs; /** - * Represents a storage for {@link seedu.address.model.UserPrefs}. + * Represents a storage for {@link tuthub.model.UserPrefs}. */ public interface UserPrefsStorage { @@ -27,7 +27,7 @@ public interface UserPrefsStorage { Optional readUserPrefs() throws DataConversionException, IOException; /** - * Saves the given {@link seedu.address.model.ReadOnlyUserPrefs} to the storage. + * Saves the given {@link tuthub.model.ReadOnlyUserPrefs} to the storage. * @param userPrefs cannot be null. * @throws IOException if there was any problem writing to the file. */ diff --git a/src/main/java/seedu/address/ui/CommandBox.java b/src/main/java/tuthub/ui/CommandBox.java similarity index 89% rename from src/main/java/seedu/address/ui/CommandBox.java rename to src/main/java/tuthub/ui/CommandBox.java index 9e75478664b..15a5d76906a 100644 --- a/src/main/java/seedu/address/ui/CommandBox.java +++ b/src/main/java/tuthub/ui/CommandBox.java @@ -1,12 +1,12 @@ -package seedu.address.ui; +package tuthub.ui; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.TextField; import javafx.scene.layout.Region; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.logic.commands.CommandResult; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.logic.parser.exceptions.ParseException; /** * The UI component that is responsible for receiving user command inputs. @@ -77,7 +77,7 @@ public interface CommandExecutor { /** * Executes the command and returns the result. * - * @see seedu.address.logic.Logic#execute(String) + * @see tuthub.logic.Logic#execute(String) */ CommandResult execute(String commandText) throws CommandException, ParseException; } diff --git a/src/main/java/seedu/address/ui/HelpWindow.java b/src/main/java/tuthub/ui/HelpWindow.java similarity index 95% rename from src/main/java/seedu/address/ui/HelpWindow.java rename to src/main/java/tuthub/ui/HelpWindow.java index 2da3b1216b2..a22d81c2b17 100644 --- a/src/main/java/seedu/address/ui/HelpWindow.java +++ b/src/main/java/tuthub/ui/HelpWindow.java @@ -1,6 +1,6 @@ -package seedu.address.ui; +package tuthub.ui; -import static seedu.address.commons.util.AppUtil.getImage; +import static tuthub.commons.util.AppUtil.getImage; import java.util.logging.Logger; @@ -11,7 +11,7 @@ import javafx.scene.input.Clipboard; import javafx.scene.input.ClipboardContent; import javafx.stage.Stage; -import seedu.address.commons.core.LogsCenter; +import tuthub.commons.core.LogsCenter; /** * Controller for a help page diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/tuthub/ui/MainWindow.java similarity index 88% rename from src/main/java/seedu/address/ui/MainWindow.java rename to src/main/java/tuthub/ui/MainWindow.java index 9106c3aa6e5..e6f2bbfbe6b 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/tuthub/ui/MainWindow.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import java.util.logging.Logger; @@ -10,12 +10,12 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.StackPane; import javafx.stage.Stage; -import seedu.address.commons.core.GuiSettings; -import seedu.address.commons.core.LogsCenter; -import seedu.address.logic.Logic; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.commons.core.GuiSettings; +import tuthub.commons.core.LogsCenter; +import tuthub.logic.Logic; +import tuthub.logic.commands.CommandResult; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.logic.parser.exceptions.ParseException; /** * The Main Window. Provides the basic application layout containing @@ -31,7 +31,7 @@ public class MainWindow extends UiPart { private Logic logic; // Independent Ui parts residing in this Ui container - private PersonListPanel personListPanel; + private TutorListPanel tutorListPanel; private ResultDisplay resultDisplay; private HelpWindow helpWindow; @@ -42,7 +42,7 @@ public class MainWindow extends UiPart { private MenuItem helpMenuItem; @FXML - private StackPane personListPanelPlaceholder; + private StackPane tutorListPanelPlaceholder; @FXML private StackPane resultDisplayPlaceholder; @@ -110,13 +110,13 @@ private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) { * Fills up all the placeholders of this window. */ void fillInnerParts() { - personListPanel = new PersonListPanel(logic.getFilteredPersonList()); - personListPanelPlaceholder.getChildren().add(personListPanel.getRoot()); + tutorListPanel = new TutorListPanel(logic.getFilteredTutorList()); + tutorListPanelPlaceholder.getChildren().add(tutorListPanel.getRoot()); resultDisplay = new ResultDisplay(); resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot()); - StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getAddressBookFilePath()); + StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getTuthubFilePath()); statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot()); CommandBox commandBox = new CommandBox(this::executeCommand); @@ -163,14 +163,14 @@ private void handleExit() { primaryStage.hide(); } - public PersonListPanel getPersonListPanel() { - return personListPanel; + public TutorListPanel getTutorListPanel() { + return tutorListPanel; } /** * Executes the command and returns the result. * - * @see seedu.address.logic.Logic#execute(String) + * @see tuthub.logic.Logic#execute(String) */ private CommandResult executeCommand(String commandText) throws CommandException, ParseException { try { diff --git a/src/main/java/seedu/address/ui/ResultDisplay.java b/src/main/java/tuthub/ui/ResultDisplay.java similarity index 95% rename from src/main/java/seedu/address/ui/ResultDisplay.java rename to src/main/java/tuthub/ui/ResultDisplay.java index 7d98e84eedf..af0119caa1a 100644 --- a/src/main/java/seedu/address/ui/ResultDisplay.java +++ b/src/main/java/tuthub/ui/ResultDisplay.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import static java.util.Objects.requireNonNull; diff --git a/src/main/java/seedu/address/ui/StatusBarFooter.java b/src/main/java/tuthub/ui/StatusBarFooter.java similarity index 96% rename from src/main/java/seedu/address/ui/StatusBarFooter.java rename to src/main/java/tuthub/ui/StatusBarFooter.java index b577f829423..f406f5ad3be 100644 --- a/src/main/java/seedu/address/ui/StatusBarFooter.java +++ b/src/main/java/tuthub/ui/StatusBarFooter.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/tuthub/ui/TutorCard.java similarity index 57% rename from src/main/java/seedu/address/ui/PersonCard.java rename to src/main/java/tuthub/ui/TutorCard.java index ab62089ff88..cef8db4cbe7 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/tuthub/ui/TutorCard.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import java.util.Comparator; @@ -7,24 +7,24 @@ import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; -import seedu.address.model.person.Person; +import tuthub.model.tutor.Tutor; /** - * An UI component that displays information of a {@code Person}. + * An UI component that displays information of a {@code Tutor}. */ -public class PersonCard extends UiPart { +public class TutorCard extends UiPart { - private static final String FXML = "PersonListCard.fxml"; + private static final String FXML = "TutorListCard.fxml"; /** * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. * As a consequence, UI elements' variable names cannot be set to such keywords * or an exception will be thrown by JavaFX during runtime. * - * @see The issue on AddressBook level 4 + * @see The issue on Tuthub level 4 */ - public final Person person; + public final Tutor tutor; @FXML private HBox cardPane; @@ -44,18 +44,18 @@ public class PersonCard extends UiPart { private FlowPane tags; /** - * Creates a {@code PersonCode} with the given {@code Person} and index to display. + * Creates a {@code TutorCode} with the given {@code Tutor} and index to display. */ - public PersonCard(Person person, int displayedIndex) { + public TutorCard(Tutor tutor, int displayedIndex) { super(FXML); - this.person = person; + this.tutor = tutor; id.setText(displayedIndex + ". "); - name.setText(person.getName().fullName); - phone.setText(person.getPhone().value); - address.setText(person.getAddress().value); - email.setText(person.getEmail().value); - comment.setText(person.getComment().value); - person.getTags().stream() + name.setText(tutor.getName().fullName); + phone.setText(tutor.getPhone().value); + address.setText(tutor.getAddress().value); + email.setText(tutor.getEmail().value); + comment.setText(tutor.getComment().value); + tutor.getTags().stream() .sorted(Comparator.comparing(tag -> tag.tagName)) .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); } @@ -68,13 +68,13 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof PersonCard)) { + if (!(other instanceof TutorCard)) { return false; } // state check - PersonCard card = (PersonCard) other; + TutorCard card = (TutorCard) other; return id.getText().equals(card.id.getText()) - && person.equals(card.person); + && tutor.equals(card.tutor); } } diff --git a/src/main/java/tuthub/ui/TutorListPanel.java b/src/main/java/tuthub/ui/TutorListPanel.java new file mode 100644 index 00000000000..925e15f6b1c --- /dev/null +++ b/src/main/java/tuthub/ui/TutorListPanel.java @@ -0,0 +1,49 @@ +package tuthub.ui; + +import java.util.logging.Logger; + +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.layout.Region; +import tuthub.commons.core.LogsCenter; +import tuthub.model.tutor.Tutor; + +/** + * Panel containing the list of tutors. + */ +public class TutorListPanel extends UiPart { + private static final String FXML = "TutorListPanel.fxml"; + private final Logger logger = LogsCenter.getLogger(TutorListPanel.class); + + @FXML + private ListView tutorListView; + + /** + * Creates a {@code TutorListPanel} with the given {@code ObservableList}. + */ + public TutorListPanel(ObservableList tutorList) { + super(FXML); + tutorListView.setItems(tutorList); + tutorListView.setCellFactory(listView -> new TutorListViewCell()); + } + + /** + * Custom {@code ListCell} that displays the graphics of a {@code Tutor} using a {@code TutorCard}. + */ + class TutorListViewCell extends ListCell { + @Override + protected void updateItem(Tutor tutor, boolean empty) { + super.updateItem(tutor, empty); + + if (empty || tutor == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(new TutorCard(tutor, getIndex() + 1).getRoot()); + } + } + } + +} diff --git a/src/main/java/seedu/address/ui/Ui.java b/src/main/java/tuthub/ui/Ui.java similarity index 86% rename from src/main/java/seedu/address/ui/Ui.java rename to src/main/java/tuthub/ui/Ui.java index 17aa0b494fe..ede039ca64c 100644 --- a/src/main/java/seedu/address/ui/Ui.java +++ b/src/main/java/tuthub/ui/Ui.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import javafx.stage.Stage; diff --git a/src/main/java/seedu/address/ui/UiManager.java b/src/main/java/tuthub/ui/UiManager.java similarity index 91% rename from src/main/java/seedu/address/ui/UiManager.java rename to src/main/java/tuthub/ui/UiManager.java index fdf024138bc..087bacdda0b 100644 --- a/src/main/java/seedu/address/ui/UiManager.java +++ b/src/main/java/tuthub/ui/UiManager.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import java.util.logging.Logger; @@ -7,10 +7,10 @@ import javafx.scene.control.Alert.AlertType; import javafx.scene.image.Image; import javafx.stage.Stage; -import seedu.address.MainApp; -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.util.StringUtil; -import seedu.address.logic.Logic; +import tuthub.MainApp; +import tuthub.commons.core.LogsCenter; +import tuthub.commons.util.StringUtil; +import tuthub.logic.Logic; /** * The manager of the UI component. @@ -20,7 +20,7 @@ public class UiManager implements Ui { public static final String ALERT_DIALOG_PANE_FIELD_ID = "alertDialogPane"; private static final Logger logger = LogsCenter.getLogger(UiManager.class); - private static final String ICON_APPLICATION = "/images/address_book_32.png"; + private static final String ICON_APPLICATION = "/images/tuthub_32.png"; private Logic logic; private MainWindow mainWindow; diff --git a/src/main/java/seedu/address/ui/UiPart.java b/src/main/java/tuthub/ui/UiPart.java similarity index 97% rename from src/main/java/seedu/address/ui/UiPart.java rename to src/main/java/tuthub/ui/UiPart.java index fc820e01a9c..2569ed36900 100644 --- a/src/main/java/seedu/address/ui/UiPart.java +++ b/src/main/java/tuthub/ui/UiPart.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import static java.util.Objects.requireNonNull; @@ -6,7 +6,7 @@ import java.net.URL; import javafx.fxml.FXMLLoader; -import seedu.address.MainApp; +import tuthub.MainApp; /** * Represents a distinct part of the UI. e.g. Windows, dialogs, panels, status bars, etc. diff --git a/src/main/resources/images/address_book_32.png b/src/main/resources/images/tuthub_32.png similarity index 100% rename from src/main/resources/images/address_book_32.png rename to src/main/resources/images/tuthub_32.png diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 36e6b001cd8..593f2d1e923 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -328,7 +328,7 @@ -fx-text-fill: white; } -#filterField, #personListPanel, #personWebpage { +#filterField, #tutorListPanel, #tutorWebpage { -fx-effect: innershadow(gaussian, black, 10, 0, 0, 0); } diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index a431648f6c0..a9a1393315d 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -12,9 +12,9 @@ + title="Tuthub App" minWidth="450" minHeight="600" onCloseRequest="#handleExit"> - + @@ -46,11 +46,11 @@ - + - + diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/TutorListCard.fxml similarity index 100% rename from src/main/resources/view/PersonListCard.fxml rename to src/main/resources/view/TutorListCard.fxml diff --git a/src/main/resources/view/PersonListPanel.fxml b/src/main/resources/view/TutorListPanel.fxml similarity index 77% rename from src/main/resources/view/PersonListPanel.fxml rename to src/main/resources/view/TutorListPanel.fxml index 8836d323cc5..d2780074091 100644 --- a/src/main/resources/view/PersonListPanel.fxml +++ b/src/main/resources/view/TutorListPanel.fxml @@ -4,5 +4,5 @@ - + diff --git a/src/test/data/JsonAddressBookStorageTest/invalidAndValidPersonAddressBook.json b/src/test/data/JsonTuthubStorageTest/invalidAndValidTutorTuthub.json similarity index 73% rename from src/test/data/JsonAddressBookStorageTest/invalidAndValidPersonAddressBook.json rename to src/test/data/JsonTuthubStorageTest/invalidAndValidTutorTuthub.json index 6a4d2b7181c..716e8784aaf 100644 --- a/src/test/data/JsonAddressBookStorageTest/invalidAndValidPersonAddressBook.json +++ b/src/test/data/JsonTuthubStorageTest/invalidAndValidTutorTuthub.json @@ -1,11 +1,11 @@ { "persons": [ { - "name": "Valid Person", + "name": "Valid Tutor", "phone": "9482424", "email": "hans@example.com", "address": "4th street" }, { - "name": "Person With Invalid Phone Field", + "name": "Tutor With Invalid Phone Field", "phone": "948asdf2424", "email": "hans@example.com", "address": "4th street" diff --git a/src/test/data/JsonAddressBookStorageTest/invalidPersonAddressBook.json b/src/test/data/JsonTuthubStorageTest/invalidTutorTuthub.json similarity index 64% rename from src/test/data/JsonAddressBookStorageTest/invalidPersonAddressBook.json rename to src/test/data/JsonTuthubStorageTest/invalidTutorTuthub.json index ccd21f7d1a9..509845975d3 100644 --- a/src/test/data/JsonAddressBookStorageTest/invalidPersonAddressBook.json +++ b/src/test/data/JsonTuthubStorageTest/invalidTutorTuthub.json @@ -1,6 +1,6 @@ { "persons": [ { - "name": "Person with invalid name field: Ha!ns Mu@ster", + "name": "Tuthub with invalid name field: Ha!ns Mu@ster", "phone": "9482424", "email": "hans@example.com", "address": "4th street" diff --git a/src/test/data/JsonAddressBookStorageTest/notJsonFormatAddressBook.json b/src/test/data/JsonTuthubStorageTest/notJsonFormatTuthub.json similarity index 100% rename from src/test/data/JsonAddressBookStorageTest/notJsonFormatAddressBook.json rename to src/test/data/JsonTuthubStorageTest/notJsonFormatTuthub.json diff --git a/src/test/data/JsonUserPrefsStorageTest/ExtraValuesUserPref.json b/src/test/data/JsonUserPrefsStorageTest/ExtraValuesUserPref.json index 1037548a9cd..f9b84e9b4bc 100644 --- a/src/test/data/JsonUserPrefsStorageTest/ExtraValuesUserPref.json +++ b/src/test/data/JsonUserPrefsStorageTest/ExtraValuesUserPref.json @@ -9,5 +9,5 @@ "z" : 99 } }, - "addressBookFilePath" : "addressbook.json" + "tuthubFilePath" : "tuthub.json" } diff --git a/src/test/data/JsonUserPrefsStorageTest/TypicalUserPref.json b/src/test/data/JsonUserPrefsStorageTest/TypicalUserPref.json index b819bed900a..1808f1c5886 100644 --- a/src/test/data/JsonUserPrefsStorageTest/TypicalUserPref.json +++ b/src/test/data/JsonUserPrefsStorageTest/TypicalUserPref.json @@ -7,5 +7,5 @@ "y" : 100 } }, - "addressBookFilePath" : "addressbook.json" + "tuthubFilePath" : "tuthub.json" } diff --git a/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java deleted file mode 100644 index cb8714bb055..00000000000 --- a/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package seedu.address.logic.commands; - -import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.Person; -import seedu.address.testutil.PersonBuilder; - -/** - * Contains integration tests (interaction with the Model) for {@code AddCommand}. - */ -public class AddCommandIntegrationTest { - - private Model model; - - @BeforeEach - public void setUp() { - model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - } - - @Test - public void execute_newPerson_success() { - Person validPerson = new PersonBuilder().build(); - - Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.addPerson(validPerson); - - assertCommandSuccess(new AddCommand(validPerson), model, - String.format(AddCommand.MESSAGE_SUCCESS, validPerson), expectedModel); - } - - @Test - public void execute_duplicatePerson_throwsCommandException() { - Person personInList = model.getAddressBook().getPersonList().get(0); - assertCommandFailure(new AddCommand(personInList), model, AddCommand.MESSAGE_DUPLICATE_PERSON); - } - -} diff --git a/src/test/java/seedu/address/logic/commands/AddCommentUnfilteredList.java b/src/test/java/seedu/address/logic/commands/AddCommentUnfilteredList.java deleted file mode 100644 index a90473176bb..00000000000 --- a/src/test/java/seedu/address/logic/commands/AddCommentUnfilteredList.java +++ /dev/null @@ -1,44 +0,0 @@ -package seedu.address.logic.commands; - -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import org.junit.jupiter.api.Test; - -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Person; -import seedu.address.testutil.PersonBuilder; - -/** - * Contains integration tests (interaction with the Model) and unit tests for CommentCommand. - */ -public class AddCommentUnfilteredList { - - private static final String COMMENT_STUB = "Some comment"; - - private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - - /** - * Test for comment - */ - @Test - public void execute_addCommentUnfilteredList_success() { - Person firstPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - Person editedPerson = new PersonBuilder(firstPerson).withComment(COMMENT_STUB).build(); - - CommentCommand commentCommand = new CommentCommand(INDEX_FIRST_PERSON, - new Comment(editedPerson.getComment().value)); - - String expectedMessage = String.format(CommentCommand.MESSAGE_ADD_COMMENT_SUCCESS, editedPerson); - - Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(firstPerson, editedPerson); - - assertCommandSuccess(commentCommand, model, expectedMessage, expectedModel); - } -} diff --git a/src/test/java/seedu/address/logic/commands/ClearCommandTest.java b/src/test/java/seedu/address/logic/commands/ClearCommandTest.java deleted file mode 100644 index 80d9110c03a..00000000000 --- a/src/test/java/seedu/address/logic/commands/ClearCommandTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package seedu.address.logic.commands; - -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import org.junit.jupiter.api.Test; - -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; - -public class ClearCommandTest { - - @Test - public void execute_emptyAddressBook_success() { - Model model = new ModelManager(); - Model expectedModel = new ModelManager(); - - assertCommandSuccess(new ClearCommand(), model, ClearCommand.MESSAGE_SUCCESS, expectedModel); - } - - @Test - public void execute_nonEmptyAddressBook_success() { - Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - Model expectedModel = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - expectedModel.setAddressBook(new AddressBook()); - - assertCommandSuccess(new ClearCommand(), model, ClearCommand.MESSAGE_SUCCESS, expectedModel); - } - -} diff --git a/src/test/java/seedu/address/logic/commands/EditCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCommandTest.java deleted file mode 100644 index 214c6c2507b..00000000000 --- a/src/test/java/seedu/address/logic/commands/EditCommandTest.java +++ /dev/null @@ -1,173 +0,0 @@ -package seedu.address.logic.commands; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import org.junit.jupiter.api.Test; - -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.Person; -import seedu.address.testutil.EditPersonDescriptorBuilder; -import seedu.address.testutil.PersonBuilder; - -/** - * Contains integration tests (interaction with the Model) and unit tests for EditCommand. - */ -public class EditCommandTest { - - private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - - @Test - public void execute_allFieldsSpecifiedUnfilteredList_success() { - Person editedPerson = new PersonBuilder().build(); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(editedPerson).build(); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); - - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, editedPerson); - - Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson); - - assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); - } - - @Test - public void execute_someFieldsSpecifiedUnfilteredList_success() { - Index indexLastPerson = Index.fromOneBased(model.getFilteredPersonList().size()); - Person lastPerson = model.getFilteredPersonList().get(indexLastPerson.getZeroBased()); - - PersonBuilder personInList = new PersonBuilder(lastPerson); - Person editedPerson = personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) - .withTags(VALID_TAG_HUSBAND).build(); - - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB) - .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build(); - EditCommand editCommand = new EditCommand(indexLastPerson, descriptor); - - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, editedPerson); - - Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(lastPerson, editedPerson); - - assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); - } - - @Test - public void execute_noFieldSpecifiedUnfilteredList_success() { - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor()); - Person editedPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, editedPerson); - - Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - - assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); - } - - @Test - public void execute_filteredList_success() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); - - Person personInFilteredList = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - Person editedPerson = new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build(); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, - new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build()); - - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, editedPerson); - - Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson); - - assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); - } - - @Test - public void execute_duplicatePersonUnfilteredList_failure() { - Person firstPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(firstPerson).build(); - EditCommand editCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); - - assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); - } - - @Test - public void execute_duplicatePersonFilteredList_failure() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); - - // edit person in filtered list into a duplicate in address book - Person personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, - new EditPersonDescriptorBuilder(personInList).build()); - - assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); - } - - @Test - public void execute_invalidPersonIndexUnfilteredList_failure() { - Index outOfBoundIndex = Index.fromOneBased(model.getFilteredPersonList().size() + 1); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build(); - EditCommand editCommand = new EditCommand(outOfBoundIndex, descriptor); - - assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); - } - - /** - * Edit filtered list where index is larger than size of filtered list, - * but smaller than size of address book - */ - @Test - public void execute_invalidPersonIndexFilteredList_failure() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); - Index outOfBoundIndex = INDEX_SECOND_PERSON; - // ensures that outOfBoundIndex is still in bounds of address book list - assertTrue(outOfBoundIndex.getZeroBased() < model.getAddressBook().getPersonList().size()); - - EditCommand editCommand = new EditCommand(outOfBoundIndex, - new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build()); - - assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); - } - - @Test - public void equals() { - final EditCommand standardCommand = new EditCommand(INDEX_FIRST_PERSON, DESC_AMY); - - // same values -> returns true - EditPersonDescriptor copyDescriptor = new EditPersonDescriptor(DESC_AMY); - EditCommand commandWithSameValues = new EditCommand(INDEX_FIRST_PERSON, copyDescriptor); - assertTrue(standardCommand.equals(commandWithSameValues)); - - // same object -> returns true - assertTrue(standardCommand.equals(standardCommand)); - - // null -> returns false - assertFalse(standardCommand.equals(null)); - - // different types -> returns false - assertFalse(standardCommand.equals(new ClearCommand())); - - // different index -> returns false - assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY))); - - // different descriptor -> returns false - assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB))); - } - -} diff --git a/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java b/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java deleted file mode 100644 index 83d3550fef9..00000000000 --- a/src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package seedu.address.logic.commands; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; - -import org.junit.jupiter.api.Test; - -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.testutil.EditPersonDescriptorBuilder; - -public class EditPersonDescriptorTest { - - @Test - public void equals() { - // same values -> returns true - EditPersonDescriptor descriptorWithSameValues = new EditPersonDescriptor(DESC_AMY); - assertTrue(DESC_AMY.equals(descriptorWithSameValues)); - - // same object -> returns true - assertTrue(DESC_AMY.equals(DESC_AMY)); - - // null -> returns false - assertFalse(DESC_AMY.equals(null)); - - // different types -> returns false - assertFalse(DESC_AMY.equals(5)); - - // different values -> returns false - assertFalse(DESC_AMY.equals(DESC_BOB)); - - // different name -> returns false - EditPersonDescriptor editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different phone -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different email -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different module -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withModule(VALID_MODULE_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different year -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withYear(VALID_YEAR_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different address -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - - // different tags -> returns false - editedAmy = new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build(); - assertFalse(DESC_AMY.equals(editedAmy)); - } -} diff --git a/src/test/java/seedu/address/model/AddressBookTest.java b/src/test/java/seedu/address/model/AddressBookTest.java deleted file mode 100644 index 87782528ecd..00000000000 --- a/src/test/java/seedu/address/model/AddressBookTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package seedu.address.model; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.junit.jupiter.api.Test; - -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import seedu.address.model.person.Person; -import seedu.address.model.person.exceptions.DuplicatePersonException; -import seedu.address.testutil.PersonBuilder; - -public class AddressBookTest { - - private final AddressBook addressBook = new AddressBook(); - - @Test - public void constructor() { - assertEquals(Collections.emptyList(), addressBook.getPersonList()); - } - - @Test - public void resetData_null_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> addressBook.resetData(null)); - } - - @Test - public void resetData_withValidReadOnlyAddressBook_replacesData() { - AddressBook newData = getTypicalAddressBook(); - addressBook.resetData(newData); - assertEquals(newData, addressBook); - } - - @Test - public void resetData_withDuplicatePersons_throwsDuplicatePersonException() { - // Two persons with the same identity fields - Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) - .build(); - List newPersons = Arrays.asList(ALICE, editedAlice); - AddressBookStub newData = new AddressBookStub(newPersons); - - assertThrows(DuplicatePersonException.class, () -> addressBook.resetData(newData)); - } - - @Test - public void hasPerson_nullPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> addressBook.hasPerson(null)); - } - - @Test - public void hasPerson_personNotInAddressBook_returnsFalse() { - assertFalse(addressBook.hasPerson(ALICE)); - } - - @Test - public void hasPerson_personInAddressBook_returnsTrue() { - addressBook.addPerson(ALICE); - assertTrue(addressBook.hasPerson(ALICE)); - } - - @Test - public void hasPerson_personWithSameIdentityFieldsInAddressBook_returnsTrue() { - addressBook.addPerson(ALICE); - Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) - .build(); - assertTrue(addressBook.hasPerson(editedAlice)); - } - - @Test - public void getPersonList_modifyList_throwsUnsupportedOperationException() { - assertThrows(UnsupportedOperationException.class, () -> addressBook.getPersonList().remove(0)); - } - - /** - * A stub ReadOnlyAddressBook whose persons list can violate interface constraints. - */ - private static class AddressBookStub implements ReadOnlyAddressBook { - private final ObservableList persons = FXCollections.observableArrayList(); - - AddressBookStub(Collection persons) { - this.persons.setAll(persons); - } - - @Override - public ObservableList getPersonList() { - return persons; - } - } - -} diff --git a/src/test/java/seedu/address/model/person/PersonTest.java b/src/test/java/seedu/address/model/person/PersonTest.java deleted file mode 100644 index b29c097cfd4..00000000000 --- a/src/test/java/seedu/address/model/person/PersonTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package seedu.address.model.person; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.testutil.TypicalPersons.BOB; - -import org.junit.jupiter.api.Test; - -import seedu.address.testutil.PersonBuilder; - -public class PersonTest { - - @Test - public void asObservableList_modifyList_throwsUnsupportedOperationException() { - Person person = new PersonBuilder().build(); - assertThrows(UnsupportedOperationException.class, () -> person.getTags().remove(0)); - } - - @Test - public void isSamePerson() { - // same object -> returns true - assertTrue(ALICE.isSamePerson(ALICE)); - - // null -> returns false - assertFalse(ALICE.isSamePerson(null)); - - // same name, all other attributes different -> returns true - Person editedAlice = new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) - .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build(); - assertTrue(ALICE.isSamePerson(editedAlice)); - - // different name, all other attributes same -> returns false - editedAlice = new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build(); - assertFalse(ALICE.isSamePerson(editedAlice)); - - // name differs in case, all other attributes same -> returns false - Person editedBob = new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build(); - assertFalse(BOB.isSamePerson(editedBob)); - - // name has trailing spaces, all other attributes same -> returns false - String nameWithTrailingSpaces = VALID_NAME_BOB + " "; - editedBob = new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build(); - assertFalse(BOB.isSamePerson(editedBob)); - } - - @Test - public void equals() { - // same values -> returns true - Person aliceCopy = new PersonBuilder(ALICE).build(); - assertTrue(ALICE.equals(aliceCopy)); - - // same object -> returns true - assertTrue(ALICE.equals(ALICE)); - - // null -> returns false - assertFalse(ALICE.equals(null)); - - // different type -> returns false - assertFalse(ALICE.equals(5)); - - // different person -> returns false - assertFalse(ALICE.equals(BOB)); - - // different name -> returns false - Person editedAlice = new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build(); - assertFalse(ALICE.equals(editedAlice)); - - // different phone -> returns false - editedAlice = new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build(); - assertFalse(ALICE.equals(editedAlice)); - - // different email -> returns false - editedAlice = new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build(); - assertFalse(ALICE.equals(editedAlice)); - - // different address -> returns false - editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build(); - assertFalse(ALICE.equals(editedAlice)); - - // different tags -> returns false - editedAlice = new PersonBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build(); - assertFalse(ALICE.equals(editedAlice)); - } -} diff --git a/src/test/java/seedu/address/model/person/UniquePersonListTest.java b/src/test/java/seedu/address/model/person/UniquePersonListTest.java deleted file mode 100644 index 1cc5fe9e0fe..00000000000 --- a/src/test/java/seedu/address/model/person/UniquePersonListTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package seedu.address.model.person; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.testutil.TypicalPersons.BOB; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.junit.jupiter.api.Test; - -import seedu.address.model.person.exceptions.DuplicatePersonException; -import seedu.address.model.person.exceptions.PersonNotFoundException; -import seedu.address.testutil.PersonBuilder; - -public class UniquePersonListTest { - - private final UniquePersonList uniquePersonList = new UniquePersonList(); - - @Test - public void contains_nullPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.contains(null)); - } - - @Test - public void contains_personNotInList_returnsFalse() { - assertFalse(uniquePersonList.contains(ALICE)); - } - - @Test - public void contains_personInList_returnsTrue() { - uniquePersonList.add(ALICE); - assertTrue(uniquePersonList.contains(ALICE)); - } - - @Test - public void contains_personWithSameIdentityFieldsInList_returnsTrue() { - uniquePersonList.add(ALICE); - Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) - .build(); - assertTrue(uniquePersonList.contains(editedAlice)); - } - - @Test - public void add_nullPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.add(null)); - } - - @Test - public void add_duplicatePerson_throwsDuplicatePersonException() { - uniquePersonList.add(ALICE); - assertThrows(DuplicatePersonException.class, () -> uniquePersonList.add(ALICE)); - } - - @Test - public void setPerson_nullTargetPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.setPerson(null, ALICE)); - } - - @Test - public void setPerson_nullEditedPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.setPerson(ALICE, null)); - } - - @Test - public void setPerson_targetPersonNotInList_throwsPersonNotFoundException() { - assertThrows(PersonNotFoundException.class, () -> uniquePersonList.setPerson(ALICE, ALICE)); - } - - @Test - public void setPerson_editedPersonIsSamePerson_success() { - uniquePersonList.add(ALICE); - uniquePersonList.setPerson(ALICE, ALICE); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - expectedUniquePersonList.add(ALICE); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPerson_editedPersonHasSameIdentity_success() { - uniquePersonList.add(ALICE); - Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) - .build(); - uniquePersonList.setPerson(ALICE, editedAlice); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - expectedUniquePersonList.add(editedAlice); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPerson_editedPersonHasDifferentIdentity_success() { - uniquePersonList.add(ALICE); - uniquePersonList.setPerson(ALICE, BOB); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - expectedUniquePersonList.add(BOB); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPerson_editedPersonHasNonUniqueIdentity_throwsDuplicatePersonException() { - uniquePersonList.add(ALICE); - uniquePersonList.add(BOB); - assertThrows(DuplicatePersonException.class, () -> uniquePersonList.setPerson(ALICE, BOB)); - } - - @Test - public void remove_nullPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.remove(null)); - } - - @Test - public void remove_personDoesNotExist_throwsPersonNotFoundException() { - assertThrows(PersonNotFoundException.class, () -> uniquePersonList.remove(ALICE)); - } - - @Test - public void remove_existingPerson_removesPerson() { - uniquePersonList.add(ALICE); - uniquePersonList.remove(ALICE); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPersons_nullUniquePersonList_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.setPersons((UniquePersonList) null)); - } - - @Test - public void setPersons_uniquePersonList_replacesOwnListWithProvidedUniquePersonList() { - uniquePersonList.add(ALICE); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - expectedUniquePersonList.add(BOB); - uniquePersonList.setPersons(expectedUniquePersonList); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPersons_nullList_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> uniquePersonList.setPersons((List) null)); - } - - @Test - public void setPersons_list_replacesOwnListWithProvidedList() { - uniquePersonList.add(ALICE); - List personList = Collections.singletonList(BOB); - uniquePersonList.setPersons(personList); - UniquePersonList expectedUniquePersonList = new UniquePersonList(); - expectedUniquePersonList.add(BOB); - assertEquals(expectedUniquePersonList, uniquePersonList); - } - - @Test - public void setPersons_listWithDuplicatePersons_throwsDuplicatePersonException() { - List listWithDuplicatePersons = Arrays.asList(ALICE, ALICE); - assertThrows(DuplicatePersonException.class, () -> uniquePersonList.setPersons(listWithDuplicatePersons)); - } - - @Test - public void asUnmodifiableObservableList_modifyList_throwsUnsupportedOperationException() { - assertThrows(UnsupportedOperationException.class, () - -> uniquePersonList.asUnmodifiableObservableList().remove(0)); - } -} diff --git a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java b/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java deleted file mode 100644 index ac3c3af9566..00000000000 --- a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package seedu.address.storage; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.testutil.TypicalPersons.HOON; -import static seedu.address.testutil.TypicalPersons.IDA; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.AddressBook; -import seedu.address.model.ReadOnlyAddressBook; - -public class JsonAddressBookStorageTest { - private static final Path TEST_DATA_FOLDER = Paths.get("src", "test", "data", "JsonAddressBookStorageTest"); - - @TempDir - public Path testFolder; - - @Test - public void readAddressBook_nullFilePath_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> readAddressBook(null)); - } - - private java.util.Optional readAddressBook(String filePath) throws Exception { - return new JsonAddressBookStorage(Paths.get(filePath)).readAddressBook(addToTestDataPathIfNotNull(filePath)); - } - - private Path addToTestDataPathIfNotNull(String prefsFileInTestDataFolder) { - return prefsFileInTestDataFolder != null - ? TEST_DATA_FOLDER.resolve(prefsFileInTestDataFolder) - : null; - } - - @Test - public void read_missingFile_emptyResult() throws Exception { - assertFalse(readAddressBook("NonExistentFile.json").isPresent()); - } - - @Test - public void read_notJsonFormat_exceptionThrown() { - assertThrows(DataConversionException.class, () -> readAddressBook("notJsonFormatAddressBook.json")); - } - - @Test - public void readAddressBook_invalidPersonAddressBook_throwDataConversionException() { - assertThrows(DataConversionException.class, () -> readAddressBook("invalidPersonAddressBook.json")); - } - - @Test - public void readAddressBook_invalidAndValidPersonAddressBook_throwDataConversionException() { - assertThrows(DataConversionException.class, () -> readAddressBook("invalidAndValidPersonAddressBook.json")); - } - - @Test - public void readAndSaveAddressBook_allInOrder_success() throws Exception { - Path filePath = testFolder.resolve("TempAddressBook.json"); - AddressBook original = getTypicalAddressBook(); - JsonAddressBookStorage jsonAddressBookStorage = new JsonAddressBookStorage(filePath); - - // Save in new file and read back - jsonAddressBookStorage.saveAddressBook(original, filePath); - ReadOnlyAddressBook readBack = jsonAddressBookStorage.readAddressBook(filePath).get(); - assertEquals(original, new AddressBook(readBack)); - - // Modify data, overwrite exiting file, and read back - original.addPerson(HOON); - original.removePerson(ALICE); - jsonAddressBookStorage.saveAddressBook(original, filePath); - readBack = jsonAddressBookStorage.readAddressBook(filePath).get(); - assertEquals(original, new AddressBook(readBack)); - - // Save and read without specifying file path - original.addPerson(IDA); - jsonAddressBookStorage.saveAddressBook(original); // file path not specified - readBack = jsonAddressBookStorage.readAddressBook().get(); // file path not specified - assertEquals(original, new AddressBook(readBack)); - - } - - @Test - public void saveAddressBook_nullAddressBook_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> saveAddressBook(null, "SomeFile.json")); - } - - /** - * Saves {@code addressBook} at the specified {@code filePath}. - */ - private void saveAddressBook(ReadOnlyAddressBook addressBook, String filePath) { - try { - new JsonAddressBookStorage(Paths.get(filePath)) - .saveAddressBook(addressBook, addToTestDataPathIfNotNull(filePath)); - } catch (IOException ioe) { - throw new AssertionError("There should not be an error writing to the file.", ioe); - } - } - - @Test - public void saveAddressBook_nullFilePath_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> saveAddressBook(new AddressBook(), null)); - } -} diff --git a/src/test/java/seedu/address/storage/JsonSerializableAddressBookTest.java b/src/test/java/seedu/address/storage/JsonSerializableAddressBookTest.java deleted file mode 100644 index 188c9058d20..00000000000 --- a/src/test/java/seedu/address/storage/JsonSerializableAddressBookTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package seedu.address.storage; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static seedu.address.testutil.Assert.assertThrows; - -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.junit.jupiter.api.Test; - -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.commons.util.JsonUtil; -import seedu.address.model.AddressBook; -import seedu.address.testutil.TypicalPersons; - -public class JsonSerializableAddressBookTest { - - private static final Path TEST_DATA_FOLDER = Paths.get("src", "test", "data", "JsonSerializableAddressBookTest"); - private static final Path TYPICAL_PERSONS_FILE = TEST_DATA_FOLDER.resolve("typicalPersonsAddressBook.json"); - private static final Path INVALID_PERSON_FILE = TEST_DATA_FOLDER.resolve("invalidPersonAddressBook.json"); - private static final Path DUPLICATE_PERSON_FILE = TEST_DATA_FOLDER.resolve("duplicatePersonAddressBook.json"); - - @Test - public void toModelType_typicalPersonsFile_success() throws Exception { - JsonSerializableAddressBook dataFromFile = JsonUtil.readJsonFile(TYPICAL_PERSONS_FILE, - JsonSerializableAddressBook.class).get(); - AddressBook addressBookFromFile = dataFromFile.toModelType(); - AddressBook typicalPersonsAddressBook = TypicalPersons.getTypicalAddressBook(); - assertEquals(addressBookFromFile, typicalPersonsAddressBook); - } - - @Test - public void toModelType_invalidPersonFile_throwsIllegalValueException() throws Exception { - JsonSerializableAddressBook dataFromFile = JsonUtil.readJsonFile(INVALID_PERSON_FILE, - JsonSerializableAddressBook.class).get(); - assertThrows(IllegalValueException.class, dataFromFile::toModelType); - } - - @Test - public void toModelType_duplicatePersons_throwsIllegalValueException() throws Exception { - JsonSerializableAddressBook dataFromFile = JsonUtil.readJsonFile(DUPLICATE_PERSON_FILE, - JsonSerializableAddressBook.class).get(); - assertThrows(IllegalValueException.class, JsonSerializableAddressBook.MESSAGE_DUPLICATE_PERSON, - dataFromFile::toModelType); - } - -} diff --git a/src/test/java/seedu/address/testutil/AddressBookBuilder.java b/src/test/java/seedu/address/testutil/AddressBookBuilder.java deleted file mode 100644 index d53799fd110..00000000000 --- a/src/test/java/seedu/address/testutil/AddressBookBuilder.java +++ /dev/null @@ -1,34 +0,0 @@ -package seedu.address.testutil; - -import seedu.address.model.AddressBook; -import seedu.address.model.person.Person; - -/** - * A utility class to help with building Addressbook objects. - * Example usage:
- * {@code AddressBook ab = new AddressBookBuilder().withPerson("John", "Doe").build();} - */ -public class AddressBookBuilder { - - private AddressBook addressBook; - - public AddressBookBuilder() { - addressBook = new AddressBook(); - } - - public AddressBookBuilder(AddressBook addressBook) { - this.addressBook = addressBook; - } - - /** - * Adds a new {@code Person} to the {@code AddressBook} that we are building. - */ - public AddressBookBuilder withPerson(Person person) { - addressBook.addPerson(person); - return this; - } - - public AddressBook build() { - return addressBook; - } -} diff --git a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java deleted file mode 100644 index 9207ac77005..00000000000 --- a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java +++ /dev/null @@ -1,117 +0,0 @@ -package seedu.address.testutil; - -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; - -/** - * A utility class to help with building EditPersonDescriptor objects. - */ -public class EditPersonDescriptorBuilder { - - private EditPersonDescriptor descriptor; - - public EditPersonDescriptorBuilder() { - descriptor = new EditPersonDescriptor(); - } - - public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) { - this.descriptor = new EditPersonDescriptor(descriptor); - } - - /** - * Returns an {@code EditPersonDescriptor} with fields containing {@code person}'s details - */ - public EditPersonDescriptorBuilder(Person person) { - descriptor = new EditPersonDescriptor(); - descriptor.setName(person.getName()); - descriptor.setPhone(person.getPhone()); - descriptor.setEmail(person.getEmail()); - descriptor.setModule(person.getModule()); - descriptor.setYear(person.getYear()); - descriptor.setStudentId(person.getStudentId()); - descriptor.setAddress(person.getAddress()); - descriptor.setTags(person.getTags()); - } - - /** - * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withName(String name) { - descriptor.setName(new Name(name)); - return this; - } - - /** - * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withPhone(String phone) { - descriptor.setPhone(new Phone(phone)); - return this; - } - - /** - * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withEmail(String email) { - descriptor.setEmail(new Email(email)); - return this; - } - - /** - * Sets the {@code Module} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withModule(String module) { - descriptor.setModule(new Module(module)); - return this; - } - - /** - * Sets the {@code Year} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withYear(String year) { - descriptor.setYear(new Year(year)); - return this; - } - - /** - * Sets the {@code StudentId} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withStudentId(String studentId) { - descriptor.setStudentId(new StudentId(studentId)); - return this; - } - - /** - * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building. - */ - public EditPersonDescriptorBuilder withAddress(String address) { - descriptor.setAddress(new Address(address)); - return this; - } - - /** - * Parses the {@code tags} into a {@code Set} and set it to the {@code EditPersonDescriptor} - * that we are building. - */ - public EditPersonDescriptorBuilder withTags(String... tags) { - Set tagSet = Stream.of(tags).map(Tag::new).collect(Collectors.toSet()); - descriptor.setTags(tagSet); - return this; - } - - public EditPersonDescriptor build() { - return descriptor; - } -} diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java deleted file mode 100644 index bbf72c31d3a..00000000000 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ /dev/null @@ -1,147 +0,0 @@ -package seedu.address.testutil; - -import java.util.HashSet; -import java.util.Set; - -import seedu.address.model.person.Address; -import seedu.address.model.person.Comment; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; -import seedu.address.model.util.SampleDataUtil; - -/** - * A utility class to help with building Person objects. - */ -public class PersonBuilder { - - public static final String DEFAULT_NAME = "Amy Bee"; - public static final String DEFAULT_PHONE = "85355255"; - public static final String DEFAULT_EMAIL = "amy@gmail.com"; - public static final String DEFAULT_MODULE = "cs2103t"; - public static final String DEFAULT_YEAR = "3"; - public static final String DEFAULT_STUDENTID = "A1234567X"; - public static final String DEFAULT_ADDRESS = "123, Jurong West Ave 6, #08-111"; - public static final String DEFAULT_COMMENT = ""; - - private Name name; - private Phone phone; - private Email email; - private Module module; - private Year year; - private StudentId studentId; - private Address address; - private Comment comment; - private Set tags; - - /** - * Creates a {@code PersonBuilder} with the default details. - */ - public PersonBuilder() { - name = new Name(DEFAULT_NAME); - phone = new Phone(DEFAULT_PHONE); - email = new Email(DEFAULT_EMAIL); - module = new Module(DEFAULT_MODULE); - year = new Year(DEFAULT_YEAR); - studentId = new StudentId(DEFAULT_STUDENTID); - address = new Address(DEFAULT_ADDRESS); - comment = new Comment(DEFAULT_COMMENT); - tags = new HashSet<>(); - } - - /** - * Initializes the PersonBuilder with the data of {@code personToCopy}. - */ - public PersonBuilder(Person personToCopy) { - name = personToCopy.getName(); - phone = personToCopy.getPhone(); - email = personToCopy.getEmail(); - module = personToCopy.getModule(); - year = personToCopy.getYear(); - studentId = personToCopy.getStudentId(); - address = personToCopy.getAddress(); - comment = personToCopy.getComment(); - tags = new HashSet<>(personToCopy.getTags()); - } - - /** - * Sets the {@code Name} of the {@code Person} that we are building. - */ - public PersonBuilder withName(String name) { - this.name = new Name(name); - return this; - } - - /** - * Parses the {@code tags} into a {@code Set} and set it to the {@code Person} that we are building. - */ - public PersonBuilder withTags(String ... tags) { - this.tags = SampleDataUtil.getTagSet(tags); - return this; - } - - /** - * Sets the {@code Address} of the {@code Person} that we are building. - */ - public PersonBuilder withAddress(String address) { - this.address = new Address(address); - return this; - } - - /** - * Sets the {@code Phone} of the {@code Person} that we are building. - */ - public PersonBuilder withPhone(String phone) { - this.phone = new Phone(phone); - return this; - } - - /** - * Sets the {@code Email} of the {@code Person} that we are building. - */ - public PersonBuilder withEmail(String email) { - this.email = new Email(email); - return this; - } - /** - * Sets the {@code Comment} of the {@code Person} that we are building. - */ - public PersonBuilder withComment(String comment) { - this.comment = new Comment(comment); - return this; - } - - /** - * Sets the {@code Module} of the {@code Person} that we are building. - */ - public PersonBuilder withModule(String module) { - this.module = new Module(module); - return this; - } - - /** - * Sets the {@code Address} of the {@code Person} that we are building. - */ - public PersonBuilder withYear(String year) { - this.year = new Year(year); - return this; - } - - /** - * Sets the {@code StudentId} of the {@code Person} that we are building. - */ - public PersonBuilder withStudentId(String studentId) { - this.studentId = new StudentId(studentId); - return this; - } - - public Person build() { - return new Person(name, phone, email, module, year, studentId, address, comment, tags); - } - -} diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java deleted file mode 100644 index 36ac81da43e..00000000000 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ /dev/null @@ -1,72 +0,0 @@ -package seedu.address.testutil; - -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; - -import java.util.Set; - -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.model.person.Person; -import seedu.address.model.tag.Tag; - -/** - * A utility class for Person. - */ -public class PersonUtil { - - /** - * Returns an add command string for adding the {@code person}. - */ - public static String getAddCommand(Person person) { - return AddCommand.COMMAND_WORD + " " + getPersonDetails(person); - } - - /** - * Returns the part of command string for the given {@code person}'s details. - */ - public static String getPersonDetails(Person person) { - StringBuilder sb = new StringBuilder(); - sb.append(PREFIX_NAME + person.getName().fullName + " "); - sb.append(PREFIX_PHONE + person.getPhone().value + " "); - sb.append(PREFIX_EMAIL + person.getEmail().value + " "); - sb.append(PREFIX_MODULE + person.getModule().value + " "); - sb.append(PREFIX_YEAR + person.getYear().value + " "); - sb.append(PREFIX_STUDENTID + person.getStudentId().value + " "); - sb.append(PREFIX_ADDRESS + person.getAddress().value + " "); - person.getTags().stream().forEach( - s -> sb.append(PREFIX_TAG + s.tagName + " ") - ); - return sb.toString(); - } - - /** - * Returns the part of command string for the given {@code EditPersonDescriptor}'s details. - */ - public static String getEditPersonDescriptorDetails(EditPersonDescriptor descriptor) { - StringBuilder sb = new StringBuilder(); - descriptor.getName().ifPresent(name -> sb.append(PREFIX_NAME).append(name.fullName).append(" ")); - descriptor.getPhone().ifPresent(phone -> sb.append(PREFIX_PHONE).append(phone.value).append(" ")); - descriptor.getEmail().ifPresent(email -> sb.append(PREFIX_EMAIL).append(email.value).append(" ")); - descriptor.getModule().ifPresent(module -> sb.append(PREFIX_MODULE).append(module.value).append(" ")); - descriptor.getYear().ifPresent(year -> sb.append(PREFIX_YEAR).append(year.value).append(" ")); - descriptor.getStudentId().ifPresent(studentId -> sb.append(PREFIX_STUDENTID) - .append(studentId.value).append(" ")); - descriptor.getAddress().ifPresent(address -> sb.append(PREFIX_ADDRESS).append(address.value).append(" ")); - if (descriptor.getTags().isPresent()) { - Set tags = descriptor.getTags().get(); - if (tags.isEmpty()) { - sb.append(PREFIX_TAG); - } else { - tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName).append(" ")); - } - } - return sb.toString(); - } -} diff --git a/src/test/java/seedu/address/testutil/TypicalIndexes.java b/src/test/java/seedu/address/testutil/TypicalIndexes.java deleted file mode 100644 index 1e613937657..00000000000 --- a/src/test/java/seedu/address/testutil/TypicalIndexes.java +++ /dev/null @@ -1,12 +0,0 @@ -package seedu.address.testutil; - -import seedu.address.commons.core.index.Index; - -/** - * A utility class containing a list of {@code Index} objects to be used in tests. - */ -public class TypicalIndexes { - public static final Index INDEX_FIRST_PERSON = Index.fromOneBased(1); - public static final Index INDEX_SECOND_PERSON = Index.fromOneBased(2); - public static final Index INDEX_THIRD_PERSON = Index.fromOneBased(3); -} diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java deleted file mode 100644 index bb6ab0fd771..00000000000 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ /dev/null @@ -1,92 +0,0 @@ -package seedu.address.testutil; - -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENTID_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENTID_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import seedu.address.model.AddressBook; -import seedu.address.model.person.Person; - -/** - * A utility class containing a list of {@code Person} objects to be used in tests. - */ -public class TypicalPersons { - - public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") - .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") - .withModule("CS2100").withYear("3").withPhone("94351253").withStudentId("A1234569L") - .withTags("friends").build(); - public static final Person BENSON = new PersonBuilder().withName("Benson Meier") - .withAddress("311, Clementi Ave 2, #02-25") - .withEmail("johnd@example.com").withPhone("98765432") - .withModule("CS2100").withYear("3").withStudentId("A0000009Y") - .withTags("owesMoney", "friends").build(); - public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") - .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withStudentId("A9875647U") - .withAddress("wall street").build(); - public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withModule("CS2100").withYear("3").withStudentId("A9345647M") - .withAddress("10th street").withTags("friends").build(); - public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") - .withEmail("werner@example.com").withModule("CS2100").withYear("3").withStudentId("A8768974P") - .withAddress("michegan ave").build(); - public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") - .withEmail("lydia@example.com").withModule("CS2100").withYear("3").withStudentId("A9870921H") - .withAddress("little tokyo").build(); - public static final Person GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") - .withEmail("anna@example.com").withModule("CS2100").withYear("3").withStudentId("A0673201Y") - .withAddress("4th street").build(); - - // Manually added - public static final Person HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") - .withEmail("stefan@example.com").withModule("cs2103t").withYear("3").withStudentId("A1234758N") - .withAddress("little india").build(); - public static final Person IDA = new PersonBuilder().withName("Ida Mueller").withPhone("8482131") - .withEmail("hans@example.com").withModule("cs2100").withYear("4").withStudentId("A0965302K") - .withAddress("chicago ave").build(); - - // Manually added - Person's details found in {@code CommandTestUtil} - public static final Person AMY = new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) - .withEmail(VALID_EMAIL_AMY).withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) - .withStudentId(VALID_STUDENTID_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); - public static final Person BOB = new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) - .withEmail(VALID_EMAIL_BOB).withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) - .withStudentId(VALID_STUDENTID_BOB).withAddress(VALID_ADDRESS_BOB) - .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); - - public static final String KEYWORD_MATCHING_MEIER = "Meier"; // A keyword that matches MEIER - - private TypicalPersons() {} // prevents instantiation - - /** - * Returns an {@code AddressBook} with all the typical persons. - */ - public static AddressBook getTypicalAddressBook() { - AddressBook ab = new AddressBook(); - for (Person person : getTypicalPersons()) { - ab.addPerson(person); - } - return ab; - } - - public static List getTypicalPersons() { - return new ArrayList<>(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE)); - } -} diff --git a/src/test/java/seedu/address/AppParametersTest.java b/src/test/java/tuthub/AppParametersTest.java similarity index 98% rename from src/test/java/seedu/address/AppParametersTest.java rename to src/test/java/tuthub/AppParametersTest.java index 61326b2d31a..77f33789ca7 100644 --- a/src/test/java/seedu/address/AppParametersTest.java +++ b/src/test/java/tuthub/AppParametersTest.java @@ -1,4 +1,4 @@ -package seedu.address; +package tuthub; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/src/test/java/seedu/address/commons/core/ConfigTest.java b/src/test/java/tuthub/commons/core/ConfigTest.java similarity index 95% rename from src/test/java/seedu/address/commons/core/ConfigTest.java rename to src/test/java/tuthub/commons/core/ConfigTest.java index 07cd7f73d53..41b8f98c087 100644 --- a/src/test/java/seedu/address/commons/core/ConfigTest.java +++ b/src/test/java/tuthub/commons/core/ConfigTest.java @@ -1,4 +1,4 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/seedu/address/commons/core/VersionTest.java b/src/test/java/tuthub/commons/core/VersionTest.java similarity index 98% rename from src/test/java/seedu/address/commons/core/VersionTest.java rename to src/test/java/tuthub/commons/core/VersionTest.java index 495cd231554..62e59627093 100644 --- a/src/test/java/seedu/address/commons/core/VersionTest.java +++ b/src/test/java/tuthub/commons/core/VersionTest.java @@ -1,8 +1,8 @@ -package seedu.address.commons.core; +package tuthub.commons.core; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/commons/core/index/IndexTest.java b/src/test/java/tuthub/commons/core/index/IndexTest.java similarity index 74% rename from src/test/java/seedu/address/commons/core/index/IndexTest.java rename to src/test/java/tuthub/commons/core/index/IndexTest.java index a3ec6f8e747..ce7a713d14b 100644 --- a/src/test/java/seedu/address/commons/core/index/IndexTest.java +++ b/src/test/java/tuthub/commons/core/index/IndexTest.java @@ -1,9 +1,9 @@ -package seedu.address.commons.core.index; +package tuthub.commons.core.index; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; @@ -39,22 +39,22 @@ public void createZeroBasedIndex() { @Test public void equals() { - final Index fifthPersonIndex = Index.fromOneBased(5); + final Index fifthTutorIndex = Index.fromOneBased(5); // same values -> returns true - assertTrue(fifthPersonIndex.equals(Index.fromOneBased(5))); - assertTrue(fifthPersonIndex.equals(Index.fromZeroBased(4))); + assertTrue(fifthTutorIndex.equals(Index.fromOneBased(5))); + assertTrue(fifthTutorIndex.equals(Index.fromZeroBased(4))); // same object -> returns true - assertTrue(fifthPersonIndex.equals(fifthPersonIndex)); + assertTrue(fifthTutorIndex.equals(fifthTutorIndex)); // null -> returns false - assertFalse(fifthPersonIndex.equals(null)); + assertFalse(fifthTutorIndex.equals(null)); // different types -> returns false - assertFalse(fifthPersonIndex.equals(5.0f)); + assertFalse(fifthTutorIndex.equals(5.0f)); // different index -> returns false - assertFalse(fifthPersonIndex.equals(Index.fromOneBased(1))); + assertFalse(fifthTutorIndex.equals(Index.fromOneBased(1))); } } diff --git a/src/test/java/seedu/address/commons/util/AppUtilTest.java b/src/test/java/tuthub/commons/util/AppUtilTest.java similarity index 85% rename from src/test/java/seedu/address/commons/util/AppUtilTest.java rename to src/test/java/tuthub/commons/util/AppUtilTest.java index 594de1e6365..6432cdcf205 100644 --- a/src/test/java/seedu/address/commons/util/AppUtilTest.java +++ b/src/test/java/tuthub/commons/util/AppUtilTest.java @@ -1,7 +1,7 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; @@ -9,7 +9,7 @@ public class AppUtilTest { @Test public void getImage_exitingImage() { - assertNotNull(AppUtil.getImage("/images/address_book_32.png")); + assertNotNull(AppUtil.getImage("/images/tuthub_32.png")); } @Test diff --git a/src/test/java/seedu/address/commons/util/CollectionUtilTest.java b/src/test/java/tuthub/commons/util/CollectionUtilTest.java similarity index 96% rename from src/test/java/seedu/address/commons/util/CollectionUtilTest.java rename to src/test/java/tuthub/commons/util/CollectionUtilTest.java index b467a3dc025..3f7c707bfb1 100644 --- a/src/test/java/seedu/address/commons/util/CollectionUtilTest.java +++ b/src/test/java/tuthub/commons/util/CollectionUtilTest.java @@ -1,9 +1,9 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.commons.util.CollectionUtil.requireAllNonNull; +import static tuthub.testutil.Assert.assertThrows; import java.util.Arrays; import java.util.Collection; diff --git a/src/test/java/seedu/address/commons/util/ConfigUtilTest.java b/src/test/java/tuthub/commons/util/ConfigUtilTest.java similarity index 94% rename from src/test/java/seedu/address/commons/util/ConfigUtilTest.java rename to src/test/java/tuthub/commons/util/ConfigUtilTest.java index d2ab2839a52..d016a1476f1 100644 --- a/src/test/java/seedu/address/commons/util/ConfigUtilTest.java +++ b/src/test/java/tuthub/commons/util/ConfigUtilTest.java @@ -1,8 +1,8 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import java.io.IOException; import java.nio.file.Path; @@ -13,8 +13,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import seedu.address.commons.core.Config; -import seedu.address.commons.exceptions.DataConversionException; +import tuthub.commons.core.Config; +import tuthub.commons.exceptions.DataConversionException; public class ConfigUtilTest { diff --git a/src/test/java/seedu/address/commons/util/FileUtilTest.java b/src/test/java/tuthub/commons/util/FileUtilTest.java similarity index 84% rename from src/test/java/seedu/address/commons/util/FileUtilTest.java rename to src/test/java/tuthub/commons/util/FileUtilTest.java index 1fe5478c756..78153a1913d 100644 --- a/src/test/java/seedu/address/commons/util/FileUtilTest.java +++ b/src/test/java/tuthub/commons/util/FileUtilTest.java @@ -1,8 +1,8 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/commons/util/JsonUtilTest.java b/src/test/java/tuthub/commons/util/JsonUtilTest.java similarity index 92% rename from src/test/java/seedu/address/commons/util/JsonUtilTest.java rename to src/test/java/tuthub/commons/util/JsonUtilTest.java index d4907539dee..6332b909bf2 100644 --- a/src/test/java/seedu/address/commons/util/JsonUtilTest.java +++ b/src/test/java/tuthub/commons/util/JsonUtilTest.java @@ -1,4 +1,4 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -7,8 +7,8 @@ import org.junit.jupiter.api.Test; -import seedu.address.testutil.SerializableTestClass; -import seedu.address.testutil.TestUtil; +import tuthub.testutil.SerializableTestClass; +import tuthub.testutil.TestUtil; /** * Tests JSON Read and Write diff --git a/src/test/java/seedu/address/commons/util/StringUtilTest.java b/src/test/java/tuthub/commons/util/StringUtilTest.java similarity index 98% rename from src/test/java/seedu/address/commons/util/StringUtilTest.java rename to src/test/java/tuthub/commons/util/StringUtilTest.java index c56d407bf3f..bfe02b6b714 100644 --- a/src/test/java/seedu/address/commons/util/StringUtilTest.java +++ b/src/test/java/tuthub/commons/util/StringUtilTest.java @@ -1,8 +1,8 @@ -package seedu.address.commons.util; +package tuthub.commons.util; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import java.io.FileNotFoundException; diff --git a/src/test/java/seedu/address/logic/LogicManagerTest.java b/src/test/java/tuthub/logic/LogicManagerTest.java similarity index 75% rename from src/test/java/seedu/address/logic/LogicManagerTest.java rename to src/test/java/tuthub/logic/LogicManagerTest.java index 5bae406bdb0..b2a20bb6e0c 100644 --- a/src/test/java/seedu/address/logic/LogicManagerTest.java +++ b/src/test/java/tuthub/logic/LogicManagerTest.java @@ -1,17 +1,17 @@ -package seedu.address.logic; +package tuthub.logic; import static org.junit.jupiter.api.Assertions.assertEquals; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX; -import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; -import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.STUDENTID_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_AMY; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.AMY; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX; +import static tuthub.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; +import static tuthub.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.NAME_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.PHONE_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.STUDENTID_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.YEAR_DESC_AMY; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.AMY; import java.io.IOException; import java.nio.file.Path; @@ -20,20 +20,20 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.ListCommand; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.Person; -import seedu.address.storage.JsonAddressBookStorage; -import seedu.address.storage.JsonUserPrefsStorage; -import seedu.address.storage.StorageManager; -import seedu.address.testutil.PersonBuilder; +import tuthub.logic.commands.AddCommand; +import tuthub.logic.commands.CommandResult; +import tuthub.logic.commands.ListCommand; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.ReadOnlyAddressBook; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.Tutor; +import tuthub.storage.JsonAddressBookStorage; +import tuthub.storage.JsonUserPrefsStorage; +import tuthub.storage.StorageManager; +import tuthub.testutil.TutorBuilder; public class LogicManagerTest { private static final IOException DUMMY_IO_EXCEPTION = new IOException("dummy exception"); @@ -62,7 +62,7 @@ public void execute_invalidCommandFormat_throwsParseException() { @Test public void execute_commandExecutionError_throwsCommandException() { String deleteCommand = "delete 9"; - assertCommandException(deleteCommand, MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + assertCommandException(deleteCommand, MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } @Test @@ -84,16 +84,16 @@ public void execute_storageThrowsIoException_throwsCommandException() { // Execute add command String addCommand = AddCommand.COMMAND_WORD + NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + MODULE_DESC_AMY + YEAR_DESC_AMY + STUDENTID_DESC_AMY + ADDRESS_DESC_AMY; - Person expectedPerson = new PersonBuilder(AMY).withTags().build(); + Tutor expectedTutor = new TutorBuilder(AMY).withTags().build(); ModelManager expectedModel = new ModelManager(); - expectedModel.addPerson(expectedPerson); + expectedModel.addTutor(expectedTutor); String expectedMessage = LogicManager.FILE_OPS_ERROR_MESSAGE + DUMMY_IO_EXCEPTION; assertCommandFailure(addCommand, CommandException.class, expectedMessage, expectedModel); } @Test - public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() { - assertThrows(UnsupportedOperationException.class, () -> logic.getFilteredPersonList().remove(0)); + public void getFilteredTutorList_modifyList_throwsUnsupportedOperationException() { + assertThrows(UnsupportedOperationException.class, () -> logic.getFilteredTutorList().remove(0)); } /** diff --git a/src/test/java/tuthub/logic/commands/AddCommandIntegrationTest.java b/src/test/java/tuthub/logic/commands/AddCommandIntegrationTest.java new file mode 100644 index 00000000000..8dbbbb23b70 --- /dev/null +++ b/src/test/java/tuthub/logic/commands/AddCommandIntegrationTest.java @@ -0,0 +1,45 @@ +package tuthub.logic.commands; + +import static tuthub.logic.commands.CommandTestUtil.assertCommandFailure; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.TutorBuilder; + +/** + * Contains integration tests (interaction with the Model) for {@code AddCommand}. + */ +public class AddCommandIntegrationTest { + + private Model model; + + @BeforeEach + public void setUp() { + model = new ModelManager(getTypicalTuthub(), new UserPrefs()); + } + + @Test + public void execute_newTutor_success() { + Tutor validTutor = new TutorBuilder().build(); + + Model expectedModel = new ModelManager(model.getTuthub(), new UserPrefs()); + expectedModel.addTutor(validTutor); + + assertCommandSuccess(new AddCommand(validTutor), model, + String.format(AddCommand.MESSAGE_SUCCESS, validTutor), expectedModel); + } + + @Test + public void execute_duplicateTutor_throwsCommandException() { + Tutor tutorInList = model.getTuthub().getTutorList().get(0); + assertCommandFailure(new AddCommand(tutorInList), model, AddCommand.MESSAGE_DUPLICATE_TUTOR); + } + +} diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/tuthub/logic/commands/AddCommandTest.java similarity index 52% rename from src/test/java/seedu/address/logic/commands/AddCommandTest.java rename to src/test/java/tuthub/logic/commands/AddCommandTest.java index 5865713d5dd..33d2ec21bdc 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/tuthub/logic/commands/AddCommandTest.java @@ -1,10 +1,10 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static java.util.Objects.requireNonNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import java.nio.file.Path; import java.util.ArrayList; @@ -14,46 +14,46 @@ import org.junit.jupiter.api.Test; import javafx.collections.ObservableList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.ReadOnlyUserPrefs; -import seedu.address.model.person.Person; -import seedu.address.testutil.PersonBuilder; +import tuthub.commons.core.GuiSettings; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.ReadOnlyUserPrefs; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.TutorBuilder; public class AddCommandTest { @Test - public void constructor_nullPerson_throwsNullPointerException() { + public void constructor_nullTutor_throwsNullPointerException() { assertThrows(NullPointerException.class, () -> new AddCommand(null)); } @Test - public void execute_personAcceptedByModel_addSuccessful() throws Exception { - ModelStubAcceptingPersonAdded modelStub = new ModelStubAcceptingPersonAdded(); - Person validPerson = new PersonBuilder().build(); + public void execute_tutorAcceptedByModel_addSuccessful() throws Exception { + ModelStubAcceptingTutorAdded modelStub = new ModelStubAcceptingTutorAdded(); + Tutor validTutor = new TutorBuilder().build(); - CommandResult commandResult = new AddCommand(validPerson).execute(modelStub); + CommandResult commandResult = new AddCommand(validTutor).execute(modelStub); - assertEquals(String.format(AddCommand.MESSAGE_SUCCESS, validPerson), commandResult.getFeedbackToUser()); - assertEquals(Arrays.asList(validPerson), modelStub.personsAdded); + assertEquals(String.format(AddCommand.MESSAGE_SUCCESS, validTutor), commandResult.getFeedbackToUser()); + assertEquals(Arrays.asList(validTutor), modelStub.tutorsAdded); } @Test - public void execute_duplicatePerson_throwsCommandException() { - Person validPerson = new PersonBuilder().build(); - AddCommand addCommand = new AddCommand(validPerson); - ModelStub modelStub = new ModelStubWithPerson(validPerson); + public void execute_duplicateTutor_throwsCommandException() { + Tutor validTutor = new TutorBuilder().build(); + AddCommand addCommand = new AddCommand(validTutor); + ModelStub modelStub = new ModelStubWithTutor(validTutor); - assertThrows(CommandException.class, AddCommand.MESSAGE_DUPLICATE_PERSON, () -> addCommand.execute(modelStub)); + assertThrows(CommandException.class, AddCommand.MESSAGE_DUPLICATE_TUTOR, () -> addCommand.execute(modelStub)); } @Test public void equals() { - Person alice = new PersonBuilder().withName("Alice").build(); - Person bob = new PersonBuilder().withName("Bob").build(); + Tutor alice = new TutorBuilder().withName("Alice").build(); + Tutor bob = new TutorBuilder().withName("Bob").build(); AddCommand addAliceCommand = new AddCommand(alice); AddCommand addBobCommand = new AddCommand(bob); @@ -70,7 +70,7 @@ public void equals() { // null -> returns false assertFalse(addAliceCommand.equals(null)); - // different person -> returns false + // different tutor -> returns false assertFalse(addAliceCommand.equals(addBobCommand)); } @@ -99,95 +99,95 @@ public void setGuiSettings(GuiSettings guiSettings) { } @Override - public Path getAddressBookFilePath() { + public Path getTuthubFilePath() { throw new AssertionError("This method should not be called."); } @Override - public void setAddressBookFilePath(Path addressBookFilePath) { + public void setTuthubFilePath(Path tuthubFilePath) { throw new AssertionError("This method should not be called."); } @Override - public void addPerson(Person person) { + public void addTutor(Tutor tutor) { throw new AssertionError("This method should not be called."); } @Override - public void setAddressBook(ReadOnlyAddressBook newData) { + public void setTuthub(ReadOnlyTuthub newData) { throw new AssertionError("This method should not be called."); } @Override - public ReadOnlyAddressBook getAddressBook() { + public ReadOnlyTuthub getTuthub() { throw new AssertionError("This method should not be called."); } @Override - public boolean hasPerson(Person person) { + public boolean hasTutor(Tutor tutor) { throw new AssertionError("This method should not be called."); } @Override - public void deletePerson(Person target) { + public void deleteTutor(Tutor target) { throw new AssertionError("This method should not be called."); } @Override - public void setPerson(Person target, Person editedPerson) { + public void setTutor(Tutor target, Tutor editedTutor) { throw new AssertionError("This method should not be called."); } @Override - public ObservableList getFilteredPersonList() { + public ObservableList getFilteredTutorList() { throw new AssertionError("This method should not be called."); } @Override - public void updateFilteredPersonList(Predicate predicate) { + public void updateFilteredTutorList(Predicate predicate) { throw new AssertionError("This method should not be called."); } } /** - * A Model stub that contains a single person. + * A Model stub that contains a single tutor. */ - private class ModelStubWithPerson extends ModelStub { - private final Person person; + private class ModelStubWithTutor extends ModelStub { + private final Tutor tutor; - ModelStubWithPerson(Person person) { - requireNonNull(person); - this.person = person; + ModelStubWithTutor(Tutor tutor) { + requireNonNull(tutor); + this.tutor = tutor; } @Override - public boolean hasPerson(Person person) { - requireNonNull(person); - return this.person.isSamePerson(person); + public boolean hasTutor(Tutor tutor) { + requireNonNull(tutor); + return this.tutor.isSameTutor(tutor); } } /** - * A Model stub that always accept the person being added. + * A Model stub that always accept the tutor being added. */ - private class ModelStubAcceptingPersonAdded extends ModelStub { - final ArrayList personsAdded = new ArrayList<>(); + private class ModelStubAcceptingTutorAdded extends ModelStub { + final ArrayList tutorsAdded = new ArrayList<>(); @Override - public boolean hasPerson(Person person) { - requireNonNull(person); - return personsAdded.stream().anyMatch(person::isSamePerson); + public boolean hasTutor(Tutor tutor) { + requireNonNull(tutor); + return tutorsAdded.stream().anyMatch(tutor::isSameTutor); } @Override - public void addPerson(Person person) { - requireNonNull(person); - personsAdded.add(person); + public void addTutor(Tutor tutor) { + requireNonNull(tutor); + tutorsAdded.add(tutor); } @Override - public ReadOnlyAddressBook getAddressBook() { - return new AddressBook(); + public ReadOnlyTuthub getTuthub() { + return new Tuthub(); } } diff --git a/src/test/java/tuthub/logic/commands/AddCommentUnfilteredList.java b/src/test/java/tuthub/logic/commands/AddCommentUnfilteredList.java new file mode 100644 index 00000000000..89ce1900c62 --- /dev/null +++ b/src/test/java/tuthub/logic/commands/AddCommentUnfilteredList.java @@ -0,0 +1,44 @@ +package tuthub.logic.commands; + +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; + +import org.junit.jupiter.api.Test; + +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.TutorBuilder; + +/** + * Contains integration tests (interaction with the Model) and unit tests for CommentCommand. + */ +public class AddCommentUnfilteredList { + + private static final String COMMENT_STUB = "Some comment"; + + private Model model = new ModelManager(getTypicalTuthub(), new UserPrefs()); + + /** + * Test for comment + */ + @Test + public void execute_addCommentUnfilteredList_success() { + Tutor firstTutor = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + Tutor editedTutor = new TutorBuilder(firstTutor).withComment(COMMENT_STUB).build(); + + CommentCommand commentCommand = new CommentCommand(INDEX_FIRST_TUTOR, + new Comment(editedTutor.getComment().value)); + + String expectedMessage = String.format(CommentCommand.MESSAGE_ADD_COMMENT_SUCCESS, editedTutor); + + Model expectedModel = new ModelManager(new Tuthub(model.getTuthub()), new UserPrefs()); + expectedModel.setTutor(firstTutor, editedTutor); + + assertCommandSuccess(commentCommand, model, expectedMessage, expectedModel); + } +} diff --git a/src/test/java/tuthub/logic/commands/ClearCommandTest.java b/src/test/java/tuthub/logic/commands/ClearCommandTest.java new file mode 100644 index 00000000000..b714549e809 --- /dev/null +++ b/src/test/java/tuthub/logic/commands/ClearCommandTest.java @@ -0,0 +1,32 @@ +package tuthub.logic.commands; + +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; + +import org.junit.jupiter.api.Test; + +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; + +public class ClearCommandTest { + + @Test + public void execute_emptyTuthub_success() { + Model model = new ModelManager(); + Model expectedModel = new ModelManager(); + + assertCommandSuccess(new ClearCommand(), model, ClearCommand.MESSAGE_SUCCESS, expectedModel); + } + + @Test + public void execute_nonEmptyTuthub_success() { + Model model = new ModelManager(getTypicalTuthub(), new UserPrefs()); + Model expectedModel = new ModelManager(getTypicalTuthub(), new UserPrefs()); + expectedModel.setTuthub(new Tuthub()); + + assertCommandSuccess(new ClearCommand(), model, ClearCommand.MESSAGE_SUCCESS, expectedModel); + } + +} diff --git a/src/test/java/seedu/address/logic/commands/CommandResultTest.java b/src/test/java/tuthub/logic/commands/CommandResultTest.java similarity index 98% rename from src/test/java/seedu/address/logic/commands/CommandResultTest.java rename to src/test/java/tuthub/logic/commands/CommandResultTest.java index 4f3eb46e9ef..3e3a22fbc99 100644 --- a/src/test/java/seedu/address/logic/commands/CommandResultTest.java +++ b/src/test/java/tuthub/logic/commands/CommandResultTest.java @@ -1,4 +1,4 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/tuthub/logic/commands/CommandTestUtil.java similarity index 74% rename from src/test/java/seedu/address/logic/commands/CommandTestUtil.java rename to src/test/java/tuthub/logic/commands/CommandTestUtil.java index 3e7d7d770e6..84d5a47952c 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/tuthub/logic/commands/CommandTestUtil.java @@ -1,28 +1,28 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_MODULE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_STUDENTID; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CliSyntax.PREFIX_YEAR; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; +import static tuthub.testutil.Assert.assertThrows; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.AddressBook; -import seedu.address.model.Model; -import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.model.person.Person; -import seedu.address.testutil.EditPersonDescriptorBuilder; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.exceptions.CommandException; +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.tutor.NameContainsKeywordsPredicate; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.EditTutorDescriptorBuilder; /** * Contains helper methods for testing commands. @@ -75,16 +75,16 @@ public class CommandTestUtil { public static final String PREAMBLE_WHITESPACE = "\t \r \n"; public static final String PREAMBLE_NON_EMPTY = "NonEmptyPreamble"; - public static final EditCommand.EditPersonDescriptor DESC_AMY; - public static final EditCommand.EditPersonDescriptor DESC_BOB; + public static final EditCommand.EditTutorDescriptor DESC_AMY; + public static final EditCommand.EditTutorDescriptor DESC_BOB; static { - DESC_AMY = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY) + DESC_AMY = new EditTutorDescriptorBuilder().withName(VALID_NAME_AMY) .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY) .withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) .withStudentId(VALID_STUDENTID_AMY).withAddress(VALID_ADDRESS_AMY) .withTags(VALID_TAG_FRIEND).build(); - DESC_BOB = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB) + DESC_BOB = new EditTutorDescriptorBuilder().withName(VALID_NAME_BOB) .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) .withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) .withStudentId(VALID_STUDENTID_BOB).withAddress(VALID_ADDRESS_BOB) @@ -121,30 +121,30 @@ public static void assertCommandSuccess(Command command, Model actualModel, Stri * Executes the given {@code command}, confirms that
* - a {@code CommandException} is thrown
* - the CommandException message matches {@code expectedMessage}
- * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged + * - the address book, filtered tutor list and selected tutor in {@code actualModel} remain unchanged */ public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) { // we are unable to defensively copy the model for comparison later, so we can // only do so by copying its components. - AddressBook expectedAddressBook = new AddressBook(actualModel.getAddressBook()); - List expectedFilteredList = new ArrayList<>(actualModel.getFilteredPersonList()); + Tuthub expectedTuthub = new Tuthub(actualModel.getTuthub()); + List expectedFilteredList = new ArrayList<>(actualModel.getFilteredTutorList()); assertThrows(CommandException.class, expectedMessage, () -> command.execute(actualModel)); - assertEquals(expectedAddressBook, actualModel.getAddressBook()); - assertEquals(expectedFilteredList, actualModel.getFilteredPersonList()); + assertEquals(expectedTuthub, actualModel.getTuthub()); + assertEquals(expectedFilteredList, actualModel.getFilteredTutorList()); } /** - * Updates {@code model}'s filtered list to show only the person at the given {@code targetIndex} in the + * Updates {@code model}'s filtered list to show only the tutor at the given {@code targetIndex} in the * {@code model}'s address book. */ - public static void showPersonAtIndex(Model model, Index targetIndex) { - assertTrue(targetIndex.getZeroBased() < model.getFilteredPersonList().size()); + public static void showTutorAtIndex(Model model, Index targetIndex) { + assertTrue(targetIndex.getZeroBased() < model.getFilteredTutorList().size()); - Person person = model.getFilteredPersonList().get(targetIndex.getZeroBased()); - final String[] splitName = person.getName().fullName.split("\\s+"); - model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); + Tutor tutor = model.getFilteredTutorList().get(targetIndex.getZeroBased()); + final String[] splitName = tutor.getName().fullName.split("\\s+"); + model.updateFilteredTutorList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); - assertEquals(1, model.getFilteredPersonList().size()); + assertEquals(1, model.getFilteredTutorList().size()); } } diff --git a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java b/src/test/java/tuthub/logic/commands/DeleteCommandTest.java similarity index 50% rename from src/test/java/seedu/address/logic/commands/DeleteCommandTest.java rename to src/test/java/tuthub/logic/commands/DeleteCommandTest.java index 45a8c910ba1..493a7b93fa0 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java +++ b/src/test/java/tuthub/logic/commands/DeleteCommandTest.java @@ -1,22 +1,22 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import static tuthub.logic.commands.CommandTestUtil.assertCommandFailure; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.logic.commands.CommandTestUtil.showTutorAtIndex; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; +import static tuthub.testutil.TypicalIndexes.INDEX_SECOND_TUTOR; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; import org.junit.jupiter.api.Test; -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.Person; +import tuthub.commons.core.Messages; +import tuthub.commons.core.index.Index; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.Tutor; /** * Contains integration tests (interaction with the Model) and unit tests for @@ -24,68 +24,68 @@ */ public class DeleteCommandTest { - private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + private Model model = new ModelManager(getTypicalTuthub(), new UserPrefs()); @Test public void execute_validIndexUnfilteredList_success() { - Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_PERSON); + Tutor tutorToDelete = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_TUTOR); - String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, personToDelete); + String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_TUTOR_SUCCESS, tutorToDelete); - ModelManager expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.deletePerson(personToDelete); + ModelManager expectedModel = new ModelManager(model.getTuthub(), new UserPrefs()); + expectedModel.deleteTutor(tutorToDelete); assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); } @Test public void execute_invalidIndexUnfilteredList_throwsCommandException() { - Index outOfBoundIndex = Index.fromOneBased(model.getFilteredPersonList().size() + 1); + Index outOfBoundIndex = Index.fromOneBased(model.getFilteredTutorList().size() + 1); DeleteCommand deleteCommand = new DeleteCommand(outOfBoundIndex); - assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } @Test public void execute_validIndexFilteredList_success() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + showTutorAtIndex(model, INDEX_FIRST_TUTOR); - Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_PERSON); + Tutor tutorToDelete = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_TUTOR); - String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, personToDelete); + String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_TUTOR_SUCCESS, tutorToDelete); - Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.deletePerson(personToDelete); - showNoPerson(expectedModel); + Model expectedModel = new ModelManager(model.getTuthub(), new UserPrefs()); + expectedModel.deleteTutor(tutorToDelete); + showNoTutor(expectedModel); assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); } @Test public void execute_invalidIndexFilteredList_throwsCommandException() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + showTutorAtIndex(model, INDEX_FIRST_TUTOR); - Index outOfBoundIndex = INDEX_SECOND_PERSON; - // ensures that outOfBoundIndex is still in bounds of address book list - assertTrue(outOfBoundIndex.getZeroBased() < model.getAddressBook().getPersonList().size()); + Index outOfBoundIndex = INDEX_SECOND_TUTOR; + // ensures that outOfBoundIndex is still in bounds of tuthub list + assertTrue(outOfBoundIndex.getZeroBased() < model.getTuthub().getTutorList().size()); DeleteCommand deleteCommand = new DeleteCommand(outOfBoundIndex); - assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); } @Test public void equals() { - DeleteCommand deleteFirstCommand = new DeleteCommand(INDEX_FIRST_PERSON); - DeleteCommand deleteSecondCommand = new DeleteCommand(INDEX_SECOND_PERSON); + DeleteCommand deleteFirstCommand = new DeleteCommand(INDEX_FIRST_TUTOR); + DeleteCommand deleteSecondCommand = new DeleteCommand(INDEX_SECOND_TUTOR); // same object -> returns true assertTrue(deleteFirstCommand.equals(deleteFirstCommand)); // same values -> returns true - DeleteCommand deleteFirstCommandCopy = new DeleteCommand(INDEX_FIRST_PERSON); + DeleteCommand deleteFirstCommandCopy = new DeleteCommand(INDEX_FIRST_TUTOR); assertTrue(deleteFirstCommand.equals(deleteFirstCommandCopy)); // different types -> returns false @@ -94,16 +94,16 @@ public void equals() { // null -> returns false assertFalse(deleteFirstCommand.equals(null)); - // different person -> returns false + // different tutor -> returns false assertFalse(deleteFirstCommand.equals(deleteSecondCommand)); } /** * Updates {@code model}'s filtered list to show no one. */ - private void showNoPerson(Model model) { - model.updateFilteredPersonList(p -> false); + private void showNoTutor(Model model) { + model.updateFilteredTutorList(p -> false); - assertTrue(model.getFilteredPersonList().isEmpty()); + assertTrue(model.getFilteredTutorList().isEmpty()); } } diff --git a/src/test/java/tuthub/logic/commands/EditCommandTest.java b/src/test/java/tuthub/logic/commands/EditCommandTest.java new file mode 100644 index 00000000000..1486384b327 --- /dev/null +++ b/src/test/java/tuthub/logic/commands/EditCommandTest.java @@ -0,0 +1,173 @@ +package tuthub.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tuthub.logic.commands.CommandTestUtil.DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.assertCommandFailure; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.logic.commands.CommandTestUtil.showTutorAtIndex; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; +import static tuthub.testutil.TypicalIndexes.INDEX_SECOND_TUTOR; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; + +import org.junit.jupiter.api.Test; + +import tuthub.commons.core.Messages; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.model.Tuthub; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.EditTutorDescriptorBuilder; +import tuthub.testutil.TutorBuilder; + +/** + * Contains integration tests (interaction with the Model) and unit tests for EditCommand. + */ +public class EditCommandTest { + + private Model model = new ModelManager(getTypicalTuthub(), new UserPrefs()); + + @Test + public void execute_allFieldsSpecifiedUnfilteredList_success() { + Tutor editedTutor = new TutorBuilder().build(); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder(editedTutor).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_TUTOR, descriptor); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_TUTOR_SUCCESS, editedTutor); + + Model expectedModel = new ModelManager(new Tuthub(model.getTuthub()), new UserPrefs()); + expectedModel.setTutor(model.getFilteredTutorList().get(0), editedTutor); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_someFieldsSpecifiedUnfilteredList_success() { + Index indexLastTutor = Index.fromOneBased(model.getFilteredTutorList().size()); + Tutor lastTutor = model.getFilteredTutorList().get(indexLastTutor.getZeroBased()); + + TutorBuilder tutorInList = new TutorBuilder(lastTutor); + Tutor editedTutor = tutorInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) + .withTags(VALID_TAG_HUSBAND).build(); + + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withName(VALID_NAME_BOB) + .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build(); + EditCommand editCommand = new EditCommand(indexLastTutor, descriptor); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_TUTOR_SUCCESS, editedTutor); + + Model expectedModel = new ModelManager(new Tuthub(model.getTuthub()), new UserPrefs()); + expectedModel.setTutor(lastTutor, editedTutor); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_noFieldSpecifiedUnfilteredList_success() { + EditCommand editCommand = new EditCommand(INDEX_FIRST_TUTOR, new EditTutorDescriptor()); + Tutor editedTutor = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_TUTOR_SUCCESS, editedTutor); + + Model expectedModel = new ModelManager(new Tuthub(model.getTuthub()), new UserPrefs()); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_filteredList_success() { + showTutorAtIndex(model, INDEX_FIRST_TUTOR); + + Tutor tutorInFilteredList = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + Tutor editedTutor = new TutorBuilder(tutorInFilteredList).withName(VALID_NAME_BOB).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_TUTOR, + new EditTutorDescriptorBuilder().withName(VALID_NAME_BOB).build()); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_TUTOR_SUCCESS, editedTutor); + + Model expectedModel = new ModelManager(new Tuthub(model.getTuthub()), new UserPrefs()); + expectedModel.setTutor(model.getFilteredTutorList().get(0), editedTutor); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_duplicateTutorUnfilteredList_failure() { + Tutor firstTutor = model.getFilteredTutorList().get(INDEX_FIRST_TUTOR.getZeroBased()); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder(firstTutor).build(); + EditCommand editCommand = new EditCommand(INDEX_SECOND_TUTOR, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_TUTOR); + } + + @Test + public void execute_duplicateTutorFilteredList_failure() { + showTutorAtIndex(model, INDEX_FIRST_TUTOR); + + // edit TUTOR in filtered list into a duplicate in tuthub + Tutor tutorInList = model.getTuthub().getTutorList().get(INDEX_SECOND_TUTOR.getZeroBased()); + EditCommand editCommand = new EditCommand(INDEX_FIRST_TUTOR, + new EditTutorDescriptorBuilder(TUTORInList).build()); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_TUTOR); + } + + @Test + public void execute_invalidTutorIndexUnfilteredList_failure() { + Index outOfBoundIndex = Index.fromOneBased(model.getFilteredTutorList().size() + 1); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withName(VALID_NAME_BOB).build(); + EditCommand editCommand = new EditCommand(outOfBoundIndex, descriptor); + + assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); + } + + /** + * Edit filtered list where index is larger than size of filtered list, + * but smaller than size of tuthub + */ + @Test + public void execute_invalidTutorIndexFilteredList_failure() { + showTutorAtIndex(model, INDEX_FIRST_TUTOR); + Index outOfBoundIndex = INDEX_SECOND_TUTOR; + // ensures that outOfBoundIndex is still in bounds of tuthub list + assertTrue(outOfBoundIndex.getZeroBased() < model.getTuthub().getTutorList().size()); + + EditCommand editCommand = new EditCommand(outOfBoundIndex, + new EditTutorDescriptorBuilder().withName(VALID_NAME_BOB).build()); + + assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_TUTOR_DISPLAYED_INDEX); + } + + @Test + public void equals() { + final EditCommand standardCommand = new EditCommand(INDEX_FIRST_TUTOR, DESC_AMY); + + // same values -> returns true + EditTutorDescriptor copyDescriptor = new EditTutorDescriptor(DESC_AMY); + EditCommand commandWithSameValues = new EditCommand(INDEX_FIRST_TUTOR, copyDescriptor); + assertTrue(standardCommand.equals(commandWithSameValues)); + + // same object -> returns true + assertTrue(standardCommand.equals(standardCommand)); + + // null -> returns false + assertFalse(standardCommand.equals(null)); + + // different types -> returns false + assertFalse(standardCommand.equals(new ClearCommand())); + + // different index -> returns false + assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_TUTOR, DESC_AMY))); + + // different descriptor -> returns false + assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_TUTOR, DESC_BOB))); + } + +} diff --git a/src/test/java/tuthub/logic/commands/EditTutorDescriptorTest.java b/src/test/java/tuthub/logic/commands/EditTutorDescriptorTest.java new file mode 100644 index 00000000000..fbb635203fd --- /dev/null +++ b/src/test/java/tuthub/logic/commands/EditTutorDescriptorTest.java @@ -0,0 +1,68 @@ +package tuthub.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tuthub.logic.commands.CommandTestUtil.DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.VALID_YEAR_BOB; + +import org.junit.jupiter.api.Test; + +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.testutil.EditTutorDescriptorBuilder; + +public class EditTutorDescriptorTest { + + @Test + public void equals() { + // same values -> returns true + EditTutorDescriptor descriptorWithSameValues = new EditTutorDescriptor(DESC_AMY); + assertTrue(DESC_AMY.equals(descriptorWithSameValues)); + + // same object -> returns true + assertTrue(DESC_AMY.equals(DESC_AMY)); + + // null -> returns false + assertFalse(DESC_AMY.equals(null)); + + // different types -> returns false + assertFalse(DESC_AMY.equals(5)); + + // different values -> returns false + assertFalse(DESC_AMY.equals(DESC_BOB)); + + // different name -> returns false + EditTutorDescriptor editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different phone -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different email -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different module -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withModule(VALID_MODULE_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different year -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withYear(VALID_YEAR_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different address -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + + // different tags -> returns false + editedAmy = new EditTutorDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build(); + assertFalse(DESC_AMY.equals(editedAmy)); + } +} diff --git a/src/test/java/seedu/address/logic/commands/ExitCommandTest.java b/src/test/java/tuthub/logic/commands/ExitCommandTest.java similarity index 60% rename from src/test/java/seedu/address/logic/commands/ExitCommandTest.java rename to src/test/java/tuthub/logic/commands/ExitCommandTest.java index 9533c473875..d8ebfb9132f 100644 --- a/src/test/java/seedu/address/logic/commands/ExitCommandTest.java +++ b/src/test/java/tuthub/logic/commands/ExitCommandTest.java @@ -1,12 +1,12 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.ExitCommand.MESSAGE_EXIT_ACKNOWLEDGEMENT; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.logic.commands.ExitCommand.MESSAGE_EXIT_ACKNOWLEDGEMENT; import org.junit.jupiter.api.Test; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; +import tuthub.model.Model; +import tuthub.model.ModelManager; public class ExitCommandTest { private Model model = new ModelManager(); diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/tuthub/logic/commands/FindCommandTest.java similarity index 66% rename from src/test/java/seedu/address/logic/commands/FindCommandTest.java rename to src/test/java/tuthub/logic/commands/FindCommandTest.java index 9b15db28bbb..d299a8d2279 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/tuthub/logic/commands/FindCommandTest.java @@ -1,24 +1,24 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.commons.core.Messages.MESSAGE_PERSONS_LISTED_OVERVIEW; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.testutil.TypicalPersons.CARL; -import static seedu.address.testutil.TypicalPersons.ELLE; -import static seedu.address.testutil.TypicalPersons.FIONA; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import static tuthub.commons.core.Messages.MESSAGE_TUTORS_LISTED_OVERVIEW; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.testutil.TypicalTutors.CARL; +import static tuthub.testutil.TypicalTutors.ELLE; +import static tuthub.testutil.TypicalTutors.FIONA; +import static tuthub.testutil.TypicalTutors.getTypicalAddressBook; import java.util.Arrays; import java.util.Collections; import org.junit.jupiter.api.Test; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; +import tuthub.model.tutor.NameContainsKeywordsPredicate; /** * Contains integration tests (interaction with the Model) for {@code FindCommand}. @@ -50,28 +50,28 @@ public void equals() { // null -> returns false assertFalse(findFirstCommand.equals(null)); - // different person -> returns false + // different tutor -> returns false assertFalse(findFirstCommand.equals(findSecondCommand)); } @Test - public void execute_zeroKeywords_noPersonFound() { - String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 0); + public void execute_zeroKeywords_noTutorFound() { + String expectedMessage = String.format(MESSAGE_TUTORS_LISTED_OVERVIEW, 0); NameContainsKeywordsPredicate predicate = preparePredicate(" "); FindCommand command = new FindCommand(predicate); - expectedModel.updateFilteredPersonList(predicate); + expectedModel.updateFilteredTutorList(predicate); assertCommandSuccess(command, model, expectedMessage, expectedModel); - assertEquals(Collections.emptyList(), model.getFilteredPersonList()); + assertEquals(Collections.emptyList(), model.getFilteredTutorList()); } @Test - public void execute_multipleKeywords_multiplePersonsFound() { - String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 3); + public void execute_multipleKeywords_multipleTutorsFound() { + String expectedMessage = String.format(MESSAGE_TUTORS_LISTED_OVERVIEW, 3); NameContainsKeywordsPredicate predicate = preparePredicate("Kurz Elle Kunz"); FindCommand command = new FindCommand(predicate); - expectedModel.updateFilteredPersonList(predicate); + expectedModel.updateFilteredTutorList(predicate); assertCommandSuccess(command, model, expectedMessage, expectedModel); - assertEquals(Arrays.asList(CARL, ELLE, FIONA), model.getFilteredPersonList()); + assertEquals(Arrays.asList(CARL, ELLE, FIONA), model.getFilteredTutorList()); } /** diff --git a/src/test/java/seedu/address/logic/commands/HelpCommandTest.java b/src/test/java/tuthub/logic/commands/HelpCommandTest.java similarity index 61% rename from src/test/java/seedu/address/logic/commands/HelpCommandTest.java rename to src/test/java/tuthub/logic/commands/HelpCommandTest.java index 4904fc4352e..3a382d3e713 100644 --- a/src/test/java/seedu/address/logic/commands/HelpCommandTest.java +++ b/src/test/java/tuthub/logic/commands/HelpCommandTest.java @@ -1,12 +1,12 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.HelpCommand.SHOWING_HELP_MESSAGE; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.logic.commands.HelpCommand.SHOWING_HELP_MESSAGE; import org.junit.jupiter.api.Test; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; +import tuthub.model.Model; +import tuthub.model.ModelManager; public class HelpCommandTest { private Model model = new ModelManager(); diff --git a/src/test/java/seedu/address/logic/commands/ListCommandTest.java b/src/test/java/tuthub/logic/commands/ListCommandTest.java similarity index 61% rename from src/test/java/seedu/address/logic/commands/ListCommandTest.java rename to src/test/java/tuthub/logic/commands/ListCommandTest.java index 435ff1f7275..d4111a389e4 100644 --- a/src/test/java/seedu/address/logic/commands/ListCommandTest.java +++ b/src/test/java/tuthub/logic/commands/ListCommandTest.java @@ -1,16 +1,16 @@ -package seedu.address.logic.commands; +package tuthub.logic.commands; -import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import static tuthub.logic.commands.CommandTestUtil.assertCommandSuccess; +import static tuthub.logic.commands.CommandTestUtil.showTutorAtIndex; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; +import static tuthub.testutil.TypicalTutors.getTypicalAddressBook; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; +import tuthub.model.Model; +import tuthub.model.ModelManager; +import tuthub.model.UserPrefs; /** * Contains integration tests (interaction with the Model) and unit tests for ListCommand. @@ -33,7 +33,7 @@ public void execute_listIsNotFiltered_showsSameList() { @Test public void execute_listIsFiltered_showsEverything() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + showTutorAtIndex(model, INDEX_FIRST_TUTOR); assertCommandSuccess(new ListCommand(), model, ListCommand.MESSAGE_SUCCESS, expectedModel); } } diff --git a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java b/src/test/java/tuthub/logic/parser/AddCommandParserTest.java similarity index 64% rename from src/test/java/seedu/address/logic/parser/AddCommandParserTest.java rename to src/test/java/tuthub/logic/parser/AddCommandParserTest.java index 7aa47e4d2aa..caf87caf965 100644 --- a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java +++ b/src/test/java/tuthub/logic/parser/AddCommandParserTest.java @@ -1,122 +1,122 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_MODULE_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_STUDENTID_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_YEAR_DESC; -import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.MODULE_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY; -import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE; -import static seedu.address.logic.commands.CommandTestUtil.STUDENTID_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.STUDENTID_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND; -import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_MODULE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_STUDENTID_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_YEAR_BOB; -import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.YEAR_DESC_BOB; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; -import static seedu.address.testutil.TypicalPersons.AMY; -import static seedu.address.testutil.TypicalPersons.BOB; +package tuthub.logic.parser; + +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_MODULE_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_NAME_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_PHONE_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_STUDENTID_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_TAG_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_YEAR_DESC; +import static tuthub.logic.commands.CommandTestUtil.MODULE_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.MODULE_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.NAME_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.NAME_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.PHONE_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.PHONE_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY; +import static tuthub.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE; +import static tuthub.logic.commands.CommandTestUtil.STUDENTID_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.STUDENTID_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.TAG_DESC_FRIEND; +import static tuthub.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_STUDENTID_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.VALID_YEAR_BOB; +import static tuthub.logic.commands.CommandTestUtil.YEAR_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.YEAR_DESC_BOB; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseFailure; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static tuthub.testutil.TypicalTutors.AMY; +import static tuthub.testutil.TypicalTutors.BOB; import org.junit.jupiter.api.Test; -import seedu.address.logic.commands.AddCommand; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; -import seedu.address.model.tag.Tag; -import seedu.address.testutil.PersonBuilder; +import tuthub.logic.commands.AddCommand; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; +import tuthub.testutil.TutorBuilder; public class AddCommandParserTest { private AddCommandParser parser = new AddCommandParser(); @Test public void parse_allFieldsPresent_success() { - Person expectedPerson = new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND).build(); + Tutor expectedTutor = new TutorBuilder(BOB).withTags(VALID_TAG_FRIEND).build(); // whitespace only preamble assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple names - last name accepted assertParseSuccess(parser, NAME_DESC_AMY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple phones - last phone accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_AMY + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple emails - last email accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_AMY + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple modules - last module accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_AMY + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple years - last year accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_AMY + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple student ids - last student id accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_AMY + YEAR_DESC_BOB + STUDENTID_DESC_AMY + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB - + TAG_DESC_FRIEND, new AddCommand(expectedPerson)); + + TAG_DESC_FRIEND, new AddCommand(expectedTutor)); // multiple addresses - last address accepted assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_AMY + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); // multiple tags - all accepted - Person expectedPersonMultipleTags = new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND) + Tutor expectedTutorMultipleTags = new TutorBuilder(BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND) .build(); assertParseSuccess(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + MODULE_DESC_BOB + YEAR_DESC_BOB + STUDENTID_DESC_BOB + ADDRESS_DESC_BOB - + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, new AddCommand(expectedPersonMultipleTags)); + + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, new AddCommand(expectedTutorMultipleTags)); } @Test public void parse_optionalFieldsMissing_success() { // zero tags - Person expectedPerson = new PersonBuilder(AMY).withTags().build(); + Tutor expectedTutor = new TutorBuilder(AMY).withTags().build(); assertParseSuccess(parser, NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + MODULE_DESC_AMY + YEAR_DESC_AMY + STUDENTID_DESC_AMY + ADDRESS_DESC_AMY, - new AddCommand(expectedPerson)); + new AddCommand(expectedTutor)); } @Test diff --git a/src/test/java/seedu/address/logic/parser/ArgumentTokenizerTest.java b/src/test/java/tuthub/logic/parser/ArgumentTokenizerTest.java similarity index 99% rename from src/test/java/seedu/address/logic/parser/ArgumentTokenizerTest.java rename to src/test/java/tuthub/logic/parser/ArgumentTokenizerTest.java index c97308935f5..25c6af680b1 100644 --- a/src/test/java/seedu/address/logic/parser/ArgumentTokenizerTest.java +++ b/src/test/java/tuthub/logic/parser/ArgumentTokenizerTest.java @@ -1,4 +1,4 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java/seedu/address/logic/parser/CommandParserTestUtil.java b/src/test/java/tuthub/logic/parser/CommandParserTestUtil.java similarity index 89% rename from src/test/java/seedu/address/logic/parser/CommandParserTestUtil.java rename to src/test/java/tuthub/logic/parser/CommandParserTestUtil.java index 9bf1ccf1cef..57deffbb948 100644 --- a/src/test/java/seedu/address/logic/parser/CommandParserTestUtil.java +++ b/src/test/java/tuthub/logic/parser/CommandParserTestUtil.java @@ -1,9 +1,9 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static org.junit.jupiter.api.Assertions.assertEquals; -import seedu.address.logic.commands.Command; -import seedu.address.logic.parser.exceptions.ParseException; +import tuthub.logic.commands.Command; +import tuthub.logic.parser.exceptions.ParseException; /** * Contains helper methods for testing command parsers. diff --git a/src/test/java/seedu/address/logic/parser/DeleteCommandParserTest.java b/src/test/java/tuthub/logic/parser/DeleteCommandParserTest.java similarity index 67% rename from src/test/java/seedu/address/logic/parser/DeleteCommandParserTest.java rename to src/test/java/tuthub/logic/parser/DeleteCommandParserTest.java index 27eaec84450..27a1e0a37f9 100644 --- a/src/test/java/seedu/address/logic/parser/DeleteCommandParserTest.java +++ b/src/test/java/tuthub/logic/parser/DeleteCommandParserTest.java @@ -1,13 +1,13 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseFailure; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; import org.junit.jupiter.api.Test; -import seedu.address.logic.commands.DeleteCommand; +import tuthub.logic.commands.DeleteCommand; /** * As we are only doing white-box testing, our test cases do not cover path variations @@ -22,7 +22,7 @@ public class DeleteCommandParserTest { @Test public void parse_validArgs_returnsDeleteCommand() { - assertParseSuccess(parser, "1", new DeleteCommand(INDEX_FIRST_PERSON)); + assertParseSuccess(parser, "1", new DeleteCommand(INDEX_FIRST_TUTOR)); } @Test diff --git a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java b/src/test/java/tuthub/logic/parser/EditCommandParserTest.java similarity index 61% rename from src/test/java/seedu/address/logic/parser/EditCommandParserTest.java rename to src/test/java/tuthub/logic/parser/EditCommandParserTest.java index 2ff31522486..779cee43fef 100644 --- a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java +++ b/src/test/java/tuthub/logic/parser/EditCommandParserTest.java @@ -1,47 +1,47 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC; -import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC; -import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY; -import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB; -import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND; -import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY; -import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON; +package tuthub.logic.parser; + +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.EMAIL_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.EMAIL_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_NAME_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_PHONE_DESC; +import static tuthub.logic.commands.CommandTestUtil.INVALID_TAG_DESC; +import static tuthub.logic.commands.CommandTestUtil.NAME_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.PHONE_DESC_AMY; +import static tuthub.logic.commands.CommandTestUtil.PHONE_DESC_BOB; +import static tuthub.logic.commands.CommandTestUtil.TAG_DESC_FRIEND; +import static tuthub.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseFailure; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; +import static tuthub.testutil.TypicalIndexes.INDEX_SECOND_TUTOR; +import static tuthub.testutil.TypicalIndexes.INDEX_THIRD_TUTOR; import org.junit.jupiter.api.Test; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Phone; -import seedu.address.model.tag.Tag; -import seedu.address.testutil.EditPersonDescriptorBuilder; +import tuthub.commons.core.index.Index; +import tuthub.logic.commands.EditCommand; +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Phone; +import tuthub.model.tag.Tag; +import tuthub.testutil.EditTutorDescriptorBuilder; public class EditCommandParserTest { @@ -94,7 +94,7 @@ public void parse_invalidValue_failure() { // is tested at {@code parse_invalidValueFollowedByValidValue_success()} assertParseFailure(parser, "1" + PHONE_DESC_BOB + INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); - // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited, + // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Tutor} being edited, // parsing it together with a valid tag results in error assertParseFailure(parser, "1" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS); assertParseFailure(parser, "1" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS); @@ -107,11 +107,11 @@ public void parse_invalidValue_failure() { @Test public void parse_allFieldsSpecified_success() { - Index targetIndex = INDEX_SECOND_PERSON; + Index targetIndex = INDEX_SECOND_TUTOR; String userInput = targetIndex.getOneBased() + PHONE_DESC_BOB + TAG_DESC_HUSBAND + EMAIL_DESC_AMY + ADDRESS_DESC_AMY + NAME_DESC_AMY + TAG_DESC_FRIEND; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY) + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withName(VALID_NAME_AMY) .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY) .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); @@ -121,10 +121,10 @@ public void parse_allFieldsSpecified_success() { @Test public void parse_someFieldsSpecified_success() { - Index targetIndex = INDEX_FIRST_PERSON; + Index targetIndex = INDEX_FIRST_TUTOR; String userInput = targetIndex.getOneBased() + PHONE_DESC_BOB + EMAIL_DESC_AMY; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB) + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withPhone(VALID_PHONE_BOB) .withEmail(VALID_EMAIL_AMY).build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); @@ -134,45 +134,45 @@ public void parse_someFieldsSpecified_success() { @Test public void parse_oneFieldSpecified_success() { // name - Index targetIndex = INDEX_THIRD_PERSON; + Index targetIndex = INDEX_THIRD_TUTOR; String userInput = targetIndex.getOneBased() + NAME_DESC_AMY; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build(); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withName(VALID_NAME_AMY).build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // phone userInput = targetIndex.getOneBased() + PHONE_DESC_AMY; - descriptor = new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_AMY).build(); + descriptor = new EditTutorDescriptorBuilder().withPhone(VALID_PHONE_AMY).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // email userInput = targetIndex.getOneBased() + EMAIL_DESC_AMY; - descriptor = new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build(); + descriptor = new EditTutorDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // address userInput = targetIndex.getOneBased() + ADDRESS_DESC_AMY; - descriptor = new EditPersonDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build(); + descriptor = new EditTutorDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // tags userInput = targetIndex.getOneBased() + TAG_DESC_FRIEND; - descriptor = new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build(); + descriptor = new EditTutorDescriptorBuilder().withTags(VALID_TAG_FRIEND).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); } @Test public void parse_multipleRepeatedFields_acceptsLast() { - Index targetIndex = INDEX_FIRST_PERSON; + Index targetIndex = INDEX_FIRST_TUTOR; String userInput = targetIndex.getOneBased() + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND + PHONE_DESC_BOB + ADDRESS_DESC_BOB + EMAIL_DESC_BOB + TAG_DESC_HUSBAND; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB) + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withPhone(VALID_PHONE_BOB) .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND) .build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); @@ -183,16 +183,16 @@ public void parse_multipleRepeatedFields_acceptsLast() { @Test public void parse_invalidValueFollowedByValidValue_success() { // no other valid values specified - Index targetIndex = INDEX_FIRST_PERSON; + Index targetIndex = INDEX_FIRST_TUTOR; String userInput = targetIndex.getOneBased() + INVALID_PHONE_DESC + PHONE_DESC_BOB; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB).build(); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withPhone(VALID_PHONE_BOB).build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); // other valid values specified userInput = targetIndex.getOneBased() + EMAIL_DESC_BOB + INVALID_PHONE_DESC + ADDRESS_DESC_BOB + PHONE_DESC_BOB; - descriptor = new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) + descriptor = new EditTutorDescriptorBuilder().withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) .withAddress(VALID_ADDRESS_BOB).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); @@ -200,10 +200,10 @@ public void parse_invalidValueFollowedByValidValue_success() { @Test public void parse_resetTags_success() { - Index targetIndex = INDEX_THIRD_PERSON; + Index targetIndex = INDEX_THIRD_TUTOR; String userInput = targetIndex.getOneBased() + TAG_EMPTY; - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withTags().build(); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder().withTags().build(); EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); diff --git a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java b/src/test/java/tuthub/logic/parser/FindCommandParserTest.java similarity index 67% rename from src/test/java/seedu/address/logic/parser/FindCommandParserTest.java rename to src/test/java/tuthub/logic/parser/FindCommandParserTest.java index 70f4f0e79c4..bb4c52c4967 100644 --- a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java +++ b/src/test/java/tuthub/logic/parser/FindCommandParserTest.java @@ -1,15 +1,15 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseFailure; +import static tuthub.logic.parser.CommandParserTestUtil.assertParseSuccess; import java.util.Arrays; import org.junit.jupiter.api.Test; -import seedu.address.logic.commands.FindCommand; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import tuthub.logic.commands.FindCommand; +import tuthub.model.tutor.NameContainsKeywordsPredicate; public class FindCommandParserTest { diff --git a/src/test/java/seedu/address/logic/parser/ParserUtilTest.java b/src/test/java/tuthub/logic/parser/ParserUtilTest.java similarity index 91% rename from src/test/java/seedu/address/logic/parser/ParserUtilTest.java rename to src/test/java/tuthub/logic/parser/ParserUtilTest.java index 4256788b1a7..5fcd6be5650 100644 --- a/src/test/java/seedu/address/logic/parser/ParserUtilTest.java +++ b/src/test/java/tuthub/logic/parser/ParserUtilTest.java @@ -1,10 +1,10 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +import static tuthub.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; import java.util.Arrays; import java.util.Collections; @@ -13,12 +13,12 @@ import org.junit.jupiter.api.Test; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Phone; -import seedu.address.model.tag.Tag; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Phone; +import tuthub.model.tag.Tag; public class ParserUtilTest { private static final String INVALID_NAME = "R@chel"; @@ -50,10 +50,10 @@ public void parseIndex_outOfRangeInput_throwsParseException() { @Test public void parseIndex_validInput_success() throws Exception { // No whitespaces - assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex("1")); + assertEquals(INDEX_FIRST_TUTOR, ParserUtil.parseIndex("1")); // Leading and trailing whitespaces - assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(" 1 ")); + assertEquals(INDEX_FIRST_TUTOR, ParserUtil.parseIndex(" 1 ")); } @Test diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/tuthub/logic/parser/TuthubParserTest.java similarity index 56% rename from src/test/java/seedu/address/logic/parser/AddressBookParserTest.java rename to src/test/java/tuthub/logic/parser/TuthubParserTest.java index d9659205b57..db9c2b6b5f1 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/tuthub/logic/parser/TuthubParserTest.java @@ -1,11 +1,11 @@ -package seedu.address.logic.parser; +package tuthub.logic.parser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +import static tuthub.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static tuthub.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalIndexes.INDEX_FIRST_TUTOR; import java.util.Arrays; import java.util.List; @@ -13,31 +13,31 @@ import org.junit.jupiter.api.Test; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.ListCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.model.person.Person; -import seedu.address.testutil.EditPersonDescriptorBuilder; -import seedu.address.testutil.PersonBuilder; -import seedu.address.testutil.PersonUtil; - -public class AddressBookParserTest { - - private final AddressBookParser parser = new AddressBookParser(); +import tuthub.logic.commands.AddCommand; +import tuthub.logic.commands.ClearCommand; +import tuthub.logic.commands.DeleteCommand; +import tuthub.logic.commands.EditCommand; +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.logic.commands.ExitCommand; +import tuthub.logic.commands.FindCommand; +import tuthub.logic.commands.HelpCommand; +import tuthub.logic.commands.ListCommand; +import tuthub.logic.parser.exceptions.ParseException; +import tuthub.model.tutor.NameContainsKeywordsPredicate; +import tuthub.model.tutor.Tutor; +import tuthub.testutil.EditTutorDescriptorBuilder; +import tuthub.testutil.TutorBuilder; +import tuthub.testutil.TutorUtil; + +public class TuthubParserTest { + + private final TuthubParser parser = new TuthubParser(); @Test public void parseCommand_add() throws Exception { - Person person = new PersonBuilder().build(); - AddCommand command = (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person)); - assertEquals(new AddCommand(person), command); + Tutor tutor = new TutorBuilder().build(); + AddCommand command = (AddCommand) parser.parseCommand(TutorUtil.getAddCommand(tutor)); + assertEquals(new AddCommand(tutor), command); } @Test @@ -49,17 +49,17 @@ public void parseCommand_clear() throws Exception { @Test public void parseCommand_delete() throws Exception { DeleteCommand command = (DeleteCommand) parser.parseCommand( - DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); - assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); + DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_TUTOR.getOneBased()); + assertEquals(new DeleteCommand(INDEX_FIRST_TUTOR), command); } @Test public void parseCommand_edit() throws Exception { - Person person = new PersonBuilder().build(); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); + Tutor tutor = new TutorBuilder().build(); + EditTutorDescriptor descriptor = new EditTutorDescriptorBuilder(tutor).build(); EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " - + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); - assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); + + INDEX_FIRST_TUTOR.getOneBased() + " " + TutorUtil.getEditTutorDescriptorDetails(descriptor)); + assertEquals(new EditCommand(INDEX_FIRST_TUTOR, descriptor), command); } @Test diff --git a/src/test/java/seedu/address/model/ModelManagerTest.java b/src/test/java/tuthub/model/ModelManagerTest.java similarity index 55% rename from src/test/java/seedu/address/model/ModelManagerTest.java rename to src/test/java/tuthub/model/ModelManagerTest.java index 2cf1418d116..fbf7499218a 100644 --- a/src/test/java/seedu/address/model/ModelManagerTest.java +++ b/src/test/java/tuthub/model/ModelManagerTest.java @@ -1,12 +1,12 @@ -package seedu.address.model; +package tuthub.model; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.testutil.TypicalPersons.BENSON; +import static tuthub.model.Model.PREDICATE_SHOW_ALL_TUTORS; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.ALICE; +import static tuthub.testutil.TypicalTutors.BENSON; import java.nio.file.Path; import java.nio.file.Paths; @@ -14,9 +14,9 @@ import org.junit.jupiter.api.Test; -import seedu.address.commons.core.GuiSettings; -import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.testutil.AddressBookBuilder; +import tuthub.commons.core.GuiSettings; +import tuthub.model.tutor.NameContainsKeywordsPredicate; +import tuthub.testutil.TuthubBuilder; public class ModelManagerTest { @@ -26,7 +26,7 @@ public class ModelManagerTest { public void constructor() { assertEquals(new UserPrefs(), modelManager.getUserPrefs()); assertEquals(new GuiSettings(), modelManager.getGuiSettings()); - assertEquals(new AddressBook(), new AddressBook(modelManager.getAddressBook())); + assertEquals(new Tuthub(), new Tuthub(modelManager.getTuthub())); } @Test @@ -37,14 +37,14 @@ public void setUserPrefs_nullUserPrefs_throwsNullPointerException() { @Test public void setUserPrefs_validUserPrefs_copiesUserPrefs() { UserPrefs userPrefs = new UserPrefs(); - userPrefs.setAddressBookFilePath(Paths.get("address/book/file/path")); + userPrefs.setTuthubFilePath(Paths.get("address/book/file/path")); userPrefs.setGuiSettings(new GuiSettings(1, 2, 3, 4)); modelManager.setUserPrefs(userPrefs); assertEquals(userPrefs, modelManager.getUserPrefs()); // Modifying userPrefs should not modify modelManager's userPrefs UserPrefs oldUserPrefs = new UserPrefs(userPrefs); - userPrefs.setAddressBookFilePath(Paths.get("new/address/book/file/path")); + userPrefs.setTuthubFilePath(Paths.get("new/address/book/file/path")); assertEquals(oldUserPrefs, modelManager.getUserPrefs()); } @@ -61,47 +61,47 @@ public void setGuiSettings_validGuiSettings_setsGuiSettings() { } @Test - public void setAddressBookFilePath_nullPath_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> modelManager.setAddressBookFilePath(null)); + public void setTuthubFilePath_nullPath_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> modelManager.setTuthubFilePath(null)); } @Test - public void setAddressBookFilePath_validPath_setsAddressBookFilePath() { + public void setTuthubFilePath_validPath_setsTuthubFilePath() { Path path = Paths.get("address/book/file/path"); - modelManager.setAddressBookFilePath(path); - assertEquals(path, modelManager.getAddressBookFilePath()); + modelManager.setTuthubFilePath(path); + assertEquals(path, modelManager.getTuthubFilePath()); } @Test - public void hasPerson_nullPerson_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> modelManager.hasPerson(null)); + public void hasTutor_nullTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> modelManager.hasTutor(null)); } @Test - public void hasPerson_personNotInAddressBook_returnsFalse() { - assertFalse(modelManager.hasPerson(ALICE)); + public void hasTutor_tutorNotInTuthub_returnsFalse() { + assertFalse(modelManager.hasTutor(ALICE)); } @Test - public void hasPerson_personInAddressBook_returnsTrue() { - modelManager.addPerson(ALICE); - assertTrue(modelManager.hasPerson(ALICE)); + public void hasTutor_tutorInTuthub_returnsTrue() { + modelManager.addTutor(ALICE); + assertTrue(modelManager.hasTutor(ALICE)); } @Test - public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() { - assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredPersonList().remove(0)); + public void getFilteredTutorList_modifyList_throwsUnsupportedOperationException() { + assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredTutorList().remove(0)); } @Test public void equals() { - AddressBook addressBook = new AddressBookBuilder().withPerson(ALICE).withPerson(BENSON).build(); - AddressBook differentAddressBook = new AddressBook(); + Tuthub tuthub = new TuthubBuilder().withTutor(ALICE).withTutor(BENSON).build(); + Tuthub differentTuthub = new Tuthub(); UserPrefs userPrefs = new UserPrefs(); // same values -> returns true - modelManager = new ModelManager(addressBook, userPrefs); - ModelManager modelManagerCopy = new ModelManager(addressBook, userPrefs); + modelManager = new ModelManager(tuthub, userPrefs); + ModelManager modelManagerCopy = new ModelManager(tuthub, userPrefs); assertTrue(modelManager.equals(modelManagerCopy)); // same object -> returns true @@ -113,20 +113,20 @@ public void equals() { // different types -> returns false assertFalse(modelManager.equals(5)); - // different addressBook -> returns false - assertFalse(modelManager.equals(new ModelManager(differentAddressBook, userPrefs))); + // different tuthub -> returns false + assertFalse(modelManager.equals(new ModelManager(differentTuthub, userPrefs))); // different filteredList -> returns false String[] keywords = ALICE.getName().fullName.split("\\s+"); - modelManager.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(keywords))); - assertFalse(modelManager.equals(new ModelManager(addressBook, userPrefs))); + modelManager.updateFilteredTutorList(new NameContainsKeywordsPredicate(Arrays.asList(keywords))); + assertFalse(modelManager.equals(new ModelManager(tuthub, userPrefs))); // resets modelManager to initial state for upcoming tests - modelManager.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + modelManager.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); // different userPrefs -> returns false UserPrefs differentUserPrefs = new UserPrefs(); - differentUserPrefs.setAddressBookFilePath(Paths.get("differentFilePath")); - assertFalse(modelManager.equals(new ModelManager(addressBook, differentUserPrefs))); + differentUserPrefs.setTuthubFilePath(Paths.get("differentFilePath")); + assertFalse(modelManager.equals(new ModelManager(tuthub, differentUserPrefs))); } } diff --git a/src/test/java/tuthub/model/TuthubTest.java b/src/test/java/tuthub/model/TuthubTest.java new file mode 100644 index 00000000000..fad9b7c3be4 --- /dev/null +++ b/src/test/java/tuthub/model/TuthubTest.java @@ -0,0 +1,102 @@ +package tuthub.model; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalPersons.ALICE; +import static tuthub.testutil.TypicalPersons.getTypicalTuthub; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import tuthub.model.person.Person; +import tuthub.model.person.exceptions.DuplicatePersonException; +import tuthub.testutil.PersonBuilder; + +public class TuthubTest { + + private final Tuthub tuthub = new Tuthub(); + + @Test + public void constructor() { + assertEquals(Collections.emptyList(), tuthbu.getPersonList()); + } + + @Test + public void resetData_null_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> tuthub.resetData(null)); + } + + @Test + public void resetData_withValidReadOnlyTuthub_replacesData() { + Tuthub newData = getTypicalTuthub(); + tuthub.resetData(newData); + assertEquals(newData, tuthub); + } + + @Test + public void resetData_withDuplicatePersons_throwsDuplicatePersonException() { + // Two persons with the same identity fields + Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) + .build(); + List newPersons = Arrays.asList(ALICE, editedAlice); + TuthubStub newData = new TuthubStub(newPersons); + + assertThrows(DuplicatePersonException.class, () -> tuthub.resetData(newData)); + } + + @Test + public void hasPerson_nullPerson_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> tuthub.hasPerson(null)); + } + + @Test + public void hasPerson_personNotInTuthub_returnsFalse() { + assertFalse(tuthub.hasPerson(ALICE)); + } + + @Test + public void hasPerson_personInTuthub_returnsTrue() { + tuthub.addPerson(ALICE); + assertTrue(tuthub.hasPerson(ALICE)); + } + + @Test + public void hasPerson_personWithSameIdentityFieldsInTuthub_returnsTrue() { + tuthub.addPerson(ALICE); + Person editedAlice = new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) + .build(); + assertTrue(tuthub.hasPerson(editedAlice)); + } + + @Test + public void getPersonList_modifyList_throwsUnsupportedOperationException() { + assertThrows(UnsupportedOperationException.class, () -> tuthub.getPersonList().remove(0)); + } + + /** + * A stub ReadOnlyTuthub whose persons list can violate interface constraints. + */ + private static class TuthubStub implements ReadOnlyTuthub { + private final ObservableList persons = FXCollections.observableArrayList(); + + TuthubStub(Collection persons) { + this.persons.setAll(persons); + } + + @Override + public ObservableList getPersonList() { + return persons; + } + } + +} diff --git a/src/test/java/seedu/address/model/UserPrefsTest.java b/src/test/java/tuthub/model/UserPrefsTest.java similarity index 68% rename from src/test/java/seedu/address/model/UserPrefsTest.java rename to src/test/java/tuthub/model/UserPrefsTest.java index b1307a70d52..3cac665bfdb 100644 --- a/src/test/java/seedu/address/model/UserPrefsTest.java +++ b/src/test/java/tuthub/model/UserPrefsTest.java @@ -1,6 +1,6 @@ -package seedu.address.model; +package tuthub.model; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; @@ -13,9 +13,9 @@ public void setGuiSettings_nullGuiSettings_throwsNullPointerException() { } @Test - public void setAddressBookFilePath_nullPath_throwsNullPointerException() { + public void setTuthubFilePath_nullPath_throwsNullPointerException() { UserPrefs userPrefs = new UserPrefs(); - assertThrows(NullPointerException.class, () -> userPrefs.setAddressBookFilePath(null)); + assertThrows(NullPointerException.class, () -> userPrefs.setTuthubFilePath(null)); } } diff --git a/src/test/java/seedu/address/model/person/AddressTest.java b/src/test/java/tuthub/model/person/AddressTest.java similarity index 92% rename from src/test/java/seedu/address/model/person/AddressTest.java rename to src/test/java/tuthub/model/person/AddressTest.java index dcd3be87b3a..c52b5c585b4 100644 --- a/src/test/java/seedu/address/model/person/AddressTest.java +++ b/src/test/java/tuthub/model/person/AddressTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.person; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/person/EmailTest.java b/src/test/java/tuthub/model/person/EmailTest.java similarity index 97% rename from src/test/java/seedu/address/model/person/EmailTest.java rename to src/test/java/tuthub/model/person/EmailTest.java index bbcc6c8c98e..7226c77602e 100644 --- a/src/test/java/seedu/address/model/person/EmailTest.java +++ b/src/test/java/tuthub/model/person/EmailTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/person/ModuleTest.java b/src/test/java/tuthub/model/person/ModuleTest.java similarity index 94% rename from src/test/java/seedu/address/model/person/ModuleTest.java rename to src/test/java/tuthub/model/person/ModuleTest.java index 89e2c31f832..a2ca56d0a76 100644 --- a/src/test/java/seedu/address/model/person/ModuleTest.java +++ b/src/test/java/tuthub/model/person/ModuleTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java b/src/test/java/tuthub/model/person/NameContainsKeywordsPredicateTest.java similarity index 77% rename from src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java rename to src/test/java/tuthub/model/person/NameContainsKeywordsPredicateTest.java index f136664e017..d73f6af278d 100644 --- a/src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java +++ b/src/test/java/tuthub/model/person/NameContainsKeywordsPredicateTest.java @@ -1,4 +1,4 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test; -import seedu.address.testutil.PersonBuilder; +import tuthub.testutil.TutorBuilder; public class NameContainsKeywordsPredicateTest { @@ -34,7 +34,7 @@ public void equals() { // null -> returns false assertFalse(firstPredicate.equals(null)); - // different person -> returns false + // different tutor -> returns false assertFalse(firstPredicate.equals(secondPredicate)); } @@ -42,34 +42,34 @@ public void equals() { public void test_nameContainsKeywords_returnsTrue() { // One keyword NameContainsKeywordsPredicate predicate = new NameContainsKeywordsPredicate(Collections.singletonList("Alice")); - assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); + assertTrue(predicate.test(new TutorBuilder().withName("Alice Bob").build())); // Multiple keywords predicate = new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")); - assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); + assertTrue(predicate.test(new TutorBuilder().withName("Alice Bob").build())); // Only one matching keyword predicate = new NameContainsKeywordsPredicate(Arrays.asList("Bob", "Carol")); - assertTrue(predicate.test(new PersonBuilder().withName("Alice Carol").build())); + assertTrue(predicate.test(new TutorBuilder().withName("Alice Carol").build())); // Mixed-case keywords predicate = new NameContainsKeywordsPredicate(Arrays.asList("aLIce", "bOB")); - assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); + assertTrue(predicate.test(new TutorBuilder().withName("Alice Bob").build())); } @Test public void test_nameDoesNotContainKeywords_returnsFalse() { // Zero keywords NameContainsKeywordsPredicate predicate = new NameContainsKeywordsPredicate(Collections.emptyList()); - assertFalse(predicate.test(new PersonBuilder().withName("Alice").build())); + assertFalse(predicate.test(new TutorBuilder().withName("Alice").build())); // Non-matching keyword predicate = new NameContainsKeywordsPredicate(Arrays.asList("Carol")); - assertFalse(predicate.test(new PersonBuilder().withName("Alice Bob").build())); + assertFalse(predicate.test(new TutorBuilder().withName("Alice Bob").build())); // Keywords match phone, email and address, but does not match name predicate = new NameContainsKeywordsPredicate(Arrays.asList("12345", "alice@email.com", "Main", "Street")); - assertFalse(predicate.test(new PersonBuilder().withName("Alice").withPhone("12345") + assertFalse(predicate.test(new TutorBuilder().withName("Alice").withPhone("12345") .withEmail("alice@email.com").withAddress("Main Street").build())); } } diff --git a/src/test/java/seedu/address/model/person/NameTest.java b/src/test/java/tuthub/model/person/NameTest.java similarity index 93% rename from src/test/java/seedu/address/model/person/NameTest.java rename to src/test/java/tuthub/model/person/NameTest.java index c9801392874..7274128ffe2 100644 --- a/src/test/java/seedu/address/model/person/NameTest.java +++ b/src/test/java/tuthub/model/person/NameTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/person/PhoneTest.java b/src/test/java/tuthub/model/person/PhoneTest.java similarity index 93% rename from src/test/java/seedu/address/model/person/PhoneTest.java rename to src/test/java/tuthub/model/person/PhoneTest.java index 8dd52766a5f..c7aa07f4532 100644 --- a/src/test/java/seedu/address/model/person/PhoneTest.java +++ b/src/test/java/tuthub/model/person/PhoneTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/person/StudentIdTest.java b/src/test/java/tuthub/model/person/StudentIdTest.java similarity index 95% rename from src/test/java/seedu/address/model/person/StudentIdTest.java rename to src/test/java/tuthub/model/person/StudentIdTest.java index 4a53aa00f50..c862cbe8164 100644 --- a/src/test/java/seedu/address/model/person/StudentIdTest.java +++ b/src/test/java/tuthub/model/person/StudentIdTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/tuthub/model/person/TutorTest.java b/src/test/java/tuthub/model/person/TutorTest.java new file mode 100644 index 00000000000..72f803efffa --- /dev/null +++ b/src/test/java/tuthub/model/person/TutorTest.java @@ -0,0 +1,91 @@ +package tuthub.model.tutor; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.ALICE; +import static tuthub.testutil.TypicalTutors.BOB; + +import org.junit.jupiter.api.Test; + +import tuthub.testutil.TutorBuilder; + +public class TutorTest { + + @Test + public void asObservableList_modifyList_throwsUnsupportedOperationException() { + Tutor tutor = new TutorBuilder().build(); + assertThrows(UnsupportedOperationException.class, () -> tutor.getTags().remove(0)); + } + + @Test + public void isSameTutor() { + // same object -> returns true + assertTrue(ALICE.isSameTutor(ALICE)); + + // null -> returns false + assertFalse(ALICE.isSameTutor(null)); + + // same name, all other attributes different -> returns true + Tutor editedAlice = new TutorBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB) + .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build(); + assertTrue(ALICE.isSameTutor(editedAlice)); + + // different name, all other attributes same -> returns false + editedAlice = new TutorBuilder(ALICE).withName(VALID_NAME_BOB).build(); + assertFalse(ALICE.isSameTutor(editedAlice)); + + // name differs in case, all other attributes same -> returns false + Tutor editedBob = new TutorBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build(); + assertFalse(BOB.isSameTutor(editedBob)); + + // name has trailing spaces, all other attributes same -> returns false + String nameWithTrailingSpaces = VALID_NAME_BOB + " "; + editedBob = new TutorBuilder(BOB).withName(nameWithTrailingSpaces).build(); + assertFalse(BOB.isSameTutor(editedBob)); + } + + @Test + public void equals() { + // same values -> returns true + Tutor aliceCopy = new TutorBuilder(ALICE).build(); + assertTrue(ALICE.equals(aliceCopy)); + + // same object -> returns true + assertTrue(ALICE.equals(ALICE)); + + // null -> returns false + assertFalse(ALICE.equals(null)); + + // different type -> returns false + assertFalse(ALICE.equals(5)); + + // different tutor -> returns false + assertFalse(ALICE.equals(BOB)); + + // different name -> returns false + Tutor editedAlice = new TutorBuilder(ALICE).withName(VALID_NAME_BOB).build(); + assertFalse(ALICE.equals(editedAlice)); + + // different phone -> returns false + editedAlice = new TutorBuilder(ALICE).withPhone(VALID_PHONE_BOB).build(); + assertFalse(ALICE.equals(editedAlice)); + + // different email -> returns false + editedAlice = new TutorBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build(); + assertFalse(ALICE.equals(editedAlice)); + + // different address -> returns false + editedAlice = new TutorBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build(); + assertFalse(ALICE.equals(editedAlice)); + + // different tags -> returns false + editedAlice = new TutorBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build(); + assertFalse(ALICE.equals(editedAlice)); + } +} diff --git a/src/test/java/tuthub/model/person/UniqueTutorListTest.java b/src/test/java/tuthub/model/person/UniqueTutorListTest.java new file mode 100644 index 00000000000..02448534767 --- /dev/null +++ b/src/test/java/tuthub/model/person/UniqueTutorListTest.java @@ -0,0 +1,170 @@ +package tuthub.model.tutor; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.ALICE; +import static tuthub.testutil.TypicalTutors.BOB; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import tuthub.model.tutor.exceptions.DuplicateTutorException; +import tuthub.model.tutor.exceptions.TutorNotFoundException; +import tuthub.testutil.TutorBuilder; + +public class UniqueTutorListTest { + + private final UniqueTutorList uniqueTutorList = new UniqueTutorList(); + + @Test + public void contains_nullTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.contains(null)); + } + + @Test + public void contains_tutorNotInList_returnsFalse() { + assertFalse(uniqueTutorList.contains(ALICE)); + } + + @Test + public void contains_tutorInList_returnsTrue() { + uniqueTutorList.add(ALICE); + assertTrue(uniqueTutorList.contains(ALICE)); + } + + @Test + public void contains_tutorWithSameIdentityFieldsInList_returnsTrue() { + uniqueTutorList.add(ALICE); + Tutor editedAlice = new TutorBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) + .build(); + assertTrue(uniqueTutorList.contains(editedAlice)); + } + + @Test + public void add_nullTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.add(null)); + } + + @Test + public void add_duplicateTutor_throwsDuplicateTutorException() { + uniqueTutorList.add(ALICE); + assertThrows(DuplicateTutorException.class, () -> uniqueTutorList.add(ALICE)); + } + + @Test + public void setTutor_nullTargetTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.setTutor(null, ALICE)); + } + + @Test + public void setTutor_nullEditedTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.setTutor(ALICE, null)); + } + + @Test + public void setTutor_targetTutorNotInList_throwsTutorNotFoundException() { + assertThrows(TutorNotFoundException.class, () -> uniqueTutorList.setTutor(ALICE, ALICE)); + } + + @Test + public void setTutor_editedTutorIsSameTutor_success() { + uniqueTutorList.add(ALICE); + uniqueTutorList.setTutor(ALICE, ALICE); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + expectedUniqueTutorList.add(ALICE); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutor_editedTutorHasSameIdentity_success() { + uniqueTutorList.add(ALICE); + Tutor editedAlice = new TutorBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND) + .build(); + uniqueTutorList.setTutor(ALICE, editedAlice); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + expectedUniqueTutorList.add(editedAlice); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutor_editedTutorHasDifferentIdentity_success() { + uniqueTutorList.add(ALICE); + uniqueTutorList.setTutor(ALICE, BOB); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + expectedUniqueTutorList.add(BOB); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutor_editedTutorHasNonUniqueIdentity_throwsDuplicateTutorException() { + uniqueTutorList.add(ALICE); + uniqueTutorList.add(BOB); + assertThrows(DuplicateTutorException.class, () -> uniqueTutorList.setTutor(ALICE, BOB)); + } + + @Test + public void remove_nullTutor_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.remove(null)); + } + + @Test + public void remove_tutorDoesNotExist_throwsTutorNotFoundException() { + assertThrows(TutorNotFoundException.class, () -> uniqueTutorList.remove(ALICE)); + } + + @Test + public void remove_existingTutor_removesTutor() { + uniqueTutorList.add(ALICE); + uniqueTutorList.remove(ALICE); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutors_nullUniqueTutorList_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.setTutors((UniqueTutorList) null)); + } + + @Test + public void setTutors_uniqueTutorList_replacesOwnListWithProvidedUniqueTutorList() { + uniqueTutorList.add(ALICE); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + expectedUniqueTutorList.add(BOB); + uniqueTutorList.setTutors(expectedUniqueTutorList); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutors_nullList_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> uniqueTutorList.setTutors((List) null)); + } + + @Test + public void setTutors_list_replacesOwnListWithProvidedList() { + uniqueTutorList.add(ALICE); + List tutorList = Collections.singletonList(BOB); + uniqueTutorList.setTutors(tutorList); + UniqueTutorList expectedUniqueTutorList = new UniqueTutorList(); + expectedUniqueTutorList.add(BOB); + assertEquals(expectedUniqueTutorList, uniqueTutorList); + } + + @Test + public void setTutors_listWithDuplicateTutors_throwsDuplicateTutorException() { + List listWithDuplicateTutors = Arrays.asList(ALICE, ALICE); + assertThrows(DuplicateTutorException.class, () -> uniqueTutorList.setTutors(listWithDuplicateTutors)); + } + + @Test + public void asUnmodifiableObservableList_modifyList_throwsUnsupportedOperationException() { + assertThrows(UnsupportedOperationException.class, () + -> uniqueTutorList.asUnmodifiableObservableList().remove(0)); + } +} diff --git a/src/test/java/seedu/address/model/person/YearTest.java b/src/test/java/tuthub/model/person/YearTest.java similarity index 93% rename from src/test/java/seedu/address/model/person/YearTest.java rename to src/test/java/tuthub/model/person/YearTest.java index 9314026d6b1..5dce56e54f1 100644 --- a/src/test/java/seedu/address/model/person/YearTest.java +++ b/src/test/java/tuthub/model/person/YearTest.java @@ -1,8 +1,8 @@ -package seedu.address.model.person; +package tuthub.model.tutor; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/tag/TagTest.java b/src/test/java/tuthub/model/tag/TagTest.java similarity index 86% rename from src/test/java/seedu/address/model/tag/TagTest.java rename to src/test/java/tuthub/model/tag/TagTest.java index 64d07d79ee2..709be1b6be9 100644 --- a/src/test/java/seedu/address/model/tag/TagTest.java +++ b/src/test/java/tuthub/model/tag/TagTest.java @@ -1,6 +1,6 @@ -package seedu.address.model.tag; +package tuthub.model.tag; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java b/src/test/java/tuthub/storage/JsonAdaptedTutorTest.java similarity index 69% rename from src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java rename to src/test/java/tuthub/storage/JsonAdaptedTutorTest.java index c46b27742d5..ff4340afed8 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java +++ b/src/test/java/tuthub/storage/JsonAdaptedTutorTest.java @@ -1,9 +1,9 @@ -package seedu.address.storage; +package tuthub.storage; import static org.junit.jupiter.api.Assertions.assertEquals; -import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.BENSON; +import static tuthub.storage.JsonAdaptedTutor.MISSING_FIELD_MESSAGE_FORMAT; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.BENSON; import java.util.ArrayList; import java.util.List; @@ -11,16 +11,16 @@ import org.junit.jupiter.api.Test; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Module; -import seedu.address.model.person.Name; -import seedu.address.model.person.Phone; -import seedu.address.model.person.StudentId; -import seedu.address.model.person.Year; +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; -public class JsonAdaptedPersonTest { +public class JsonAdaptedTutorTest { private static final String INVALID_NAME = "R@chel"; private static final String INVALID_PHONE = "+651234"; private static final String INVALID_ADDRESS = " "; @@ -43,140 +43,140 @@ public class JsonAdaptedPersonTest { .collect(Collectors.toList()); @Test - public void toModelType_validPersonDetails_returnsPerson() throws Exception { - JsonAdaptedPerson person = new JsonAdaptedPerson(BENSON); - assertEquals(BENSON, person.toModelType()); + public void toModelType_validTutorDetails_returnsTutor() throws Exception { + JsonAdaptedTutor tutor = new JsonAdaptedTutor(BENSON); + assertEquals(BENSON, tutor.toModelType()); } @Test public void toModelType_invalidName_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Name.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullName_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = new JsonAdaptedTutor(null, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidPhone_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Phone.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullPhone_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, + JsonAdaptedTutor tutor = new JsonAdaptedTutor(VALID_NAME, null, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidModule_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Module.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullModule_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Module.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidYear_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, INVALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Year.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullYear_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, null, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Year.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidEmail_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Email.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullEmail_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, + JsonAdaptedTutor tutor = new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, null, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidStudentId_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, INVALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = StudentId.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullStudentId_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, null, VALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, StudentId.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidAddress_throwsIllegalValueException() { - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, INVALID_ADDRESS, VALID_COMMENT, VALID_TAGS); String expectedMessage = Address.MESSAGE_CONSTRAINTS; - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_nullAddress_throwsIllegalValueException() { - JsonAdaptedPerson person = new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, + JsonAdaptedTutor tutor = new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, null, VALID_COMMENT, VALID_TAGS); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()); - assertThrows(IllegalValueException.class, expectedMessage, person::toModelType); + assertThrows(IllegalValueException.class, expectedMessage, tutor::toModelType); } @Test public void toModelType_invalidTags_throwsIllegalValueException() { List invalidTags = new ArrayList<>(VALID_TAGS); invalidTags.add(new JsonAdaptedTag(INVALID_TAG)); - JsonAdaptedPerson person = - new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, + JsonAdaptedTutor tutor = + new JsonAdaptedTutor(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_MODULE, VALID_YEAR, VALID_STUDENTID, VALID_ADDRESS, VALID_COMMENT, invalidTags); - assertThrows(IllegalValueException.class, person::toModelType); + assertThrows(IllegalValueException.class, tutor::toModelType); } } diff --git a/src/test/java/tuthub/storage/JsonSerializableTuthubTest.java b/src/test/java/tuthub/storage/JsonSerializableTuthubTest.java new file mode 100644 index 00000000000..be398691a1c --- /dev/null +++ b/src/test/java/tuthub/storage/JsonSerializableTuthubTest.java @@ -0,0 +1,47 @@ +package tuthub.storage; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static tuthub.testutil.Assert.assertThrows; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.junit.jupiter.api.Test; + +import tuthub.commons.exceptions.IllegalValueException; +import tuthub.commons.util.JsonUtil; +import tuthub.model.Tuthub; +import tuthub.testutil.TypicalTutors; + +public class JsonSerializableTuthubTest { + + private static final Path TEST_DATA_FOLDER = Paths.get("src", "test", "data", "JsonSerializableTuthubTest"); + private static final Path TYPICAL_TUTORS_FILE = TEST_DATA_FOLDER.resolve("typicalTutorsTuthub.json"); + private static final Path INVALID_TUTOR_FILE = TEST_DATA_FOLDER.resolve("invalidTutorTuthub.json"); + private static final Path DUPLICATE_TUTOR_FILE = TEST_DATA_FOLDER.resolve("duplicateTutorTuthub.json"); + + @Test + public void toModelType_typicalTutorsFile_success() throws Exception { + JsonSerializableTuthub dataFromFile = JsonUtil.readJsonFile(TYPICAL_TUTORS_FILE, + JsonSerializableTuthub.class).get(); + Tuthub tuthubFromFile = dataFromFile.toModelType(); + Tuthub typicalTutorsTuthub = TypicalTutors.getTypicalTuthub(); + assertEquals(tuthubFromFile, typicalTutorsTuthub); + } + + @Test + public void toModelType_invalidTutorFile_throwsIllegalValueException() throws Exception { + JsonSerializableTuthub dataFromFile = JsonUtil.readJsonFile(INVALID_TUTOR_FILE, + JsonSerializableTuthub.class).get(); + assertThrows(IllegalValueException.class, dataFromFile::toModelType); + } + + @Test + public void toModelType_duplicateTutors_throwsIllegalValueException() throws Exception { + JsonSerializableTuthub dataFromFile = JsonUtil.readJsonFile(DUPLICATE_TUTOR_FILE, + JsonSerializableTuthub.class).get(); + assertThrows(IllegalValueException.class, JsonSerializableTuthub.MESSAGE_DUPLICATE_TUTOR, + dataFromFile::toModelType); + } + +} diff --git a/src/test/java/tuthub/storage/JsonTuthubStorageTest.java b/src/test/java/tuthub/storage/JsonTuthubStorageTest.java new file mode 100644 index 00000000000..48eda98ceec --- /dev/null +++ b/src/test/java/tuthub/storage/JsonTuthubStorageTest.java @@ -0,0 +1,110 @@ +package tuthub.storage; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static tuthub.testutil.Assert.assertThrows; +import static tuthub.testutil.TypicalTutors.ALICE; +import static tuthub.testutil.TypicalTutors.HOON; +import static tuthub.testutil.TypicalTutors.IDA; +import static tuthub.testutil.TypicalTutors.getTypicalTuthub; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.Tuthub; +import tuthub.model.ReadOnlyTuthub; + +public class JsonTuthubStorageTest { + private static final Path TEST_DATA_FOLDER = Paths.get("src", "test", "data", "JsonTuthubStorageTest"); + + @TempDir + public Path testFolder; + + @Test + public void readTuthub_nullFilePath_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> readTuthub(null)); + } + + private java.util.Optional readTuthub(String filePath) throws Exception { + return new JsonTuthubStorage(Paths.get(filePath)).readTuthub(addToTestDataPathIfNotNull(filePath)); + } + + private Path addToTestDataPathIfNotNull(String prefsFileInTestDataFolder) { + return prefsFileInTestDataFolder != null + ? TEST_DATA_FOLDER.resolve(prefsFileInTestDataFolder) + : null; + } + + @Test + public void read_missingFile_emptyResult() throws Exception { + assertFalse(readTuthub("NonExistentFile.json").isPresent()); + } + + @Test + public void read_notJsonFormat_exceptionThrown() { + assertThrows(DataConversionException.class, () -> readTuthub("notJsonFormatTuthub.json")); + } + + @Test + public void readTuthub_invalidTutorTuthub_throwDataConversionException() { + assertThrows(DataConversionException.class, () -> readTuthub("invalidTutorTuthub.json")); + } + + @Test + public void readTuthub_invalidAndValidTutorTuthub_throwDataConversionException() { + assertThrows(DataConversionException.class, () -> readTuthub("invalidAndValidTutorTuthub.json")); + } + + @Test + public void readAndSaveTuthub_allInOrder_success() throws Exception { + Path filePath = testFolder.resolve("TempTuthub.json"); + Tuthub original = getTypicalTuthub(); + JsonTuthubStorage jsonTuthubStorage = new JsonTuthubStorage(filePath); + + // Save in new file and read back + jsonTuthubStorage.saveTuthub(original, filePath); + ReadOnlyTuthub readBack = jsonTuthubStorage.readTuthub(filePath).get(); + assertEquals(original, new Tuthub(readBack)); + + // Modify data, overwrite exiting file, and read back + original.addTutor(HOON); + original.removeTutor(ALICE); + jsonTuthubStorage.saveTuthub(original, filePath); + readBack = jsonTuthubStorage.readTuthub(filePath).get(); + assertEquals(original, new Tuthub(readBack)); + + // Save and read without specifying file path + original.addTutor(IDA); + jsonTuthubStorage.saveTuthub(original); // file path not specified + readBack = jsonTuthubStorage.readTuthub().get(); // file path not specified + assertEquals(original, new Tuthub(readBack)); + + } + + @Test + public void saveTuthub_nullTuthub_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> saveTuthub(null, "SomeFile.json")); + } + + /** + * Saves {@code tuthub} at the specified {@code filePath}. + */ + private void saveTuthub(ReadOnlyTuthub tuthub, String filePath) { + try { + new JsonTuthubStorage(Paths.get(filePath)) + .saveTuthub(tuthub, addToTestDataPathIfNotNull(filePath)); + } catch (IOException ioe) { + throw new AssertionError("There should not be an error writing to the file.", ioe); + } + } + + @Test + public void saveTuthub_nullFilePath_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> saveTuthub(new Tuthub(), null)); + } +} diff --git a/src/test/java/seedu/address/storage/JsonUserPrefsStorageTest.java b/src/test/java/tuthub/storage/JsonUserPrefsStorageTest.java similarity index 93% rename from src/test/java/seedu/address/storage/JsonUserPrefsStorageTest.java rename to src/test/java/tuthub/storage/JsonUserPrefsStorageTest.java index 16f33f4a6bb..8141b6b7204 100644 --- a/src/test/java/seedu/address/storage/JsonUserPrefsStorageTest.java +++ b/src/test/java/tuthub/storage/JsonUserPrefsStorageTest.java @@ -1,8 +1,8 @@ -package seedu.address.storage; +package tuthub.storage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import java.io.IOException; import java.nio.file.Path; @@ -12,9 +12,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import seedu.address.commons.core.GuiSettings; -import seedu.address.commons.exceptions.DataConversionException; -import seedu.address.model.UserPrefs; +import tuthub.commons.core.GuiSettings; +import tuthub.commons.exceptions.DataConversionException; +import tuthub.model.UserPrefs; public class JsonUserPrefsStorageTest { @@ -73,7 +73,7 @@ public void readUserPrefs_extraValuesInFile_extraValuesIgnored() throws DataConv private UserPrefs getTypicalUserPrefs() { UserPrefs userPrefs = new UserPrefs(); userPrefs.setGuiSettings(new GuiSettings(1000, 500, 300, 100)); - userPrefs.setAddressBookFilePath(Paths.get("addressbook.json")); + userPrefs.setTuthubFilePath(Paths.get("tuthub.json")); return userPrefs; } diff --git a/src/test/java/seedu/address/storage/StorageManagerTest.java b/src/test/java/tuthub/storage/StorageManagerTest.java similarity index 60% rename from src/test/java/seedu/address/storage/StorageManagerTest.java rename to src/test/java/tuthub/storage/StorageManagerTest.java index 99a16548970..42f24bca139 100644 --- a/src/test/java/seedu/address/storage/StorageManagerTest.java +++ b/src/test/java/tuthub/storage/StorageManagerTest.java @@ -1,8 +1,8 @@ -package seedu.address.storage; +package tuthub.storage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import static tuthub.testutil.TypicalPersons.getTypicalTuthub; import java.nio.file.Path; @@ -10,10 +10,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import seedu.address.commons.core.GuiSettings; -import seedu.address.model.AddressBook; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.UserPrefs; +import tuthub.commons.core.GuiSettings; +import tuthub.model.Tuthub; +import tuthub.model.ReadOnlyTuthub; +import tuthub.model.UserPrefs; public class StorageManagerTest { @@ -24,9 +24,9 @@ public class StorageManagerTest { @BeforeEach public void setUp() { - JsonAddressBookStorage addressBookStorage = new JsonAddressBookStorage(getTempFilePath("ab")); + JsonTuthubStorage tuthubStorage = new JsonTuthubStorage(getTempFilePath("ab")); JsonUserPrefsStorage userPrefsStorage = new JsonUserPrefsStorage(getTempFilePath("prefs")); - storageManager = new StorageManager(addressBookStorage, userPrefsStorage); + storageManager = new StorageManager(tuthubStorage, userPrefsStorage); } private Path getTempFilePath(String fileName) { @@ -48,21 +48,21 @@ public void prefsReadSave() throws Exception { } @Test - public void addressBookReadSave() throws Exception { + public void tuthubReadSave() throws Exception { /* * Note: This is an integration test that verifies the StorageManager is properly wired to the - * {@link JsonAddressBookStorage} class. - * More extensive testing of UserPref saving/reading is done in {@link JsonAddressBookStorageTest} class. + * {@link JsonTuthubStorage} class. + * More extensive testing of UserPref saving/reading is done in {@link JsonTuthubStorageTest} class. */ - AddressBook original = getTypicalAddressBook(); - storageManager.saveAddressBook(original); - ReadOnlyAddressBook retrieved = storageManager.readAddressBook().get(); - assertEquals(original, new AddressBook(retrieved)); + Tuthub original = getTypicalTuthub(); + storageManager.saveTuthub(original); + ReadOnlyTuthub retrieved = storageManager.readTuthub().get(); + assertEquals(original, new Tuthub(retrieved)); } @Test - public void getAddressBookFilePath() { - assertNotNull(storageManager.getAddressBookFilePath()); + public void getTuthubFilePath() { + assertNotNull(storageManager.getTuthubFilePath()); } } diff --git a/src/test/java/seedu/address/testutil/Assert.java b/src/test/java/tuthub/testutil/Assert.java similarity index 97% rename from src/test/java/seedu/address/testutil/Assert.java rename to src/test/java/tuthub/testutil/Assert.java index 9863093bd6e..f7f849f0108 100644 --- a/src/test/java/seedu/address/testutil/Assert.java +++ b/src/test/java/tuthub/testutil/Assert.java @@ -1,4 +1,4 @@ -package seedu.address.testutil; +package tuthub.testutil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.function.Executable; diff --git a/src/test/java/tuthub/testutil/EditTutorDescriptorBuilder.java b/src/test/java/tuthub/testutil/EditTutorDescriptorBuilder.java new file mode 100644 index 00000000000..f4c5abf6057 --- /dev/null +++ b/src/test/java/tuthub/testutil/EditTutorDescriptorBuilder.java @@ -0,0 +1,117 @@ +package tuthub.testutil; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; + +/** + * A utility class to help with building EditTutorDescriptor objects. + */ +public class EditTutorDescriptorBuilder { + + private EditTutorDescriptor descriptor; + + public EditTutorDescriptorBuilder() { + descriptor = new EditTutorDescriptor(); + } + + public EditTutorDescriptorBuilder(EditTutorDescriptor descriptor) { + this.descriptor = new EditTutorDescriptor(descriptor); + } + + /** + * Returns an {@code EditTutorDescriptor} with fields containing {@code tutor}'s details + */ + public EditTutorDescriptorBuilder(Tutor tutor) { + descriptor = new EditTutorDescriptor(); + descriptor.setName(tutor.getName()); + descriptor.setPhone(tutor.getPhone()); + descriptor.setEmail(tutor.getEmail()); + descriptor.setModule(tutor.getModule()); + descriptor.setYear(tutor.getYear()); + descriptor.setStudentId(tutor.getStudentId()); + descriptor.setAddress(tutor.getAddress()); + descriptor.setTags(tutor.getTags()); + } + + /** + * Sets the {@code Name} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withName(String name) { + descriptor.setName(new Name(name)); + return this; + } + + /** + * Sets the {@code Phone} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withPhone(String phone) { + descriptor.setPhone(new Phone(phone)); + return this; + } + + /** + * Sets the {@code Email} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withEmail(String email) { + descriptor.setEmail(new Email(email)); + return this; + } + + /** + * Sets the {@code Module} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withModule(String module) { + descriptor.setModule(new Module(module)); + return this; + } + + /** + * Sets the {@code Year} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withYear(String year) { + descriptor.setYear(new Year(year)); + return this; + } + + /** + * Sets the {@code StudentId} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withStudentId(String studentId) { + descriptor.setStudentId(new StudentId(studentId)); + return this; + } + + /** + * Sets the {@code Address} of the {@code EditTutorDescriptor} that we are building. + */ + public EditTutorDescriptorBuilder withAddress(String address) { + descriptor.setAddress(new Address(address)); + return this; + } + + /** + * Parses the {@code tags} into a {@code Set} and set it to the {@code EditTutorDescriptor} + * that we are building. + */ + public EditTutorDescriptorBuilder withTags(String... tags) { + Set tagSet = Stream.of(tags).map(Tag::new).collect(Collectors.toSet()); + descriptor.setTags(tagSet); + return this; + } + + public EditTutorDescriptor build() { + return descriptor; + } +} diff --git a/src/test/java/seedu/address/testutil/SerializableTestClass.java b/src/test/java/tuthub/testutil/SerializableTestClass.java similarity index 98% rename from src/test/java/seedu/address/testutil/SerializableTestClass.java rename to src/test/java/tuthub/testutil/SerializableTestClass.java index f5a66340489..12686262a63 100644 --- a/src/test/java/seedu/address/testutil/SerializableTestClass.java +++ b/src/test/java/tuthub/testutil/SerializableTestClass.java @@ -1,4 +1,4 @@ -package seedu.address.testutil; +package tuthub.testutil; import java.time.LocalDateTime; import java.util.ArrayList; diff --git a/src/test/java/seedu/address/testutil/TestUtil.java b/src/test/java/tuthub/testutil/TestUtil.java similarity index 58% rename from src/test/java/seedu/address/testutil/TestUtil.java rename to src/test/java/tuthub/testutil/TestUtil.java index 896d103eb0b..e67b14338f9 100644 --- a/src/test/java/seedu/address/testutil/TestUtil.java +++ b/src/test/java/tuthub/testutil/TestUtil.java @@ -1,13 +1,13 @@ -package seedu.address.testutil; +package tuthub.testutil; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import seedu.address.commons.core.index.Index; -import seedu.address.model.Model; -import seedu.address.model.person.Person; +import tuthub.commons.core.index.Index; +import tuthub.model.Model; +import tuthub.model.tutor.Tutor; /** * A utility class for test cases. @@ -33,23 +33,23 @@ public static Path getFilePathInSandboxFolder(String fileName) { } /** - * Returns the middle index of the person in the {@code model}'s person list. + * Returns the middle index of the tutor in the {@code model}'s tutor list. */ public static Index getMidIndex(Model model) { - return Index.fromOneBased(model.getFilteredPersonList().size() / 2); + return Index.fromOneBased(model.getFilteredTutorList().size() / 2); } /** - * Returns the last index of the person in the {@code model}'s person list. + * Returns the last index of the tutor in the {@code model}'s tutor list. */ public static Index getLastIndex(Model model) { - return Index.fromOneBased(model.getFilteredPersonList().size()); + return Index.fromOneBased(model.getFilteredTutorList().size()); } /** - * Returns the person in the {@code model}'s person list at {@code index}. + * Returns the tutor in the {@code model}'s tutor list at {@code index}. */ - public static Person getPerson(Model model, Index index) { - return model.getFilteredPersonList().get(index.getZeroBased()); + public static Tutor getTutor(Model model, Index index) { + return model.getFilteredTutorList().get(index.getZeroBased()); } } diff --git a/src/test/java/tuthub/testutil/TuthubBuilder.java b/src/test/java/tuthub/testutil/TuthubBuilder.java new file mode 100644 index 00000000000..44a3b76f58c --- /dev/null +++ b/src/test/java/tuthub/testutil/TuthubBuilder.java @@ -0,0 +1,34 @@ +package tuthub.testutil; + +import tuthub.model.Tuthub; +import tuthub.model.tutor.Tutor; + +/** + * A utility class to help with building Tuthub objects. + * Example usage:
+ * {@code Tuthub ab = new TuthubBuilder().withTutor("John", "Doe").build();} + */ +public class TuthubBuilder { + + private Tuthub tuthub; + + public TuthubBuilder() { + tuthub = new Tuthub(); + } + + public TuthubBuilder(Tuthub tuthub) { + this.tuthub = tuthub; + } + + /** + * Adds a new {@code Tutor} to the {@code Tuthub} that we are building. + */ + public TuthubBuilder withTutor(Tutor tutor) { + tuthub.addTutor(tutor); + return this; + } + + public Tuthub build() { + return tuthub; + } +} diff --git a/src/test/java/tuthub/testutil/TutorBuilder.java b/src/test/java/tuthub/testutil/TutorBuilder.java new file mode 100644 index 00000000000..5bd5f651d77 --- /dev/null +++ b/src/test/java/tuthub/testutil/TutorBuilder.java @@ -0,0 +1,147 @@ +package tuthub.testutil; + +import java.util.HashSet; +import java.util.Set; + +import tuthub.model.tutor.Address; +import tuthub.model.tutor.Comment; +import tuthub.model.tutor.Email; +import tuthub.model.tutor.Module; +import tuthub.model.tutor.Name; +import tuthub.model.tutor.Tutor; +import tuthub.model.tutor.Phone; +import tuthub.model.tutor.StudentId; +import tuthub.model.tutor.Year; +import tuthub.model.tag.Tag; +import tuthub.model.util.SampleDataUtil; + +/** + * A utility class to help with building Tutor objects. + */ +public class TutorBuilder { + + public static final String DEFAULT_NAME = "Amy Bee"; + public static final String DEFAULT_PHONE = "85355255"; + public static final String DEFAULT_EMAIL = "amy@gmail.com"; + public static final String DEFAULT_MODULE = "cs2103t"; + public static final String DEFAULT_YEAR = "3"; + public static final String DEFAULT_STUDENTID = "A1234567X"; + public static final String DEFAULT_ADDRESS = "123, Jurong West Ave 6, #08-111"; + public static final String DEFAULT_COMMENT = ""; + + private Name name; + private Phone phone; + private Email email; + private Module module; + private Year year; + private StudentId studentId; + private Address address; + private Comment comment; + private Set tags; + + /** + * Creates a {@code TutorBuilder} with the default details. + */ + public TutorBuilder() { + name = new Name(DEFAULT_NAME); + phone = new Phone(DEFAULT_PHONE); + email = new Email(DEFAULT_EMAIL); + module = new Module(DEFAULT_MODULE); + year = new Year(DEFAULT_YEAR); + studentId = new StudentId(DEFAULT_STUDENTID); + address = new Address(DEFAULT_ADDRESS); + comment = new Comment(DEFAULT_COMMENT); + tags = new HashSet<>(); + } + + /** + * Initializes the TutorBuilder with the data of {@code tutorToCopy}. + */ + public TutorBuilder(Tutor tutorToCopy) { + name = tutorToCopy.getName(); + phone = tutorToCopy.getPhone(); + email = tutorToCopy.getEmail(); + module = tutorToCopy.getModule(); + year = tutorToCopy.getYear(); + studentId = tutorToCopy.getStudentId(); + address = tutorToCopy.getAddress(); + comment = tutorToCopy.getComment(); + tags = new HashSet<>(tutorToCopy.getTags()); + } + + /** + * Sets the {@code Name} of the {@code Tutor} that we are building. + */ + public TutorBuilder withName(String name) { + this.name = new Name(name); + return this; + } + + /** + * Parses the {@code tags} into a {@code Set} and set it to the {@code Tutor} that we are building. + */ + public TutorBuilder withTags(String ... tags) { + this.tags = SampleDataUtil.getTagSet(tags); + return this; + } + + /** + * Sets the {@code Address} of the {@code Tutor} that we are building. + */ + public TutorBuilder withAddress(String address) { + this.address = new Address(address); + return this; + } + + /** + * Sets the {@code Phone} of the {@code Tutor} that we are building. + */ + public TutorBuilder withPhone(String phone) { + this.phone = new Phone(phone); + return this; + } + + /** + * Sets the {@code Email} of the {@code Tutor} that we are building. + */ + public TutorBuilder withEmail(String email) { + this.email = new Email(email); + return this; + } + /** + * Sets the {@code Comment} of the {@code Tutor} that we are building. + */ + public TutorBuilder withComment(String comment) { + this.comment = new Comment(comment); + return this; + } + + /** + * Sets the {@code Module} of the {@code Tutor} that we are building. + */ + public TutorBuilder withModule(String module) { + this.module = new Module(module); + return this; + } + + /** + * Sets the {@code Address} of the {@code Tutor} that we are building. + */ + public TutorBuilder withYear(String year) { + this.year = new Year(year); + return this; + } + + /** + * Sets the {@code StudentId} of the {@code Tutor} that we are building. + */ + public TutorBuilder withStudentId(String studentId) { + this.studentId = new StudentId(studentId); + return this; + } + + public Tutor build() { + return new Tutor(name, phone, email, module, year, studentId, address, comment, tags); + } + +} diff --git a/src/test/java/tuthub/testutil/TutorUtil.java b/src/test/java/tuthub/testutil/TutorUtil.java new file mode 100644 index 00000000000..bd4783dc232 --- /dev/null +++ b/src/test/java/tuthub/testutil/TutorUtil.java @@ -0,0 +1,72 @@ +package tuthub.testutil; + +import static tuthub.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static tuthub.logic.parser.CliSyntax.PREFIX_EMAIL; +import static tuthub.logic.parser.CliSyntax.PREFIX_MODULE; +import static tuthub.logic.parser.CliSyntax.PREFIX_NAME; +import static tuthub.logic.parser.CliSyntax.PREFIX_PHONE; +import static tuthub.logic.parser.CliSyntax.PREFIX_STUDENTID; +import static tuthub.logic.parser.CliSyntax.PREFIX_TAG; +import static tuthub.logic.parser.CliSyntax.PREFIX_YEAR; + +import java.util.Set; + +import tuthub.logic.commands.AddCommand; +import tuthub.logic.commands.EditCommand.EditTutorDescriptor; +import tuthub.model.tutor.Tutor; +import tuthub.model.tag.Tag; + +/** + * A utility class for Tutor. + */ +public class TutorUtil { + + /** + * Returns an add command string for adding the {@code tutor}. + */ + public static String getAddCommand(Tutor tutor) { + return AddCommand.COMMAND_WORD + " " + getTutorDetails(tutor); + } + + /** + * Returns the part of command string for the given {@code tutor}'s details. + */ + public static String getTutorDetails(Tutor tutor) { + StringBuilder sb = new StringBuilder(); + sb.append(PREFIX_NAME + tutor.getName().fullName + " "); + sb.append(PREFIX_PHONE + tutor.getPhone().value + " "); + sb.append(PREFIX_EMAIL + tutor.getEmail().value + " "); + sb.append(PREFIX_MODULE + tutor.getModule().value + " "); + sb.append(PREFIX_YEAR + tutor.getYear().value + " "); + sb.append(PREFIX_STUDENTID + tutor.getStudentId().value + " "); + sb.append(PREFIX_ADDRESS + tutor.getAddress().value + " "); + tutor.getTags().stream().forEach( + s -> sb.append(PREFIX_TAG + s.tagName + " ") + ); + return sb.toString(); + } + + /** + * Returns the part of command string for the given {@code EditTutorDescriptor}'s details. + */ + public static String getEditTutorDescriptorDetails(EditTutorDescriptor descriptor) { + StringBuilder sb = new StringBuilder(); + descriptor.getName().ifPresent(name -> sb.append(PREFIX_NAME).append(name.fullName).append(" ")); + descriptor.getPhone().ifPresent(phone -> sb.append(PREFIX_PHONE).append(phone.value).append(" ")); + descriptor.getEmail().ifPresent(email -> sb.append(PREFIX_EMAIL).append(email.value).append(" ")); + descriptor.getModule().ifPresent(module -> sb.append(PREFIX_MODULE).append(module.value).append(" ")); + descriptor.getYear().ifPresent(year -> sb.append(PREFIX_YEAR).append(year.value).append(" ")); + descriptor.getStudentId().ifPresent(studentId -> sb.append(PREFIX_STUDENTID) + .append(studentId.value).append(" ")); + descriptor.getAddress().ifPresent(address -> sb.append(PREFIX_ADDRESS).append(address.value).append(" ")); + if (descriptor.getTags().isPresent()) { + Set tags = descriptor.getTags().get(); + if (tags.isEmpty()) { + sb.append(PREFIX_TAG); + } else { + tags.forEach(s -> sb.append(PREFIX_TAG).append(s.tagName).append(" ")); + } + } + return sb.toString(); + } +} diff --git a/src/test/java/tuthub/testutil/TypicalIndexes.java b/src/test/java/tuthub/testutil/TypicalIndexes.java new file mode 100644 index 00000000000..4fb3d805b05 --- /dev/null +++ b/src/test/java/tuthub/testutil/TypicalIndexes.java @@ -0,0 +1,12 @@ +package tuthub.testutil; + +import tuthub.commons.core.index.Index; + +/** + * A utility class containing a list of {@code Index} objects to be used in tests. + */ +public class TypicalIndexes { + public static final Index INDEX_FIRST_TUTOR = Index.fromOneBased(1); + public static final Index INDEX_SECOND_TUTOR = Index.fromOneBased(2); + public static final Index INDEX_THIRD_TUTOR = Index.fromOneBased(3); +} diff --git a/src/test/java/tuthub/testutil/TypicalTutors.java b/src/test/java/tuthub/testutil/TypicalTutors.java new file mode 100644 index 00000000000..18c80313514 --- /dev/null +++ b/src/test/java/tuthub/testutil/TypicalTutors.java @@ -0,0 +1,92 @@ +package tuthub.testutil; + +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_EMAIL_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_MODULE_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_MODULE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_NAME_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_PHONE_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_STUDENTID_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_STUDENTID_BOB; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_FRIEND; +import static tuthub.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; +import static tuthub.logic.commands.CommandTestUtil.VALID_YEAR_AMY; +import static tuthub.logic.commands.CommandTestUtil.VALID_YEAR_BOB; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import tuthub.model.AddressBook; +import tuthub.model.tutor.Tutor; + +/** + * A utility class containing a list of {@code Tutor} objects to be used in tests. + */ +public class TypicalTutors { + + public static final Tutor ALICE = new TutorBuilder().withName("Alice Pauline") + .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") + .withModule("CS2100").withYear("3").withPhone("94351253").withStudentId("A1234569L") + .withTags("friends").build(); + public static final Tutor BENSON = new TutorBuilder().withName("Benson Meier") + .withAddress("311, Clementi Ave 2, #02-25") + .withEmail("johnd@example.com").withPhone("98765432") + .withModule("CS2100").withYear("3").withStudentId("A0000009Y") + .withTags("owesMoney", "friends").build(); + public static final Tutor CARL = new TutorBuilder().withName("Carl Kurz").withPhone("95352563") + .withEmail("heinz@example.com").withModule("CS2100").withYear("3").withStudentId("A9875647U") + .withAddress("wall street").build(); + public static final Tutor DANIEL = new TutorBuilder().withName("Daniel Meier").withPhone("87652533") + .withEmail("cornelia@example.com").withModule("CS2100").withYear("3").withStudentId("A9345647M") + .withAddress("10th street").withTags("friends").build(); + public static final Tutor ELLE = new TutorBuilder().withName("Elle Meyer").withPhone("9482224") + .withEmail("werner@example.com").withModule("CS2100").withYear("3").withStudentId("A8768974P") + .withAddress("michegan ave").build(); + public static final Tutor FIONA = new TutorBuilder().withName("Fiona Kunz").withPhone("9482427") + .withEmail("lydia@example.com").withModule("CS2100").withYear("3").withStudentId("A9870921H") + .withAddress("little tokyo").build(); + public static final Tutor GEORGE = new TutorBuilder().withName("George Best").withPhone("9482442") + .withEmail("anna@example.com").withModule("CS2100").withYear("3").withStudentId("A0673201Y") + .withAddress("4th street").build(); + + // Manually added + public static final Tutor HOON = new TutorBuilder().withName("Hoon Meier").withPhone("8482424") + .withEmail("stefan@example.com").withModule("cs2103t").withYear("3").withStudentId("A1234758N") + .withAddress("little india").build(); + public static final Tutor IDA = new TutorBuilder().withName("Ida Mueller").withPhone("8482131") + .withEmail("hans@example.com").withModule("cs2100").withYear("4").withStudentId("A0965302K") + .withAddress("chicago ave").build(); + + // Manually added - Tutor's details found in {@code CommandTestUtil} + public static final Tutor AMY = new TutorBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY) + .withEmail(VALID_EMAIL_AMY).withModule(VALID_MODULE_AMY).withYear(VALID_YEAR_AMY) + .withStudentId(VALID_STUDENTID_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build(); + public static final Tutor BOB = new TutorBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) + .withEmail(VALID_EMAIL_BOB).withModule(VALID_MODULE_BOB).withYear(VALID_YEAR_BOB) + .withStudentId(VALID_STUDENTID_BOB).withAddress(VALID_ADDRESS_BOB) + .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); + + public static final String KEYWORD_MATCHING_MEIER = "Meier"; // A keyword that matches MEIER + + private TypicalTutors() {} // prevents instantiation + + /** + * Returns an {@code AddressBook} with all the typical tutors. + */ + public static AddressBook getTypicalAddressBook() { + AddressBook ab = new AddressBook(); + for (Tutor tutor : getTypicalTutors()) { + ab.addTutor(tutor); + } + return ab; + } + + public static List getTypicalTutors() { + return new ArrayList<>(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE)); + } +} diff --git a/src/test/java/seedu/address/ui/TestFxmlObject.java b/src/test/java/tuthub/ui/TestFxmlObject.java similarity index 96% rename from src/test/java/seedu/address/ui/TestFxmlObject.java rename to src/test/java/tuthub/ui/TestFxmlObject.java index 5ecd82656f2..e46adf3439e 100644 --- a/src/test/java/seedu/address/ui/TestFxmlObject.java +++ b/src/test/java/tuthub/ui/TestFxmlObject.java @@ -1,4 +1,4 @@ -package seedu.address.ui; +package tuthub.ui; import javafx.beans.DefaultProperty; diff --git a/src/test/java/seedu/address/ui/UiPartTest.java b/src/test/java/tuthub/ui/UiPartTest.java similarity index 97% rename from src/test/java/seedu/address/ui/UiPartTest.java rename to src/test/java/tuthub/ui/UiPartTest.java index 33d82d911b8..51c75d51216 100644 --- a/src/test/java/seedu/address/ui/UiPartTest.java +++ b/src/test/java/tuthub/ui/UiPartTest.java @@ -1,8 +1,8 @@ -package seedu.address.ui; +package tuthub.ui; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static seedu.address.testutil.Assert.assertThrows; +import static tuthub.testutil.Assert.assertThrows; import java.net.URL; import java.nio.file.Path; @@ -11,7 +11,7 @@ import org.junit.jupiter.api.io.TempDir; import javafx.fxml.FXML; -import seedu.address.MainApp; +import tuthub.MainApp; public class UiPartTest { diff --git a/src/test/resources/view/UiPartTest/validFile.fxml b/src/test/resources/view/UiPartTest/validFile.fxml index bab836af0db..bc94c328b20 100644 --- a/src/test/resources/view/UiPartTest/validFile.fxml +++ b/src/test/resources/view/UiPartTest/validFile.fxml @@ -1,4 +1,4 @@ - + Hello World! diff --git a/src/test/resources/view/UiPartTest/validFileWithFxRoot.fxml b/src/test/resources/view/UiPartTest/validFileWithFxRoot.fxml index 151e09ce926..871b56f2cb1 100644 --- a/src/test/resources/view/UiPartTest/validFileWithFxRoot.fxml +++ b/src/test/resources/view/UiPartTest/validFileWithFxRoot.fxml @@ -1,6 +1,6 @@ - Hello World! From ceaddbc121d2b837aa2e5f5b913c1eb458adeb19 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 13 Oct 2022 01:48:46 +0800 Subject: [PATCH 087/482] Update UG to include all v1.2 commands --- docs/UserGuide.md | 65 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 0fe5dae7d0e..642f948caa5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -65,7 +65,9 @@ TutHub is a **desktop app for NUS School of Computing professors who have to kee ### Viewing help : `help` -[coming soon] +Displays a table consisting of the summary of commands available in Tuthub. + +Format: `help` ### Adding a tutor: `add` @@ -87,9 +89,37 @@ Shows a list of all tutors registered in TutHub. Format: `list` +### Commenting on a tutor : `comment` + +Adds a comment on the specified tutor. + +Format: `comment INDEX c/COMMENT` + +* Comments on 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, …​ +* Only 1 comment can be made on the tutor. +* To edit an existing comment, doing the comment command on the INDEX of the specified tutor updates the comment on the tutor. +* You can remove the tutor's comments by typing c/ without specifying any tags after it. + +Examples: +* `comment 1 c/Tasks not Finished` adds a comment of "Tasks not Finished" on the 1st tutor. +* `comment 2 c/` clears the comments of the 2nd tutor. + ### Editing a tutor : `edit` -[coming soon] +Edits an existing tutor in Tuthub. + +Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [m/MODULE] [y/YEAR] [s/STUDENTID] [t/TAG]…​` + +* Edits the person at the specified INDEX. The index refers to the index number shown in the displayed tutor list. The index must be a positive integer 1, 2, 3, …​ +* At least one of the optional fields must be provided. +* Existing values will be updated to the input values. +* When editing tags, the existing tags of the tutor will be removed i.e adding of tags is not cumulative. +* You can remove all the tutor’s tags by typing t/ without specifying any tags after it. + +Examples: +* `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st tutor to be 91234567 and johndoe@example.com respectively. +* `edit 2 n/Betsy Crower t/` Edits the name of the 2nd tutor to be Betsy Crower and clears all existing tags. +* `edit 3 m/CS2100 y/3 s/A0654729L` Edits the module code, year, and student id of the 3rd tutor to be CS2100, 3, and A0654729L respectively. ### Locating tutor by name: `find` @@ -102,6 +132,15 @@ Format: `find KEYWORD [MORE_KEYWORDS]` * Only full words will be matched e.g. Han will not match Hans * Persons matching at least one keyword will be returned (i.e. OR search). e.g. Hans Bo will return Hans Gruber, Bo Yang +### Locating tutors of modules: `findbymodule` + +Finds tutor whose teaches the given keyword. + +Format: `findbymodule KEYWORD [MORE_KEYWORDS]` +* The search is case-insensitive. e.g cs2103 will match CS2103 +* Only the module code is searched. +* Only full words will be matched e.g. CS210 will not match CS2103 + ### Deleting a tutor : `delete` Deletes the specified tutors from Tuthub. @@ -120,9 +159,9 @@ Examples: [coming soon] -### Saving the data : `save` +### Saving the data -Saves the data to the local hard disk. +Tuthub data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually. ### Exiting the program : `exit` @@ -149,10 +188,14 @@ _Details coming soon ..._ ## Command summary -| Action | Format, Examples | -|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
e.g., `add n/Betsy Crowe t/ e/betsycrowe@example.com p/1234567 m/CS1101S y/3 t/senior` | -| **Delete** | `delete INDEX`
e.g., `delete 3` | -| **List** | `list` | -| **Save** | `save` | -| **Exit** | `exit` | +| Action | Format, Examples | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Help** | `help` | +| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL y/YEAR m/MODULE [t/TAG]…​`
e.g., `add n/Betsy Crowe t/ e/betsycrowe@example.com p/1234567 m/CS1101S y/3 t/senior` | +| **Comment** | `comment INDEX c/COMMENT`
e.g., `comment 1 c/Tasks not Finished` | +| **Edit** | `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [m/MODULE] [y/YEAR] [s/STUDENTID] [t/TAG]…​`
e.g., `edit 3 m/CS2100 y/3 s/A0654729L` | +| **Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find Alex` | +| **Find by Module** | `findbymodule KEYWORD [MORE_KEYWORDS]`
e.g., `findbymodule CS2100` | +| **Delete** | `delete INDEX`
e.g., `delete 3` | +| **List** | `list` | +| **Exit** | `exit` | From 243ea7151b5e02ed6b2d66401507d20402eb5077 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 13 Oct 2022 02:02:18 +0800 Subject: [PATCH 088/482] Update the example commands --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 642f948caa5..12ca8b6f645 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -26,7 +26,7 @@ TutHub is a **desktop app for NUS School of Computing professors who have to kee * **`list`** : Lists all tutors. - * **`add`**`n/John Doe p/98765432 e/johnd@example.com m/CS2103T y/3` : Adds a tutor named `John Doe` to Tuthub. + * **`add`**`n/John Doe p/98765432 e/johnd@example.com m/CS2103T y/3 s/A1234567X` : Adds a tutor named `John Doe` to Tuthub. * **`delete`**`3` : Deletes the 3rd tutor shown in the current list. From 446e99324cea5c4bec5729b5bff60c36c238b1fa Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 13 Oct 2022 02:23:57 +0800 Subject: [PATCH 089/482] Add examples for find and findbymodule --- docs/UserGuide.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 12ca8b6f645..e927fd8b19a 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -132,6 +132,10 @@ Format: `find KEYWORD [MORE_KEYWORDS]` * Only full words will be matched e.g. Han will not match Hans * Persons matching at least one keyword will be returned (i.e. OR search). e.g. Hans Bo will return Hans Gruber, Bo Yang +Examples: +* `find John` returns all tutors with names that contains `John`. +* `find alex david` returns all tutors with names that contain `Alex` or `David`. + ### Locating tutors of modules: `findbymodule` Finds tutor whose teaches the given keyword. @@ -141,6 +145,10 @@ Format: `findbymodule KEYWORD [MORE_KEYWORDS]` * Only the module code is searched. * Only full words will be matched e.g. CS210 will not match CS2103 +Examples: +* `findbymodule CS2103` returns all tutors teaching `CS2103`. +* `findbymodule CS2103 CS2100` returns all tutors teaching `CS2103` or `CS2100`. + ### Deleting a tutor : `delete` Deletes the specified tutors from Tuthub. From acf36e5281c910b296f7cca8668c36d301081174 Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 13 Oct 2022 02:27:18 +0800 Subject: [PATCH 090/482] Fix bold on edit and comment commands --- docs/UserGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index e927fd8b19a..72f5d964be6 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -95,7 +95,7 @@ Adds a comment on the specified tutor. Format: `comment INDEX c/COMMENT` -* Comments on 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, …​ +* Comments on 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, …​ * Only 1 comment can be made on the tutor. * To edit an existing comment, doing the comment command on the INDEX of the specified tutor updates the comment on the tutor. * You can remove the tutor's comments by typing c/ without specifying any tags after it. @@ -110,7 +110,7 @@ Edits an existing tutor in Tuthub. Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [m/MODULE] [y/YEAR] [s/STUDENTID] [t/TAG]…​` -* Edits the person at the specified INDEX. The index refers to the index number shown in the displayed tutor list. The index must be a positive integer 1, 2, 3, …​ +* Edits the person at the specified INDEX. The index refers to the index number shown in the displayed tutor list. The index **must be a positive integer** 1, 2, 3, …​ * At least one of the optional fields must be provided. * Existing values will be updated to the input values. * When editing tags, the existing tags of the tutor will be removed i.e adding of tags is not cumulative. From 5aa7b1674bf2ae91f129098f164f8ee1f952adcd Mon Sep 17 00:00:00 2001 From: t1mzzz Date: Thu, 13 Oct 2022 10:57:51 +0800 Subject: [PATCH 091/482] Update help table --- src/main/resources/images/help_table.png | Bin 106387 -> 106387 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/images/help_table.png b/src/main/resources/images/help_table.png index bd0542026d8ebb32cfff185214024b9919c9b86f..a668c8226493366f39afd1a8bf12c3b80e31ceb1 100644 GIT binary patch delta 89413 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

Q+FXSSk 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 Date: Thu, 13 Oct 2022 11:01:49 +0800 Subject: [PATCH 092/482] Add helpMessage in UG --- docs/UserGuide.md | 2 ++ docs/images/helpMessage.png | Bin 8435 -> 154197 bytes 2 files changed, 2 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 72f5d964be6..7629f3cedf7 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -67,6 +67,8 @@ TutHub is a **desktop app for NUS School of Computing professors who have to kee Displays a table consisting of the summary of commands available in Tuthub. +![helpMessage](images/helpMessage.png) + Format: `help` ### Adding a tutor: `add` diff --git a/docs/images/helpMessage.png b/docs/images/helpMessage.png index b1f70470137ec75b2bfe4d29458114d1aa75dbcd..3647295e236743339193bc88efebfcdca64c22cc 100644 GIT binary patch literal 154197 zcmce-WmH^2vo4IgyK9i(4#8!R1SdEIm%-iL-GT>);O_34;67MzcXzl%-gEBy*1CVr zx9T0V?_IJ7f_}mvLaw$)iH=q`p|FJ@U~JK4q#w7RKH)~AC=ynfq}i|e*}mqyXqXR zK2!msNAmwZcUg4NNC>D>zN?*2VL}hirbMK8S2_Gxj$ouBi}OV@AuY@9deTR+1~A6Dvo78PGWDR&@5+GBu4NT7`SF9 zS9kXd#*fX5y>oM_(!N9MI;JB3X+PHk9ZJN+h1D>pCRPgctBt1=y7)8!tOHtFOFFef z7;_>dsM0GaE=9KtaM32x3G!0?9Sqt<=kC^8*I=NwB`v7IyL(D1s#dHsw*~)V(r!RKH`~%MU0x2 ztV=vb!*C>pO&_jZDc~P~FCh(OTBEPSk|xR18`F9m21~yfJR7wA1e)z<>cg|yZHKYC zbm;ukYVl6wFnAUt?sVDVp%n0s6hKG5<37oHH#HozDg=j9|8NS_w#Z=30nSB+2(D$q zM}{98;yc7SAB_(zThU?7E_DM9D4~3{se86Wn3{YdVNVE7g5e?4kk> z%5`!5c`(3soYti;cxY{tDLAvj(zKaqHhrD zl3x6;;LUb>*X|v#GWkmIiJzQA0wnVM)EPSV>BDfCwBgF-Lcn}{4pT0rrKNkLGx#Pe zb%hR7N-J5IlVkds?$?DX#J-6yr70-T?^vLWTIy?;zr!VyxRchWfziZu|Fz}It6NeBK-hv5G2sSp8qopg}NcJjEJW7vRppVJxfB0u<_Ul*((67w5 z8`p@$JQ=I4sr>^38+~DzQnIr3(I2?2JCL}1vYL1fQ!Ea@LiWv+eKJz{)cP&a`4gjp z{@4zT5l->h`36DTl`Qm2M>fs}WAl{Jx3No9H4+~g8^8fX;rfzt#4SQH@EIo#k>{wc zbB$Xa z~gWY+Pdz*)zQto*@KJ92xQzPOskAZSy9%wwlNJP&=0R}iw7Cj42TqUAryb+G4^N*;v0V@16d7 z=sL!WIUliqlO*E0_VVt`p$g1S+?@S!xP8gSDLSU=i{KxR)|_vf2$Ou!yqj73;^bgv zX}RS=z0I4|tdLRJdUkbH7u{TM+pX^<2HDo$X1kl=qB;0-TGbRAGx~;XS(()!dzMkQ z&T*u3ejMrx6vN&oq!`Y-@OPp^-zoTo7NAj)TsAbbHf(cnbWfE6`s1GXJ#A^RE~a^w zc|&Dko{Y;7Fhlw^C2sm)L&fJ%O`PlKcuHiVwama3P;BL~B|ENi<7BO@vZegv) z`?qE5ZDJJyK=@=jN|>Kdh(jvu1vHnC6^ffP&6_0A80-DCvxjC;ets9dYpKD=X#0>Vh9j)`Eis%C@==RPwR?Ox=yhztuHJq8+(mZ`j|8u;U=jFUT#+3Suh#?M zR&iq4VZza#YEt%TUX&JHl%YY;fp#52j7hi-$(fB6 zf+*3}p~kJ@9O3=qujdav3-n4Fu2TOz`n;SC@f1if-cIZXhQ!qy9R7pL4=uLFsF zoY=?Z196#@@BS*SHex$;NJd2=+4)xp0Mi{|{80qZ2lKU&imQ%;aU13a+#n9@^W(y1 z)ca^xudhU6qEw!{97$wx&>_yE9U8?MBT4~#yGFuFVDlU*=J#>*-Hcf1C&G&7`HljM z{&VatyjCK``J;5S4gcvc)Zur3$$$Ebj!A~qNulshYmc@u_-P>Oy=L2;tIQxAT8PJF zPtKna2i)~EGz9TPf;?IgP(=l!!2f>R6cWYf;-6c#& zhGhWY#N!n)xn8nB2G1YY8nas?S3m2{y{|%8(G(&&d0%1D2w)cg@8+~Tj1H~M@B`LQ z+bTB&I@~@C+^$E7pMwc!ieAG5^xhI8GYxBU^F!aU@Ws75xv}3G`IZ>vZ5J#-;(sQeX9+@B<1s<{F zXqW~1J&!`?E_384qS`3(J?yie@4>wu(((M8zgVqVY_lu+I4PFPOvRLESY3W09p9G@ zSz8H205v4Q1QWm_Vma5Vvl>a3V32DgKoVx%&+dW}SXc-P9r9P@(Cmquj;IR+_OD^; zT#9mL5VF}3^o_tN)Y52i;K|Wb^_jW4KQaX=o4c&Q1kd#S3!Lrg_bmz@ z)UKTxdA57ZxILr%_uRl`&9`W-_f?wnzr=H0F-IFUVdo$~7W&VMH&m{Fdc*kCxdH)b z*NItN)RcOM;Y~q4kC`DixY`%{DSwXj--0rnKWiT6L6PzL7ztLLlLIa%C-(#pt)O{h zIV=QGwk|G>(f^`S?TVx%oGl}w&DR3c|NmqAAESo)d#tbjJhA>qGuYeGxP>`N z72;~Zhm)ClgS|9>6Y7JQqC?^n9N6T>gBT1NJ;4F@z-hel&wtRj7W9v@Q2o}-BwM)b z#Qa9E2nYz)wziBiJoD?Tj2MfB)sw@h|dOFOjj8&=#^imL7 zK3}$Q<>_AGjav>~TwK)SAXq=~HonPQFcNlp;4S;0WJT;y5c*MG|5N1h!@g>vPFq7rcC1gQu2Y;H ze%Zl!6xCR4%|!NTB6Jw)h3qCtrAY3391Nt3 zJA;{SzT4=K!&>G^mCAIC!ye1GjtrI6{NFjdj5aRns8)*|kJvl4ty?&S4x{F_Q#Cpo zJYyaiqg2OtwrSLDSJ`W>C+!FQsVYnFHvO~;oJg$k-I=nq=2QxI3-)uiFZo@{v?Wdw zhg$LzwXIQ$0Z@JmLsOx|lutLM*_`Pw$ktx<8H3upH&w?hHIB2+d}Evw`0BilOF9kO zhisgh#F2B)-G%Zoj+@i*$22cZ#)F*617Fl19G1qPqp8Y4FEs^|srxR1Nlp{?ZvIQu z-U4G!FZ-8K#zJhmb;x5Z!xPyY~#*n&uTWvs86iH?dOo0m-2%yr`|Cf zQCQWOrfd6>rxJCgvTZ*RtbPt47?JY%wzu9;)|R0h6M%1J>f=3}NxP~yL5zDlfp}}n z(U$KE=g%gj$mawv)XMar9ci-k_-}r3rx1G_VJ}^b<>@BmY;8;A z%%$3p9H#kOg)0pw3}el_r>_g{PL(`)3eV<8{s&tOZN~Uk)@nB`i*VbgHJu}&1pnm{ z93T<}&;6kO8VEjx*91(I*P=v4T>Z6|S-pc9_INMAw8IrW(@eU`w)f-Eqo7|QDT}^` zS|N@6`YTDK9(M-i1Y{LJ%Bmdh{=Jp64a zctjZvM(iO_C$UF#Cg4}`r#dr7mJhCZ@|~qkoBP0F_*AB2?d8$y~6^L&1-UcC=TcWr+~EQC2O$O9u- zKtQxoLsaTaB(Bj)?7uO%@e*>TPQTR%lH^ zqJN;a#yi6AF2If`gq;^|-*9WpP#Iy5p|AKKDQ zEwP~B<(>EIwNOfX686P6-m-c$6ICfoiLlSQGS@|20|}poM^>6BOh5{Ku!ymZ?y&Y( z5>mupCTy;h0Zm};;#5l9BfYnm^PB350$7^E<=*j%0XroWMwvq*89$KqbG&W!^PlJ1 zMnQ2uATVpuL?!VTQJMR9%5e4~eHCYer$*v|H^(vL`qpT6=v2+-b()M#Y4|rcYDM!} z@#x5I9#!eN`Efj}QKS?d{;5z~tczne>pF+1=YZayo8s? zyU82aLSiN*y?c1*`2q@Ti^u1Q`+}MrXawLXR!r&_+|63RPw4xF&niYkJ~==3rpZV^ zz0TC6FTq?DQRZd{TsFTv-FY;jT*WCmrqCOKq0`WCH!K`~xx#v{EeSOK+U zk2tl2q%lI$^A#1&F@4Yk6`KCK$XV5NHU$lIYji>{ITJc72}J^Ndcf=BDIHPed~Y`& zR-C@bnO$v2^$+msc+7Rmf}7Ld%lrN66p#a0RNkQqo{Jye^Q_+bidVAa7~8)ZGFTwq z6W6bFu%kpYTo(N4y{{UOBe%DWe3JrD3qgb99ZY(w+)Mklhm(vT>=_dsmpE(!%q3L7 zfQ4xQ{!=ZI{~SV{?J1Arl_kms&FTjSY*BDThNYzO!r|!{g(qK2qqLknL~QQ=8UXQQj$El6@8-|AY$4zsf`-+ z848g=Bh$%{)Iu|xy^1Wq4GY=bG^r31?brfU+>m}oTe+k>$aKoF&m&BaZK-;b8h*2I zHK;g#(C}(VfA3H!0x~2#d!jVEK4xGIirKmEP{VfC4<<>Mb2$SU%JA%a_Z}g3l%N+T z+Maz5r@8<{U*?uh=rK1Kd=822^?8tk7ravV;lj;Kt{57EjRQ)9C4VT62JOI#7b-P% zP>&*o-l2)V{1n!*%PxmZCJPEBY=4i&=cv!(*hR&_ka6Gc&>LqxAs=30Wv4y;x?6zq zDi0J7-UO&5(2qEe(UKI$v58DySSZl_M~+&9a1N`;l3qxt;zu}_#*kuqVGiM(>FzN~ zD0p~FpWp}40&770Pq4fan9*oR7PeoI!M`8?e9$P*7tlL}4L$ur@Ge5PY?+>VbP`le zIjn_X*ec>Yiia_Fd2O-HPlQLsEMj}u0Y6YXeUnMr2{$ECL=1`ui97|?0o+M{e5#NM zA(_r|=m03Vr_7UslTN*eR&oObaIKjX<@2};ycU6)Z;{msYWvE@LC79t~lA1XuT3=yM)9)%y^rae0~ujzxfjOyxv=oau8u#(nM5FkOmtTNYOMP z-?PbVdw7nK+2jG$)5hReS6z=xw`7_=B-;l?g@`6cRB7M?zlQ$-%ti2mU&p}hJW)-j z2XTBk0-T{LKqP4A=jKr9{=L62rD(`_*Cn&vedKmE-$S-mBlj=(6s|-3wx^%;uIu|A zaa-L{9KCycA$?(}>(ET&oh+D!J?Y&7C}v!Q6H{X==;+=3!-P6=Fjypuk+Z|iat2BI zhT+>8(I(|2-@dv#N@=4D*b|ui;zj@`$q=}w-T=Sx7#I40DCW<+X`*n&Gm^r(d1bo` zxI(pqCAAK3kMlegz{4gFTF4$O&M2+&ycEGI(nc4wWspD(_b(m6!23b@6`h>6e=@_O z%JKbDbRwZ$T{gk8YL7zrHv0jj^LCEZZ7w zLj#>xGXZ$$xNzQx$X3A5H?9S7<;9W;LNZxqD_P8)p)`dzApnNJ1)!*dD!k=`_(=sP zA|L8}wGgPXMz4*{0e6l`H+c0n1AxdEV|Qr4pBiOQkA~q~v6-S0Ma$EG+j^UyQ?~$h zdPjRVDNFU6m1~<;xbOFYl%mT%*8?|}8u2GxZ9jB8-)MP0K98%nP$6G?4(9PD>{fS0 zLB~A}7O)vzTuQHRuaNeJ0D8ojOwbwWr+&1f~{A48E zw>6SkPgnmQ#2bW56u~1TeMWPQB$l1*)K*H!5Ba=iP7?@X#6y2cGBs$$<5loBz)c!U z4RAxmHQXL32i3pw{M1ZHG7OCfRF8E~>5uH~MHTXNZ?b^+D!QV+XHI@`5D`*<8k8P1 zM<-4$ms#fD$A%8j$6k5dzK7^`+g855+Vcpn^Exj4A{v(|(1w zd9dv_p(g~20N9!g=4SOp3#Gy@*b(64!${(6Ews9Ktxm^3zbr_t?_>LiqM;7g=3$ru zZo&+9aT?wwdGByxHzi+Ol{CXZKLG?Z4{NHdwv}*}?R%-e&v9vagjt0wt_2F_6;gET zLO6IJ*W8x(Za{agCoc%;-L&Ktsp)Qe0sfG;xC(n;AV5q5{HJ+oIW#q6__VWzZb>`j zL8t*<3C+ z{zKu>&KRNU>(fcXv?rffa)kSm#K%!q_=(m@1;GrdWqZC?=z~3dXJ~}uy=_5pheXu2 zJRz)-LN>8@NeB(JP58t>+S1fBxlVK+xLrN%NBWpCmbGybYzrAPO1UnmB~+tbV$CG> z^Mn(WtOE52I(OYk>|A5^@kVAI!Lw-pVJ9$Az1jKo`PD3Vj(SFIE_-DWFstB(b*XyV zeg4%%>MQAh?&<^L%hh6ptDdDUjS_U;+&Lu=^z{3#0mu^c_u{SL*fd`Lu|qL4*#&IS zgxrO>Edhx=vJyoHwbd_rtMrllWLU}uhxt8P9_^TEOYgmxfb!aa?Gb;fX#l;z;+OjQx& z0j~A}_RA8l3J5 z1CIIGyz1VX^is*NgYbBsR9)l>3VE%pAQk!;(Mm&7^(y8Q!qD2AcQ2>{n%J{N zmhqIi@)TdcevL)LL@2y*Pw^L9XVQ=O%1hZat|!yvL9OF;==F4-(+y{|&{;&nS)24K0yV^9{3n?` zB1X?7C&CZP$1_gF#fNzH>(N%%oyk-NAwfSOuXkNK-Ttr9r@G#F@*P(+4C8H)w3e5HD`_b; z>({RgePIMiWL7j)_T5a%b%*3hL#)OFGRv&y5T1I0En6(kN77CxHV}RNV|n^uTYD$FZ~7Ne&JZL0ee?pU zlvE1IIV<5|;*p+BYeer9TvUs&yDe)vkhF~5@VVw?5-71gqD`K1-7VS43N@}x!-&#)-V`VU9w^kly4I8aiJ|Fnr8up$iEhki8xJgY z2`JGq>=Wdc3fvY8uUDPw}wEY2!q$xT7JRoK>!0mm}=Oqywdp?~s z9OEx!zjv*NUR6!CX%UY?%mL0tF%Ny?$HM-jdzNu<8e7gk#b zG~vN^nBHz|62CY+-g`m*`ynwr!d-CHoz3^9F_eX>P?ESVchu2cdn~5jZ66mxH)_mj zWtEzs`VF7fq<9o!0@Y@*eMW;80&hyRw`NoCJTZy0d_lDG(v`_8aAbB@qB5`KdxRS> z)v4k^2KYo7?dXa85YwjZp@pX;V7FsG$?`Bb`?rhKQpsH4MW>p&;q3UmT18eBL&7f* zXh)cA;ZI|#;k#|W+H;F?6pf4uw}(aDB8q#8Lgex{TXAL=^C0FQ8}Kx@P`XdNC2U;D zSr{N*lo)wAOn9KLdo#w{13fm8hNPJTe)VI5=fLB!&<;&~jF>>r@iJI@KbNhd@84dF zxZLiEo;E{@!kNm`M2|X(^33A4XbX7c%iP|9ldk+`kT6?os4_MeM?5b8yIREq05xt* zgi+9r-dJkmop_t$U@QY-hmOgO&3-AZpj5}BJ3*i#g_4Gz8)A|xspa+VLA`cR+Pwy# z>cmwl zr#Y#EL4Z($SFN!sdzuRD{4LDg*GG-dz2wAYyQ7I73_z6w#43O%PNL|YO5sdZ2Wyv8-%R>QLTl?N*51%E6I7-I+kPz1$C z!20)WuwIO5xbE-2hjTe7oBfkqx?f$_aZuDqA6M&xPkMU7rgum?pP2UX)v1&e6N5}o zZ;}d+J(SiWycPUJxvYUET!AJlfbuGcD#R!VH(eESJ{Rwj6C=MH(9TU`wJqU!c44{I zh3_RH6l$u|28ljH&idOdto7e2yLj53T?B={(=oqYx~sq*5SC0p;9kKa2Zmf?0|kVC z2U4Qe>R4nL_Vl$5qOPy3DXfM#)TojB?rs9V@4+>5D*8$dF-Cecu<36JxZbV*z(d=I zKdF!TeUp4^j%q7Y=;*-VZ9CW69%H=QHQXoeS@&$lOKe@T-26{&>@FoX0=XC_4$WQ~ z{bw6mVnX2e?@)jscM-YM+CN?Fi-J@9`SSKg^56M5*EgyD<=NKXWcVZM+neP7wLjCS z^FMZ)q>Q@mrK;u3A1dnVqI!6E92$vMkbcU?ppJ)s%bNXnMs0R-(yw=Eu4Yfc*2Gu+ z%NMJR|0-oGUmLnv9Y;b#hJpO{?HgI*r}A2K`{xNDhbMBbHq(En+L-D!qr3>!u1Lu2 zNAKRs`^suD?4RGVI_sB3$;ru1NPj`uvghRDGT2@0_w<#@nE8$RZ|MKuK=OYC`>R&w zf@Q~hn7`66CF`9Zz1rtX^IwgWvfv>p&?Va1*;UI?Z#_&-P4(<5GBYzDrVRH&tC-j0 z5JaI+$4~O!47|e%CyQU`{-uN9C#**-{byW5_x}dVz>B5eD`icj_O^XdTxU5U{LbD8 zJgM)knGxH*K8Ld~Q*yP4`G2)qfC+s|@GjSI5M0Zm6WKRetu+KKQU8+;8#;6=$(Vz{ zCVZ_5vypL`3;oXx`{K8hZDUnhwIS|7S@0iVwOi6Cgl9Og^oA>a`gLD_2J1FvXNwqS z`~#hQOZ3Y&m|{px@9^0^q5OJrA&6xcZpJ;{Nwe_e(zAt}ly|d#)*p|(lh&-D_Cc6Ktk64k}+Enb=9oJaop@^3mj-2ZhOxj{wtK(hs0_)uI z_O1VFM|1QWctf1zfzoU0Z4E$797fH+#*>UlvO}!DL#e=>_wogD9pnJZ03yyX(fRos z>Jm5zpAIK-gnULLI*Nxbv<)8Mx76xI3Kg>p-r?f!n@I`9MQto{?a3+!h>eLu`F)Jq zDdFETDxhHJCgm)ryYiHoGn&ZGFF^aCVKy|x@8^F(;0Q#0Ftl;0xQW4~rbxnn=l zIs}IlLsN+tDyXXii4kJc62q1^%0HB96p7EhXkC-87Oqcnfd%!391%CrgE2W zDxIpbJh4%)^F(f_wu7FvLh}eD?->M#@b>y~Et5BS<~H+IW6Qg9QKU>43NY1Gb(o_# z8bJiuDhQyIr$%6xs_Ltmi87&U;DE#f7UTDafHjh@;P7V-HMP;EG7RH|bT8f31k~`5smZ|g_-m)SZ zwJ0Y!c4rP)TBd^WlSM}Rl#Skh%j>qDn(Xa9>fn%}X>Str#S@;7`n;mPzT9?N1y@$- zeI}s8o^#_(jRO8$iqiFYfgZla5y9X>xE=K*Vy7PHR`5iV_P)b$Xu$G~;2R&#mav*r zWzeo7dUPnsnM%u1o1rv4r5kxMqq5g3zeJx3P|S)EIP{jxm?o3y*wv4Wip#m`!ZAvi z5i>oGRnu~S>a5g`hHyX{SiQ$1X?jFKIsG*%0g;v3*-oW#z$HplgLB5CgKO$2!%d-J1sTx+o0 z4ae15)3a3fg4aZ*&n67V*VaQ8*i1Wo`Cvgg4`<%W6BdGhY;s7&-U_nM4|TIQMyTI3 z%gcoQ3A1t(FNy{CkY9Bm`m>afCNkz@W!}TPxz`8$mzx{i^RdC&>ca0)m5HqNL?U(p z*ND3m&i+0d87ZuXIx<;Y*e=W5n77f0zO@3}ieXn@slB;G-7&&8Sv;oz0M{Sn7*cC% zdoUgzlpO8?3^A3?+3#+#GzsMNrk7*RD}7$@NxiR7UM@E=h)T^w-HeH6k}uLrEx>Xg zkR{4G3Ezo=_o2M(CF3F2=7Jw<9`gTL&I7ge=edNhkOqCX{O~w{v7@n(g6kc&b#6!z zhN@gSVKzeM{x$V5ZZu`gJ@TVn#S&5VwiUiNqQAnJO`tupgzxy4&IuV3n#sG=VEDp} zYd+c3J&8!6Lik~(6S*6WSzk>6BPZxS#l^>kZw{7=N#M|7ecE$!*H${g2vfJEJ8|}1 z{E>d=Q>^=ED-X@SUb|6NMxRT=!!m)weh>1_@fVCGXu?aq*8amu)S4+TcLQ1NN4?Jq z^Eu_CP?Y^aTQwiL`j=1y#a{g@ajp7tGkdd6{X@Qt%b7C;5j1P;qjkZKsTIVK{Plrj zWR5pTzLcABS^x z4TR!RR31C)qO-!})vUzCckDeM1_GX%t2lZR#-||DA27{*iyh9 zPy;68x%0V=|4=6qpNr_@$AFe#Jr@rPt!>GfBwb8m=uic&;)XeG``JlSe%kyliE<^^K`K=}Bo5;V&m5N57KI-NyBw zINEsM<2dJzNw}n+TtY>A!rdaHYZ+@$|5{z+obJG~q&I}Hg04=y_34Ni7M8G0VkEv8s)8E7N>5F{9 zZS>~-A|OpFe@OFBe=Do2(ci<~h`xFKW3Y3dQY~NCRo%16&jG?wA8oX;$TCU)Mbldb zZ}E{Qo@jn91ZkK(gos`6^nbcb1 z38Ga?Lq6pjbSL_GwI~Jvz;zvHlZVL@r}(t~#)|eVlY-Mag_OY9zVIx2j5fT025_@l_ zfC2!xxVVRSeYiu+e{MK*Tsr1Gh z$liDZN9xFgxszoo1P-mHPyTU8V&o8V#1OCf2u{d%vlJtXNz(+b#v@cs3AEBu&)Lz zR-#Ja-OC9yd)?+vlX|Db%MJELR~En0|3J!u^37ew36 zbFI$Qz{P{fvWc#}wJ2fkW=^Y779bYTcr#zl+SaI(dF@8b7~g%*GXYbTrFshoC5B@!I<-#{H#zS>jA zYn=rnEd)e5tgw$*tgdG{eCQ|NCB3XDuk4xcnuk4(q?0O+uYu;=y$ged^p%->8S;gw zE=OkAj6kc;!h;2mO?PG4;!fF1(z|n@*3=N%eJb)58dAng)J=Tl{J${12Kl~Hb=oR z4#7>8=ki)K`d>#eLqW}ce9`IpHZ&$~!)%LXHj-jqd{9h+XZCf+vr4GqR>Ye5By-p6 z)=5=|V686*+YP&cneKeIn((0OAwE1g=ecp*JOOB-_U8``YTPxHL0=3(=j_j@tA-{% zG{aYN64EG41808>$m(-ljs#Jv?U7jB|;twCZ{O6+|HTD zyxr9fZAr)R1Jp(RD7Fs9yKeibUQ{Wv3==B!*?QX)$S#{7yDEBb#>zam`YuYHG#+4# zET5ojcdf*ujFDK@1sL4D`S~&{NAMLYD?@5)Yp*ezCnqhKhLFP``sn)u2OzUHH#s5r zU&eGNR|BHVrTSfJeY&FSP-I+>G5Ljf{ma?;#DHmbo`-5F$=jhcnUCxb9vVqqp9^aB z4oIa8ar1o@efqT6zphWXMNRJ-+-JS`CC-keT>Gr9SD;mN>4|zwS~H|yA~(1obrV(! z2I!;fppoNtE?-h`X?84(R?&2JIW!{s9|q}UGe?j(@d@@GmS&ufb?S<@r4!Ek`4daC z?6!&z?e4Bit)mk}h)@>jU7ewap1b(x@M1^odIi;Vg=m1WAcJSLeuZYoetbbaEidke zWcG~Qx3l!uh$#4K2x@f_Xdo2~*Tli+a~;$_YihN9Y|;-sb2c!`?K|&3-B`ND2Od81 zdV3x+xn3AU36w-vcDEtphi1J{6i`EpM1EH1IK(bf&d>lm@j1<2 z$0Y5Fu;GtZr;*+{9!d#l?0DZbt#Q-iS&Qt?Q za)%@u)Q!n%eDPL^*<9nOuM7=3+iX;?7Q#G!(#|+SU%mxzJDd9)>R?1#KDc(?qd9D( zTI7f#C44bt#*iUNHnp@)039Y#w`<)aPtS(V`m88(OgaLqXA+Pk-+PObRW)XsHy(fY z@~m-&nWj+l{Q1dDkvv$|2Y-B32#ZOZVvoM+ytY&C*Es=_yA$#Y|G?;lKy(FxhfiA6 z^?Nf~5ot@ulugsx|NhaG=G%}TtRoF&-niBaGB~L)IK)HW z%0!pKW5srnOAX{94Y9y^cd+!vhW2lH=rSWsNr_QOoxfS}KT!S3YKM+u_35_p$prh* z$o4>OWSJ46>%9b4*(#TXIr8&UI;a)p(D?-5Y{xzltrIFmFdp4#hKGmQ1&eOw@fuC@ z(mH<;5Gl2TlvVW(iG&NMHv|cgQb+}wQLX3>Ib{gBnv_3(`HptDoX%F}b8%h$b>*eqVxVK^et9hI8vt%D^Hl-EQ4&zb;Z<^71 z6BLd97O0qO$%8K#B{J9|M$P_yFlONHtxhR$X<}Y13Nvlj;QGc8xL@5?DzWPCpUw|# z@0p+(T2g9V5Qma%q(vfHYDS*Z*TdSP0B>q-q;qCi7(Ui38Wj;wqk49n9ki1vi*sABFu-me|OEx8I@9=nzP&f(N^ESL+#ZT+=mOO|8tuv6yrH3o_Zm!$CuV+(> z&w<=7w4Z!;E}^Z=LezZeXMu5&!HGk%P+E0jOU02!<_zH^W_`11TSme@1uclMV}KhmI`>|)evzAS zQqcv2h8`)D7=)@bCp%lG*1NTd+!-k_)bLAWvVK0Vr2~sVQf-JK4|Ki~*(NKrmgdHn zbF~+vh*_XFr$5SJ1Dv=40J-}6LX*B28g0oy2ey#j$l$t zpEFexOwRaP*vidP;CUnYcgdjDeuAqZN!QnB=Cip&pAYOjTSW(PpOs>C4l+DU=kl7V zQ47sE;libTldlOj@Yn|IU-S^eosDl=~ZH&QhzBcO`Ui%qH1$<>q-#)bK{kl#=+r49$KZlQBjYttJ6sQJr z?s$FCYNBLI+13_iLV6?A=>ZM(L>jPM2G0kpRhHWrmJ1$G`N#-Yo`BIJ3rX=YK}+3E zxZ&in-jZWj#rZ{cdls=ub5Xk;Cd+#-@+8KLnAz6PISOXw)6D*gL5ppWAQv+1M5kF= zsg=l8wXwk(PQqBl#bAd-#e_mGeHTS6iI`~daUNQJHy#K&6n)*e9^M^>5vw6VTPSBS zNds4Vp(YE5SgpmyyzI3Qa!d&^k1aTJ4gKYzhV}wk$imPLID6LfaiHTUb3&I_-=^#R zwvY><^(pCM`~Aj!imbwHMpwtER;=zyXvwlyQk_maPKbkry5Fv)I6kK4r3+;~CDJrZ zkfwQwWivppk63;a`p~`o?1|L&6-{Wy=v3HbR{TiF3)BAAMohDmd*IhCf2Pl5O&e~O z2f7O?qJ+neHxYf2q}tI2HheYK4Rf#&$JIDiv27{Fn zV%pD6o%cqn^P5|7$e_$`5je8rZ6?7L@R!ucTf1u@ zM~Jt1?0KLOPS;a-S$YZ3ZMk~<-^ z|8&fJo-Kprs~6buJ26Ir=JaDIyWog|F|?uV_)esr$VXM-QEXYe7;6s}vi#JFf`eXc7k-8J>m;Q#OTT`Jo z8j-Vu{mp&mhIN~fQP#vaP3_5~Q=l?G6D{I6^o{cEs`2ye|0JH{&u4Gqna5_JU$6(F zM?Q?_I=APxWVm--YH;AEuP}GP&se;K1&B-MV$p&hFz5GOC}~o4 zU9?R`1+ur#!7p=v!otOKv2+=`kZjnE+NSP7mR?zpV_Sa3uWY_Wi`nv)v3WNhL|ext z1c)Xj3lR5X>zajFx$tMqpU2jbt>4lmzp%f5#If45)Bu{Akhy6OR0HqDAio|}EsW47 z9^?9{uy;c$8qamnZ#jv*S-^n)ad7pBLa+-f=;Rcms}fP8M4ib5=hz7tWZs1nm1=Y} z*Fm8)AUZJtt|}o^8vQu~*-K-BvOWX5S-SkrhJ|x}WNAGY%eZuz^9?rSv|8uuL0^O8 z2Twp2HwN*Yx8l!6AcTWQG!o*1U}F10r9Dep_rlm(ijzfEaP4y&#wA6=MZy(e1(3Og zqTlc-h?dr)s%Fx)Qz7AdFm1zE<58%oU2A8bwWr~9PC<;A* zTHx*%1wWQ78DMj%f0o@?KiJ*1P97l zfmRK}C2W+j_5har^eyHuWXBpSFfLg<8*}H*!|oHMU|IW2EPqrNWuac@j)m40nTsV0)?)AOC73h+ z7nZ*kV(Xp^H1u-l8#;23np%aRfuj-F)gnU+RfmxsuR$0%E(Y0q)6uL~p}wI8tsaBW zH^2=>wGMiN235!RqEMTN+a6%&9ZxxgLIFfFmQM$c!k{P*7O)nhh0WVDI2DMca1Tks zqzMxc;naqMIh8Q5bN$UhiSm@4*ubvg%eJMlbTaV);xg_tH>_s?Vrg#yA`9%=%8{R2 z1Gj`B2z5Q<7UP968=^o&2^&9}e6-`;u$GlmDCEqymKOY5Pv zUK7;?8}QqPgXr*|h$mnBC;s-gPw|&0??;HY&9jmwJsPstW691;h@$Vrb8mdi=KB}k zd~`ZIoG-oPtEkLHN$2^NS-u@haeJB~N*?X}etLO7Y7RIV0SaU*-F}DqbOK(TN z$QgadjDbV;G8`;Bdr7A;Z!dDhLop=U5i+?qLPFiqP<|X$oeza+RcK}xJF_et{Rawh zII957jSW!g!x0_e0f|8bBfI!^6+VnQG;IG8AAa~}o8cE6EowMjn|2Y@Ewwmt;v|gW z)9~D%KEYcr-j9IxZ2Z1H6;0N8Y^f^JakShG$%A9yc)lK8Oa`=8?!o%ad63%0AlUD8 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

W#^$K=!WRaiSh@ z@CifGz##~8=Q{o%HySQ)n$2d&WHRfRn-|wxtI;TcP9e=fH8*qHva_l^%M|gBJJmlQTp%Ljzmt*hA44mYLOca(@ zpu=bfXJ;o!#g}rg%LGkpC316%pcXm8*+F{!J@Lu*L2Km+q#oXfl(b{WJynV}w#`n? z&X8TwHecU#ZDq(kUI>-U8BT0}T<8{d6s*RNzZ{0s;4z4Fy+-GEeLD&cuEnO*8u&yd zz|UF2=b!Q|ui}fP3dBqvhoCETsxoR?P@a7P)d~rmJREVMmrKGiv*WxNX?wOIyQUp# zbqACkt*APcjb@1tLOh)y6x>A5dMmTB>dUXNY}XDPO+AFn{31BS-i8EUsdWZ&aajIo zDZtKU^N=fuMgJHd*x6^Os@qJE zJG;P9Chm64F=-l5c>Ev^9o^67%SB~_5<)qf&t3{qZ&}pPhO(@K*tc&Vjdgma=VLy5v{PpSuM6(n@hNo;6j~ zY1qASGxFH}xbTM$+L66uJ6iip!oUD~>$t0p3py%MP*M)(pag_@%dhIq1zlSO(s!=J zk*q3Q%R17VfyvNiWHO+oBn>B5d_{5Bhlm$GyC(m7Z(|2r($umeSn-Ou8c2fxIx^Vob#*fnnHTr67f1Abk& z4%yYMXPytu2DFx^W9PbGv26J~EI*WkcALCx(s!Wz_=axR%+4XbwtMpiLq`oVb}hlY zU%$otg}<_Ow9I#?tn-m9E`Oam+B> zHZ*~aG@zlZ0{Qt>xTY=G2(e*QwIFxjN__XlKk&DAKfo8?&BgYt8W>IIZ%fiqd>BiA z{1^WI?tA#?)9}|oSRXBs=||K)O#T+G7Jv3RV6|RJdz*7 zU*7)$@4x>qy!rf0#EKelU~dX)m8YBdT{tuJS|t>!cIYo)Ute2B)Ml*3vUTf`+8l`6 zo_G)Mz5hAhdE?KxJ2?_Eqw=O~ns3l5py*IQe=$w}YK~y@aTA7*83K=MRkdc)ps6Ag zWeqY!_KCyQuCz26wNQ05L#?~Xf|+YTU9b%sbKNj(@_0o1Izh||_yUO&f|4g9Uc3+c z3l!ElZxRwO#15Z;2@|Jc+_1iIwT>p2#%Sz7&anf~M~*>aytyr6rN)eaV8#ZP?!Z@&En{`U5J zcw|f@RQVfmG`|w+9)$_Lq6Wtg?nbH650QaEkXy%h=Z@&4NAXAgnt6J-J;J7GgP{#2 zshhBR^&Yf1CSv;I@8F$xKj-JWKf%#DlRW~Hrr@a_%i)GU-rWyQQcuJMd06KqH;Zf3 z#MFq2BTKOMP$3jrGh*&}4)?{FkhdcP4O$K4UO|ZM69w09KWm1zy$Xlc{EDA{U4Rvv z_v4hp9wAN&>^Yp(YZFs_TNToFuE4Lef5Wm>Taa1~gv7d|YX1gmVtNy}8cj^~9kn>P z{Ad4+ke2{e^`agc6JhujfSs7JF?P` zA-k{u`FYLoPE10izw;$E2fL6arUrF0iqbY?&63$zvT7-|>`y^C*UTg$1P->XN6dP( zl%-(Xs$VdF(L$`-xB-WAPC=oQpx-E)CZ;AG8c*%T`lYimZ}B2*+_D8}1;x;c+|X~> zMK&>2W?}i~pW=Wx2{Fc_SoZUm_-)k&q?an;>KhC%=iZxh>f6eYvhN_;JcncS&?q=| zwX11F`id=RjK3SR?ih{`zd-m01wq=Li_8W)3>cUQudXJdMyTrZv1`S5n6vOVY~GiF zYP}-@{JbEyV+mu_p=kT(_~7d~*n1=${XHc>BUt&NYwJ z;N;?0@WmcSBo7Hav%t}M9CN<-44L+W(VwrWJ9j$wwtsu2YeU|?U-99W-(%O|43sz2 z;M7UW{@B9y#kL(=(C#-DeSLa677Qrb`cJHGn}VkwOoq!DZM!azq6oW|eT5%?osZ4C z5292hhL=wOTbpphMWS^GBPlwc4hPE2I`_4L*@XD!0+f@F-J=7Zu5voUx6Z`g38 z0D9*@1bVta(zQFx(6yK2(CY8;%lu!laZd`$I_%)>>kTKFrMapmZxR0V;s0UBo_)xz zs7HC}aU9yUkxv&cpO!if!=RAPLL5sCWj(SFuf(Exv$1^j8tgq;18G1sLR`6;coW*I zj$zI0|01o)4Z#uqu(!EI+>!MgKKO1K^ns%gX%lIyD$}r$?c-nPFT|#;yZGyHKv<|H z?=za>?fBux0}w}r!L|7a7XJJ>ep|5~C(6|D42y!N+$Ie*)i}O&5q_QfEmm#Zh{Gq# zV32yj$HxtJLLG{?{|EnFUyFzV(QIGZtQ<#KjI9g5!=7q6!h?MwV`*;Ewbq$X=5Dj=;OnW;+pan z9$AhBzy642>o+33xD^h*;qY;`1J?@G#HMF${Tg4cPJzfX5+R-rmV9n%LF(Ms@qdfU z;5%e6e7Q>$J8yKbkvpl_G<7OPMP{SuU4DS3n#=@X%ME3qgm^bfdtXQ*-<%4{vJ?Sk z|NCdyQz>Nu{s#OuZxt%-f)Roo%>VMAShA-U0ZGa5zKEhgYu;Kc_+-Bp`MD>3^-io@n}dXVod3#%G`hrhw2bFZW8=D%20?T^Ei*fZ=U~sKm1qf^j)xw;9|L0}5Ex*Y&#mkHCxk@q3=f-S z@Pm&DSu2;I%=cbAIxPV%5;HY1y}{WwF}*ecqOlqWmTW^xQ3G`55Ipq!BZzYsqPcJz zPS)wr;oybXSa$HZoj!pX)a6+F*&FzATRtiqn$gl!hmx#RG5rg4gwFk@BHY4G#LGbRSjA$s{ihum@J5>E&#DCtLfsx4xNa!~R$)R$Tr0+vY zo+Ac~AB3o@79c87d|)-^e>)dPDyq@c(u&r`DimiQ#9>7=CME}3FH#27W~}E6P+QXq z(9qnBw)SQ=zY2B^t~LRp4i$$M;+vm;!-10}Xl!XgTN^v>+SG7x_rLf6QB#HkYd0ga z;sg$?Sc{bMTC}t@qP8RxHCicxqvGLV-?Ie5HDft~18G$V8+!+m{H=vA9t#kcZ$WMN zXiOX!0z0z_s@fCS%?e2B;ISCjKN607AjCCMJ%QEVyp5%YPNBZ31D>Rrs{J`^c`W@} z8c>;k7>6W7a93XscI_0if>;So?%RWQ*EmFn`$1;C{u)#nSo`Y^sE0m)DRG`>KAUnD zYWACJ_8x-UxK}W9Xc+7}pEqQMCy_(~i8VOnXiIis@wQf00NaYMzFUjJs(Q3G)uJ@J z0!DXM7-a6o{1AAE-1k0f8o`P2DAOPB@~DspyV{oWH$s5CH`4BhsJLaBoPzHATqEX@px;4FAj^QH=!?E2447h&~+}T=+Si!O^e-93^eI6B^2p`AJZPVlA zx_@9_%_!V?-$1zY8P$mTV~g?C4?kg7`YFpfp|u`mmBnaqABa(5mOD$j+6-*nQv#Fm z5PtY+8M2CN(c034nvxPUDV-7Cj|F?&Nl;&b4PU*7*;|gFqMjW`>>AxrRe+2Wc~DCI z5fvT?bIo3C+}eSJDTCo7>2b8Q7h&7pUFh&mMsj2T3lR0lUi2FNx#S=!>l@M9T#xFa zbQ~#Ez&9cq0d8^#>-XTd`D%=P=5F|_PhsnVkMZeGzhURz4XCz@K#YAmHdTA!t^vUi zXj_oC>wA1P`*-BA^y9Xnwloum4-~+4&}c+Biy;t6+4V<)y41BuuahGrDi-eSJl350 zD?VDBije!?#658?mf*C#5bIa`gn8@sp}L^~t!#fZ))XQqZ9fc=EMW7IK+|v%N7*rx zc{B~_Co)l4Q;tj)v?-S?!0zgL)F>1X`X^yPpcC4QcVGuwm!hIISiS8SD(af~8(KH7!@lB5G&U8Z(rp+fMW3q&itaipk6{0S zW5~(hj!nA{p}3N5b88d-ENW@HJK~eV;n4F?XHIST7q)lYftmOAgR{+ap>sI;^@)a` zyA#BwTBNNz(0hO=5J4)J!;YQ9x#SeEbGWXp1UV-PAq^jjgs9Wk3$auViO4b^cQYdQ z@J1Z0b;R(|qY>%lV7=+Vu5pc7*t~ot)O{Ys17mzpeLNL8tZaQ|fS86deJGL#_j1FJ zr$a+g3Jx6WK>QsuFe2QI-$xfpb!-kk-&Bf8&%TYJ?3y4FQh<1)yXMaz>MQbaq^=1a zEZ+$HMY(hZYBwQ!>4%t;s^EJW6N;sV#3j* zDNrbSbiJr=#)-X~uzpJhn)OBqtnl6EQeM#y;y< z5UPj4?1BL!MzXWtcAO}&&fJX#c}Mr4QJakC9vccz2Rlf_Vu&SnaE(a7xM9hNIa|js zSCG^v7L%X*4ByY&!Z#0DvtS-x8ZJlMo=wQMwwf|F=3@7rZOD}j#tR=V!m^dSv1a9V z{QSmr%M4bAnl!B2xgS-Yx8X1US&3C_d8?Og#HY_ru+DL5>T96 zru9c&YOEH@MNj`8Rl=5=Oa->5^?*7xz~J!5gtz2ou78~;YB|J``@ z&XMr4wna4?G$`IZ7rPX3c;xTPuy_?qm&MEQ{v)HIKClei%eDOZq3;77a5{(Oc)T;z0hzTZB3`3Q9B?m%##%uF64r}1xuC|VBnMA;@9PS zu;kk>FfB=k+>!#eK6+LTIEmjrS&VAO0eJdfE3lGn$BKFL@#cNQV3)fM`?E{Yp%=iz zD->p9DQa3-o@gn;h95r0|1CO%1|!>+mRc4}M#bqfxQr(@c1moxLrg)l2{Y~6euZuG+=A1=Z2m3y#i z>3V$n@>ED`QgQTH{+W+I81-m4c@VjRcnpm5>-BdHh7@F-^2ej^EyU6lTk*r+od9RhC|zp2)TU%BCPkM4E1T)w0Rc_bbT@7tzWTZ`EIOUu^C_g?KO-z zqgU}W33SeMg)u)9CTPb`me$I&nU zdK+T{TabF}0P?DpaCY@$1=M;}G?`dF)FSWq5Anv|SE7VvVNFLXv?>qyxVy0PEz8n5 zbMVc^TJ)RwU;Mg^Tiz!8`1j}0&v+F3(+kng(z&BJ69tjO5GiZGu}$A${*G*@JDO2b zCV^07&z8fAKrC2QvS7HiCI#!)pG5GKcktc(oosnK@aq?U#ZdP`%=tal(xh7;giBxo z#!h7C#oXQ4dn_9*wFj_t-hN>0yLfX_(CMH`AVqNhY53zm7qPV4W!aDac@upFEjV~2 z16`$EC;6Gpg17oBeP_W?g^vk(&k#o`kBcJ*P3s>yM zl3#zo!wGs+g;_bIhbiW9}L(-&BXl$#3F6ziwmm?8KaZzlGre z5~R*qhOEw0M@J)SD^-ZR?|uB`kumTu*oS>y_u}(~v+I*g_r{c^9Ld=?D*txL*vA2&#K+ik9EbxJKNI`ygh67TGIa!#(U8ci+r=@x|^IjJ$gmhDCVsO`|znkE%J_mm|YC7I#e@ z47YP$A8L@g;{!a)mUsUn58(9=zrwbRQfRo73x{1()veXguw$(yYa_mVdnRT+I3D*r zG6NsY+k-l_k)5e}XVw>C)8cI~_jv)6`(EPBIdWaQ`T?SuMWZ?CXl!m|8BK(+DT5Kh zMvG)}1jZyHk~`>>r%+H_iWV+{4R91^I>9)Htloe+AU_&Hqs?mGD3T=Kr(UF)uI-CyVY z-R<4gyQ`n7t_O4It)Ln1H?{hVYTB=}W0`Dp1dBRQ2St7idk0-NiS8o!$KR)9%iep z+RngDg6?^Ux~6edS(DsrQ48Gd_a7~_Q4B!cO{gk-pU306K>c523|QbWngqG^Hi4(0 zy@z`<#>7qmCz?d*PL0p{$c1s3d}OYNE<{;)MV8+yQz(l+JnS#f;6#}BDWYL00`$pp zD!xpMB!KZLmNrW`o&v9qk^e;PJ6vBsr5v?ZfsKJdg^1+>0a=a1R(p#)hN3i+w(c3N z{K)q}*~7eduRp;Zz2@3}wIY_`%U9q=P*5T1NAXy4WIf?p2>>$T<@PHEE6ct#%ck_jFBEQk}7ar8=2dSTusX84E)}CnV#DQURkeiHz4sT0YqUb*JJMVLHmHUa7ys2E1hT+ zTs3#~Q%eEjUBHFWwh9Kl|4w+z=}Kz<>x=;o=L~N@`?s}hmc6RxdcVN8EVXUp@Als$ zTtw^GL6HhAMM=f{`Sb63R?Egoj02t8T-j-z0=&T&2D-1S+n+$kU>*`RPm|_5SuUGF zti=pNrZS0}+=ab4Ce;P0+EF8D7TzaNt)fJ-z=Dx=lGlm)U8C}mF|Uc@=;Tk#QQ z;(1)l@Q##n=a(X7lHi;xz*qJt*3@B!PPSJo?oHVMq%^++%f$*LRta4()LQ6RH8I}e zSV!)@!49{)Ug=6(BIWUUy4d(w)+TE;Q1nLskO8mDMR1oA7#t!=JL6Tk#chAyEP?)%iRk((FZ!;>B6Fj7dTCd{O4ym z0kHFhA>Uj1UukxBP))n+!COzrfTJs|U^&NFfbiMOLqg8|9VVID&0>dC*RtA8&2$cH zWv0?kcjz^+arI?hMMYZ84;DfiKu$}uIWW$jblw%4X&sQPjCoh5Q3pI*`L88Y(BwqpGV!L7y zU{A5=JE1nbb-}ATIfKQP$SglXuN5y2M79N)f7#u)>ER(j@BT)q(-C9XcY}`JBBu~o zJaJTQ^lj&Z-{Y0U^|>?ErhNSJKo`!+KxGQG3;WMKoy@XtT)`MF_s_&{)-@2Wv9a;U z0iN$4pJ|fRSVp61^CN|Vi4K5A18y*&;=Fc{!SrOVwbV+cZbcRoW8g&lG%1xiVC|ETD(7@yN^1 zCz8QA&KUOgN?7~Lm*T=IlvdYw%lmGII+|+k#$3}cB`-8kTF-M}wnK75xs(o$@f&C8 zRWP5OpRMV5gx&@Iw@=pt@yEhV)DkyG)YlGy;*>=?%8VDNlNr@vll$I9u_~(``i8|g zbWFc=8&;2lD6^93c*`AYDo|>&&%mMQv4*@r?GS7xezc_mG7E6#H2R)?mA`HTO zQcrrK+E3v-k6q0<&Z}lXbjnt!yh*MreK*R4-VbRN&0^t{+QX%qSn=u2nYH@=U-~OY?~8$-$fPClYZowXt!V}w!tJH55G7ShkvC-I1IV{ zr`b0w#~MB_3+&gHzp7NW+MOK0jX!3Tt#?<=2su;7$3Mq1_ka3IL^CeuS(|=5i16<8 zIdWHyfBZ3XRiptqb1tscN4d5^4S6-DpQKbf-+PKL|51~cEkFm!Z|O_fNY8uG=Z8q( zx-iAEDB$Ue#Dzgl#$#hy)^VJ$LA>@xsZ5N`MF_JD(E1l!VJIz2e}u?!ZYGOV{fwJ8 zysza7Zh8`(v)Dx!cPTa;&RF|pU*186w{2OTy`?Kc!f_@)h{d$g-c<(2Q^n&FLua8< zjKUozLU%MdRkqq-P8fKjQTgD%DKA>@L~LC_$+BYTJ7{U!Z&Oy-G=^OHi2Pb?37Nb( z7CJ50B09;2Pnw0My0oT#36d+UP_vWL1>0=G<`J2xHA=t7J(i4oqF>%HncFONpIptEheynS z4xW7~#D#?EYJL3Tkl<)n`CLu(zK%8%|5nvivR7#YNnD^UHX07qs+lj*R&0e{hGIYL z)4Ewe?Zz5pnJ$7$_i4I{-SKutB4;OlpCmr!&|>GT_Q&P@JKtnfaoUG;pN)xt@G?$LHW-n4I3a`=5JJI~bxnF#B@_Z0NqJ37uA;F>8>-FzYH+v;mkTN0ho)K8I* zVNu5G1Qh>%es$8_<$Y-VrJ~^2+l;jv{bIitcg?!H&-n%Z&akHBpMi;=nqp+`=k$Ly zw?@L`4Af#?9f5hL>L-AbLw!JH6_i8$2Qu={`{F&X!j^{Ti76>{*Ct=*)n zr57UJva`T72GPiaZAP_i~i-KWG49Qk5tdiWyEGl9cZpA5IictWw8vCkw z>U(Os7B(@UHGDVKl(yAi*?M5)sj7@h!Qf`H(c_kUBQGuav>1D`E2ULq&T6IIr;d#O!@|=K%jBm#-a%y1svyY^jznYLPe>8@P z;qK=hXy)mMvwTH--J{6dQM00~no2+hXN-GD>&P zzi-6-)A=0}6|*r6d?iT6O8l8u>Vv?ZlEcQlk|>w3n{~sTPAUU?R@p`$t>m1JYbNl` z;Q&ift){V+KhiGqcG<@&uIO?jLO}q^EKHbt;`dZ&p;sogC&b0ItLx^szkdhq?`Q~@ zony=4l9uf;O~v48GH%~kvka$M199yfNP!suocu^>?L^NC?`B|By?tSU8osXcJA6d{ zP1!6kBo;RRj{EmnNyAUE;)UHWrMWc)ao=+>8`h5dt{)Lp+i?d_3x`UoH??Hm@IN&7 zVr2syEP0alVRK8$8sjX>3*YyRX6 zY)mz%<?kX~pO0e0p(lN~@=zj7xH&7o3K880sB3XB1f zbjjoN6f%INefAD#m;W@d7UBD17h;Z{&|;zE6x{ylD_`{eK3|vZIFZ4`mz=DwV={5j zTJSW&#+&iUpQ~Bdxu{`olj&qZS%rXVQQkmb;FL?lyA-MRYO-zg1$pTEIjyM_JYEN0 z>CVF%{sQ&171faX>3coaO|Xh^j!Wco_v)03iXJW9xd|Fj#%5*0Q+>e}sklsHe7tQ3|oZ0U|%gOY-@{ zCpVFKeZ%pgP)X?ZTRhu>7KWUxVdRh)QUzr_!N(MOZg;>`tt5(%lR;|*+E|spwlYQc ziBG-jjDI|3Y5)!!Sgxf0obY9`>6_!@T|o70&Dk6NLkSt_J=(g;fJ_cvjUL%m;)GjWA3WoL_X}U6s z3S+cFB+z-Bx8wdzul>$jVh_JN5_elR(gkswDdGjK7b}pkXrG$A}d&hUQ9$m{am zEm{^d>XM{FTg6^GTd^5%5fHR5yz>o~FTvy7kVNjQHk86yRLK%Aqh>ZXZrEtP{nG@; zH?GRF_H%Y)cy}UDH2g|a*SBXi&N)ZVuUTnea4;`-VqFkw;JmJ&Kw1{_<6}R1WuPHB zc9o|Z1{9gteeSDf8|J&V_v~Ldic)%|fKJPQvZXKeURw{=3brS5ZHCp{Xg?^i|bZDaTL+A z;FhzADFalIQ|eI5SQPt56u17gi5<@V)+Ah?JlhwhZ%s3qhk0=n`GQ5Vmu=jz9q73# za~U~5-&F7lguXctw=|X(#0(1+_SI5axPMDNVR(WbPxJAi&G~!6{A7iL60CT>;4H64 zS^HSL?octep(?u$NQ|oLc4aZ2(p5IIY-0+Ra6RoHF;tvuwG%77WDhBoO1NW2ir|3v zXoYK|$or5s53tz(EaFX?>;@k$)uxN3ht_1~r+M6b$XoJkAYq#%hPcymC4X!A@JvEg z?LQPSe=D=PG^vo4Ppl~h?R8?orl#R~AKkg=@fq8}wlB^~82N719+>+ycVz)!VYHiI z$LK6}e@LS{Dy%V40|<_#svf;ngvjwm6#ws&th5p8~x2=D;di z#6^iUfy8$RC(E5S>D_fAmz&{)SN2OK2a7IKGf8!>lmkLSR*-K#pV!&3DgGAWiK1e? zyVwQgv-mfY_m3{iTgb8Z_>dOR9|1quABZF~9WC2B7Onm<5I1g2*&L=%#GiV8!Ph@L zlpmG*p}|kMPZ(`-V{Jq6^09)VUzx5M^r3!*H`u*tvEdeP+c8g%vQo@0oQX|b=C)($ zaHT$JNrdMM-&JnT^c~osrrCi5f~e!UifZi6E_$Zy#p*8R0$(lwH9u#|>kOKB`fKgg z+e(ZCSnBaQqjJrkPzdX0oQvCZwHefkxGHDxsi352A1ci$82F+jBtb2V+CO52RV(c9 z*w)m2&rI*{i0LALv?M0BWXceJ^mr9V&;KX=d!5a1fk3$^Pfkpmn0F<*h#T9H-CU$r zvMYxMRM1pyr!z82wir?v=odS`(#4uT#z%-EvjggPx1%VVw+n z%zo9exH)X#@w`gK3?~ssnvzk30IKKF>Dlo+_Xk^w{*eur-j~VsaRsI?n<4_9LxF7D zU(~S!q9$fD(^Or}vD5dj?H2U6xI#kIkA5y_nRA0xs9QUW3be+t%i!83Dg){}?sfv` z(N0#MyQ>b0mY2{{d$oX!a1E3$b~%$k)+DVLUNO@NS!hd_dxuNSIg5TrByh|2+YvFe zBxZLdGb3d+iTds5Xx9ndt42vaU=E0TTI%L`Fz8KrdUy^Z7x2^YnrHfDO zBA=s~M1KrR?leMF-ay~VyaK7$!s!OzrE;-N$If4{9S%CuTKsjnZ$6t6GL@c;S!e+G ziY~LGYG=FTGJBC5UKOi<&n$wXfa0L=ugp>CaSyd+s|?a88LZ51ltZ1e?j(5B@y>=U zISz}#LJquL@BFp)_3fa7$~Fcpgt5s4R`1=+o`68d6;&H;Rw$QPE7tzHkC+ou z@P=Qhs!`YSw@)^v5^r!4hZM0 zN2`@wgWJ)@q)B>N9@05fVitaweplM$g;^&f;FZ!aAligTYKL8a5p99 zzeAJ=XiewbaqI27?3iMUm^IHQnFj4sD?^&X*Eb ztNY$qe|&np@KQbXUo24zM4M@@j27^snq z<%ETy*5YsHzqI%cL8B68B}55la^C-03;mXdRO=T&dqsOrTB;iwD~FED;ko0VhUw{g zffe&k2ZhDhn)Gm?HoO%rQDL;QgY5gCMg5K49e7-0eo8?t{8#Otx+&u^e{xgY0 zFQO}-KbFnV>w8wBs*^Tx2Rc6K!i;KY(~0~S$?rrobvC8s2X1|#KDR&gNg*KMjmR1M&Tth12CO4vK&r@uwJ7J^DuMp_%N_ep&`^Eq8)e`o-F8u}}cYMD`Ure>>Vlw)BZ35h7 zv>Ur`W1kDf@;spbcY-8r zb^XI$j5jKx(6pUNbUsQ!ZAs~N&8V-7>*<~S?b3I5OVlu zuTl>o8QJRCh%wBDvq4r8()_dB{9eWI3YN&xtCTg7GctB+>d@5Y*fQkE0-{~gI?xq!wum5v@sKJaVyXEuWk-<|hOtQc0~p1F+-xa|fETU0gn zXY0AKv$EQHW)_lMT_rVg-QtUhoxxZV3*384qNMdJsOeq{yNEua0_iCG;(#7-#*2E1 zQFp=e{qpj%Z~BM4Z^pFtvlH!aEcKvd%QVd7RBd6sjG=zvhWN>0UN=SiJz%^oEEeI` zlNLaMh{~FGrk(+EUmenRd9omk#3Dad(0w<#I1UJr?Zqu{F5omop|>L?(4Jg-E0nS~ zp)I*2NV{RfZR28EqZ)l_V&2^&XI7!Umzp8tdqrz|yR}Xx5Ub(p zUqul3NBEpKB~FRP=I$7F}dTy^}oWhcicMMX^?);aJ^n?F)t8Y4pY&Vip4eNjVY4XUj%ja3Zh zG@oBud|X^jhy!IYd$Bn?2!}K_2j8BxIup^UY*V9Av<@|k~R9R;8 z>488bN^}aByNraNR!zX5=8%z^>iT0+SR-dGLDj=UU^TnOU4;}tvbzCBQ?96{1j{m+xJZ$}px&^XL&XsyAD7#ku|9Nm_2)oH2ibV#MSA>hZV_ zvCi^xy|B{jYl-1$r)FH!6*(M465S*9%m-y+VmqO=#@lqDVD!K++WI>igH1f^&Of_B z?SOMFWMa;!2PR;;mW%^bFa4ddl9zKjj^OC(TUL}@M-{(UH|BJQRH5|p97JX6O}D2= zJldlaPO&wBmb)c%mnE|dVy7k*^|w{01Aa%1l)kSa>C_I|^F7uh7<~*B?KUI@kcW+~ zL(!;hfcLt94cazZM@PrFKLew1E#u`Jk<8jmY)7N2D|UH!&ipTyZ1J{hJ1}htB*%Ek zY=P|HOLgN0^=^FMSi~PWT_xlTJ3ar&-H;eq@pF$lBwli<9AM~*6WP6>?=soM?5uq^k>?q+ zz8;zr_=4(+KO;lM8#T0y+Pb2rf1+&Zs<<<8Zh#<)&KtF%0(Fyo8ryCwisa3u-I-n3q+m65EgK z@3)Xe1SC$$ZG-_{ZAh8vaXM_yz><|Z5n-;AldB$Gl{V;W;8qCRQKq!fr{PwIL%e$O}IMopKaZUKX(b+rnKTM-EuP*V| z?#r)$KxUdlovtZUVPd{#xr3OFV7)BzJt|y<{xSU7utuc^pb{q7rlK_MDmxoUbw~Y1 z5mcSxw9TQ`{>{I4Llk)PYvR>B08GgS2sGIHo58;y6W0RYIq>)R6PQ^V+SIGMSbH$I zhfyV8VxIsU0qpI5-Yfrx;zga@+veRwbtmF@Umw+E^B3S;8%_gcWvE?=RRK4Yt(=_e z>?|dOYUj2{H`@roM)FB+XC)X*jV)@*o#J-gS{mvWjOPGq$dj^Vv>?CD=J>BS>pS=8?acdOjh9*K!k#jTyH zNoPKzZZ@@98@v;$7&{|U&3g9dZ1d

|yNe(EV@L?vqsW6tacgHBa{Y1F>ps&HH8dQ+dCmbw0`j1%ya_x&TEHl z-$dOCD^qR3=;Ma0*?h4XN_Zez#0uWg-3No)%E6BNtpEGBB6nlz`Hq#o zP(cA@XM2|oyuARQDIe&=mKu%VjFAQ(clNiJc~-iXxJoMcN0++tZA~gy)$?0l9Ob2W z-4_{{984+M3+IWwcXJ4Ceignh%DmLk+$Vh!Mq$&W!nVoiWINPmbc;hR=MXWf zAV6#nB2TuVb3zY(EvDjf4PNI9qHb%Dvqe{K~^P);G}olCM>XZl!Ie$^{>oL2hL3wUv=YAxWrD9me_e^OIAnj z%J{1K27j1!J&t*wz1oS7uaM&rWsQJ#QuPK8a3^KV+>@O#B$)MK=OL>&;EE>ry&%Dg zD{)N{87-{%{1JOycg$qCxl*(*lNF)yIUp?xW2bz{1NZK`tWmQS5%M?H05t{p z@#r7(d{Rnc@BOOBthRef8CQ)e;Adl#kNTO6(#0#?$n_s+B|*ePH?_FLXch7Uic#l~ z(@$wIzWS9uq@$(oYCGWo^s}gR*zRAsE2uF{KBwFQG)`;acgN-M_k~o;qUt$pv!@s$ z9)6D@qLI(=7QU-KcoQl}x1=IVkX-xr2WQaZ+GDY^FbgcbCD?oK&UaaoU|qDiBqMFU zsdPl_&z1jx6(uxJ$+?@S7Kzi;+={D|=y!8*|bN4Wq<1rI&efn0U1rGR;f--iXitY0IKu=75W= zeT#!HaOl5P)xOa9Ph5nE%B~sS;n0798lD@AP>OsN@jn3*XekOJOB<}R;0#40BW$oh zblSFnc}{lrhQ`LV^>?io7|#V(=zY+h+k|<2eI~4ai`Br&=v3mv?6r}JrEUMpQ$>;TuB!q{*YM+3!YC4Gv|LB+5$ zEAfCE-TRYcNW)f2q3C^g`)r1`>`Y{+M`mc);+vN1=7WawY(~MqhgpFbl(Hh;8>2I) zfAUu>-P7H-BgrOiPN)&?qim_}eg25EdN2OZlO9nf^hf-{EO_-8-bho7n(Ai z^W544ez%LG-q(+;ja$&n>nVw+q2ny!rV5yK8v~_6&WWAtEA)p4usgv{)%600(^}jD zk$WFbfXkqztBx?H-uas3T682ArL1g&QBdh z>g8mF^nb+j z2U@pRY6T=HYEXE-dETysJvXl?8|H-n9LDEIYO?wQFr#Yj&?XA6{`0OxYPxhw7EkS5 ztQFjNWcxujM72HG^!`$8+3&zzr{$9Q>GmOi7}Nbo|5wF#|2xF@V)BtCiNMI2)JpT7 zs8OGTE!~?v$5j0F>1q;36bIuwA?B&a;g)lSfR^sAn;!J0=((G1?*M>Qy6o)({w-@JHF|@1~Y-zRAaZ z;U>>+9q)f6m%g|u_^E4IEaHW4uV~S@_Ir&4?9M0GzBb%?g#P$2&e&2o?%i`xdD=hB zBs|nkQ#{}Jm$b?pP*GUc5;1;8ChWi>2<0fO(eei>Z}IX%el9j%xE>PiL)`jH?dhDZ z)uq%#WA^XjiU2INo)AA>eF)OM(}6-q?UGGVeq(Q=5%biWk+hl;#B0KnOoOu0GCQrn z6$K^#!ofb-AKKF;FP=V~taRDz6*OM;*V!k{GoF`1{Emq5D`K^^eh@>pqDsq43#UBp ze_tH~_wDz;9C2InLC#By7#&&44yJtD>-t{(`-KVOU=2a_u0coCUA?LvF|t!jOR*40 zH4SUGtjtg*Q2RB|%gYOP12E8B-mGdr`naPHn@@cl3pyj1UnD`TI)18S`8vK70oMvSm?CIV9?u(&dJjko`Q|3t#z{}G5Bt7; zlIUBR(3ba|4^Z@|8cyTRel6kU0T2R5<49@*qn{t^V+nXI8q<+Tz*%f!BfEZF@@Klg zOaEtk0x<@4kmIOvpmH=MLm0X(S!e(Bc2UM;wf*qkQ3I4GH|te#zlF<6Y~?ndHk2Jr zH#e*SoO3TusP@IsIBNn$#i8uiKA;W0Z5^jf5fZ@oTdCBY{e;mRdOGI6$UXZvAN6ZJW;;NIue&>3uq2`)Q_!=N&CYJzZdV9sExqd_xW5 z7?WOsG`jruXYahsI^$@ zFBf8Jhpr!AqRajwtG_RJWi9zYag+)f>vk13$SW?+MGF7qh$Ku(B zslT*$-Dt41(Ub(a-r9(3x8L2K30z-P^Bs=#=Z)=4=lpWH&%$}B z+_T`bb;CDVV!5nQ6IyS2gI3v!pl$xF$c2hvWaxY*pKrm;d*lMom{{z`!mP zd1T{@SQi;qm3ODQt2-*@vEpoV^kF#x5_WZZ4A`;V zyB}PFL+gqZSrm;(zjH>VxxgpTSt!kVpF1BW+u z4yw~UCug$VIqP#Dy)MP;ioCh~AH98B{k?w_mPQnav3yx>2;CkN(Mxsft-n4ZeT+YtP%Q;MvHp;>jii9o0Qfg1#PAjwV16mvuxyXq?UeNq7u zPg;r@D9ot%-z#-o_u#U6s=1X}GQpl!LXb z9k*K%67MR;a^5Cw^Vq^1P|-Yp?;J7uoS!Qj#6u{`8LTG`S{`Njk6kCyML^=N?0_fn zo3!CDcgIoIf2vt!W`2!@1oSikcZHB&JIg7g^|+fZ*DAg- z4+~ocaB@Kb(W;osD|A}%*6d%ioL+SkPG=pA{nVoz_Qrceo!^;tU5>sb=wXWQfVW1^ zr=w=BJT&u0Oiv(_eNz3D`))9&)Z{TDR~o!#`V+mLrR>g@QAJEcQ4C7 z!*JK7&eGj;@tp^OoQ(>vlxn9L$udI~TYqiWOAPZrC9Wi7?)|J#cmA0gjm)-mtWho_ zA=-?j#HnS~wdGc=5VeipFXhWj;%AK0yBXo)L)D{?vBb;1sWA*3_x_@zXM1UwYjn`n zqUOLsX)j~h7D&Q%BhKkx>HTWUrX>9hOCe_1xG>4!%200a>#+E^p7ZV(%UY_g%&*?) z_m3b-F8!Vu{oq0Jdcuy+FGsjFw8!191aLMonghEL6zvFnss@A&1DWD%w#m1xFCkyL z0K9l&Zs=Z1PnKnnR2 zj|QXt(`JoY;<`g@b>;BZ4SSas;x#lm=z9CUsunZ4&2pm3pllrMZG2((5fx!8EVX*( zq7^QY2%uuD^VFJL*}VX`1&H!dQqiI-8+)^QEj}PSrHNs~dy)OlvN2{;ICehHReihn zDZIilMqgNd#Hp;%gTX8WdW|n}5lcWiP1K%?R|2MOYm8jiJv>K)pvH}>yGB4SXH0Em z`O_+jNdV|g<0YjnF+G_WdNlRWM`yx|Euy~#J%ihBi9o7%zWdr(VzRM06{nmcpELI) z?6AzC#c_kiU46eVil|Fgw{1ne5n!whnw+*LVMF)PJmPV8tJ=w=S`PG~RZ=WWG1<%F z9o(W}vQHavge~{`?tV2s5`|!K8QGAvjeyOwMM-lTh7rf)0>4uh4v8n-Z2x1^4^JMf zvTrH~QndcsiRf(XQ&Mb|2vL;ei3cx#GIJr3Bi1z#fk6+ZkK-5s5b{V0-h?sfcc*{L zs{Niuff8nK2oex zGZzFSV3odTv^C5geoczQK`!}_J*wZ%pU~tED8AWhY3bDZqpl_=C-#tf|1C%29(QIq zr{~ve(b-uk-H?eKGOQf*wWNYeAlogxvc?WTbQEvoyk$#@ z&i40@v}&nJRrtr2ZE~w=gO@VJZ8zk0YV1Vjp7pAxCT&HEjeS7(Lf^TAftjQgiPDxrC{+Cq-NqiSHsZDkor^KJP)zT^0S`wJ?wFWgf0= zzn1PN8*|2vQ|ZXpZW6gKj=vSFQABkTlt+&`gt7RpZM zTpVxc?%)$CeTR@s@*Hp0$xe{s5r^dc6fVkY8siSs`dsn$*Y)K>@ov>3P&lZu+z{75L5*%+j?+K zkcy$lDbNh|L6KM|NCxiBkiSboo(ti>VqC9?Gl94Cv(VY;jcom+@3PBV4TM3E4bX71X;<5n&@}Hvg%)b zdF_+cjwnwh~MJo^$d)znCv8c4LD;;_aSk^O$p04Jo#LQX!l9z88uR_~K z0^CBBYm z4@~Z=pwz3G7rShhtAEYF-k53#O;>2(;dETS5;?w~smsP;%s4~NZgfT;y8_>@Af5&# ztMw~}wr6pU#8g{5B0z_qsX&MPa-la_{+jY2d^=Xt?UDFt4GIut;Qc8Z7KV7PuAV&` znz(oRo6CoW<6a0Uu1A^IBAJ2@;=M^A+&zji#}lxC1qf{2Yd_JwzeqXFnl0T;-=n|j zX}%r`GZ>bSqjnu`T>~xpZg~5;6~_*G#-DB^OJ7g8Bi;r!z2HKqINe{m_0`U3EbRBA z$t~hR*X0o_ooQ`i!83-!(R!B%>N67q`O1|;uDgU89~Zd~a+#6k@qxWOXhw|>@`09s z2KS)Esb};>>6P*2hjv4PLYp)uiEC1hr&Ec7iw~|8@dNFv?GlDxxzw0$bBA@W3Sm7GN0kx?t|fVPqgNxyds-M`19$2 zyYe$7g^1s;MQUl!v#(c@LL8VF6U@X8*a1<wdaB+dOfJoTwCbqx*Yp zvqcaFt#H7ruJFDM`1x)G*Mb2e|t7cevWT+ z;as4(R-8-T&UM_b%iIxXcPTxUXB=wikk|-HeK{6!|X)Px} z!tW-kQvKK`O-{)KUhF=4Vi>T4dqe5sN=g!h0QNpuGVPk zQ_G^a8*{M(d9CgH?ib!zBm$$SRHY`EyMq(V`zMyOyUZcfk@dnX3Ioh^Oy((r%?4_f z{7uhpWH9C)zsd zo|xn8CKoql8AL3N1YWwe*E6I1cLp zi8U?!rwR`(Eb?7fctr0Nd2pV#ykaCEr$p_b0@Qyf?)CO1RPsk66!$53si*7$jnKx{wYcRu^PQ{RWMA|XgD#Hhm_#h>umLU z-LSA2wMur$OBC$>T<-O$XA+qVZFi5XEj_0>7moi^u^;@A+U;)K2PKtx#J zKSx}T;r|p$rQ4Fb^%-3S0thUR;SqI~|fgV}ml7GK$cB1iaEhBE2 z7yd*_3UH_Wc@w^BUH+Pxi7A&Kgvt3M{~z`SQ-21k@&5Js1{=4QmggTh?TMfGNB!Rf z^$t9v>`cPi+{p?I>1_i8KHUER<@G$;X9eWB?7xnqq2vC)D7fIKf1vb#zIRF@{Rf5r zmk0ZQ!_fcD6a4={%%8F2|EX?`=KsIyU7ePbA4_rI%wy22XIBL!CCuaFV_0QqgSQ6| zXi+_Pa(3nh`#0$4%Kfw{DJdPUy-|dZ+VPRQdwb<}EdHl@+BQu7fU~PoWSI)ov5}FH z#xz{wcqo)z{!LzSaj|>ce|x_U88_Gm*P&KD2OF1=kl4wSG7_zscVvqX3keb2`R}-C z+sc}nn(|-fd3>h(zaI2Y1bW;bMyAf2{~8yb6&bHsB78tq?&SYM@c+-I&i^{wcrD5v z+GSDocX>H3Cnx9Jo|c^|Ha0d+lnf7VJ?nhR&S%A@y7bA@&utiA%812d*F*T?Hv5V2 zdEUAkOCb1Q$jE1uFpavHUlNx2YhvKGUSD<{=S2^}5l2)?A<3MAt*iB)?O*GLA1ehc>J7pFwRvbi%UoO6 zCRm!bjdF8I`k!?ACH#+#=6Rw1w~$>}bd5XaEu2kduFO{~J&VrYv9W;8$=hK=8$O|Fz~EKSWpuj*~vRE`4WZ5fL;QZyIL#>WdO&l5Z}(4F}p z)@sSH`M+FZnC4Rf_0om4b8dbH3&U|9!21|WYPD+izJjBP1keBMPpL$6_U`u^emL$L zhKAt~d+Hs=wZG}38L2s2C#yLp8;x&a={rT9a81#ZNq}&(+My_Yl)jf}CtGSfV}D_K zMPO@WF~V>Uw3Xw%K7HyfL}loi*m_Id;==j$j=BX*OKaWYc8Sp2xCZsCMmg(=<}EI5* z9fCUqcXxM(W;*XTx9+d0nOik~yB;~`be;3;z1G@m4^FCg5wS1z7dKH*MT5G5x3?Lb z?vuGy`*RF(E;?PM*o%MuQqN@6&6ZG@``>bd>uS^OC?ELwF>gE{=a6#)rg{P}Ss+{J z9Zrt~Gf{6`!I`aGbzk(-25Nb!Dg+tRi?EQs`6EmW&dHL2-U68!C^hj3*D3a%;A?uA zgF@b89~b&hPT%u49sWz?DzA$99+OU5;*}1kARFcUn4M#yY9KT+L!T579|PxoNcqKT zq_#ZJ_bbeAa%k7?`44-U;-3PC5XQvl=X))HP|{$@O4-`7s-gBm@!SRc9cgaRd`!@on3&kti>iO;&PXtZ8v+;SbrZD+k>3@_AH-yK5cerS!J5r7?Uk*}-@YVA)L$F=NoePs3-$ z5j7jlPc9^!Zs0##5^ce&pDXl~;`5GkCP6G_8_~!ivqA;(eyMG6IChE9;wR%n>t3*o zcTH@3BP?xzu-A0y%BJLTbky6-iJ}#15sd3tU^*D`yw#!t7v*~sM9@8r~O>n`fUZCyOtzPcC2c0|1e{Xu)^PH5#kYua8g)6u=Ge~PuM&=HC^ z-TWS68$( zlvoCghm&&n_!t)szrQnnOJE712@t99U1ZGzH&Zdp}+bAcC~x| zk>w4)mCf?>lA^^YA)7tXHoY0k-U%R1bat*A-W9S=4iW$QUS@XY$Ef&8o^$yD4ico( z8<*Z+RpYuINtb~S{X%JSKJ)KWFc4*r3XC87G}K5~4UTU^ZppQFpN;ebP`MrMMc7jL z;`+)kusou6T4B#=b~{RDF`64Yv#5AdO#qsH2xry3`HzW&KLsz}GkH~iPOJ*)V#4l$ zlF5Z?p`!wC1Af{7H$l-$z0HH$92SdjI$9bT0ri2A+t&2ZqmcYh<>S8*vUvmThvi`j zU<*ttad@YaRt;kHA`jHw*^BM3MiWNjaVv#QKlFKMpWle4-vI^Kd}Es>;zKB^rwi@} zy2n%xVVt8YSReAOZ|sDmYR-Y){@i8(JbPg-Pn?*Kh&^Y2(*<3zX*O2|kk|dtciYKc z^gOy6f{8}k;Pv8BAp##UY5*mDCBP?GD|RUf)EiyDv#qBsfM`|~d@W^^I8b(JNrQs* zUVf`I?~=eCvpL0k`on&fCD+G3dAR|@B37Tp)P*y0o`|uEmy@||O0KJZ^sy>hlONU} z5tPTWa+MMF@s@^HR7(mcuH)?RQM?7c>Va_T1Ev4>TsPm`i_q43TVa!<93}{rpc0#; zFS6;lHx3z5P@-x&{uSz-u^k`n_F~5`9QKZl9`dJ$Gyjyi^enTpQFvF20%4&yHwiaQ zIJ@u%PhUi9>>aPa|2}pn0;T%;n);i!b!&MCbYl34!A>+{hh_4c7YQf7ZLb*Y7aNnG z`ceCtr*H+Sp#V4~w4-@=QMMEe|o8BIgZt5V1BH__cQW5K@@(ymUb zOgjN7MQ(FdE_B6hw*jL4Vex#)XVE0`@#X2~Inmy}cM*QA%n>PNjwumwg3iWuZbFJ7 ztyG;1UF(IV=k{|Y25eEj;(3A3P zCPx&vUW6CRgqiyd0~bB1oz&Z~ex=J)(I{)|KyI-`*{DH*9&kS&*`mmq+F)YN@rJV< zgFy)B)H@Hl2Lkjxf&nABBf(L%=jyd(PhVAl4>4D%>R`FW(X|1~$gxfme82qzTcve{ z68Y%$@B>2J!hl;!OL@=I)$A6B$c7^q$5isbCc^XscVhjPH&_@Qy=oMzwTb|5JKkZ5 zu9VJO~qK1E)Y>9%VE>6C&{8e|I>kd z7XTp?RkYZ}K{yPRnw1ynM7Q=@(aXzI_QSQC*t%!6ms8R;mL#ixWN61&;r~wwI zxuLDt?LLKXZZSb1{H?zNfbVekby&kh-(zA+k}s!f!?~0RGqqr3sq@~$cNZgl1QR5h z2fjho=j@4#tSLV|Ykx~nMsCKgWHNCqvHOl~rwkR+A*#?j=IzX_7Z<+QB`e#ZSk}5> zCE`BnfpKv|zg_v@wfp{Rj#Ko{Rux`-3?`cg3atrJ9?n6m)EC{tw`8L+z5+-nw`-0n z`2~5Pjc&{EO3kyLD#+HH;ly>U@CNegC?gxM3+@Wyj$i zX_|8XFkx7bTGYqy5yt_34R1*~w0$7N$Bi)h%zqWds?CyKU2VO0C@tGo;kA?d`STa? z;xR>IeMo@5K1cEpl)6}l)ynyXmWPGXZ0&vcTdWDnRXNx$@hc1zp(dZ)_Y~@zj_Xf} zP?a5xy{M6sboUHNEK23j+|Z%sFG54(OOc4!!lfeig=*-;Z$gKir!FoO{WJgL`fFW8 zXXc?rWQB(Po^Ff?jQzdMKwYls()?vBPW~k@a|BU=#kOI0?7_+U`C6;G6F{sXm%+JW zSHw9wrDwdGdyi;My2^@N&B|b8i(A@+XL4d}OBNN_sNl$EUWH?6m_-1EPkQSHI z82S2K`9RJX1V5szAvx%RU8~I(Ig$MV5D}u`X00G}H8Lfb^h69ep)YIO z*4-X%N%M{*=JcHu=L~&#{qL=m6u)_^1L3z++Q8n7Ecowd8bl79grM_(oa& z6^^0wCZEX+i0Irp_Z;`_*Dq`RNC&1TpOCKfNzD&cZW}xHhrC-nIT5z)|g2^qX& zi(g|79BTR441c%u*&_Hz6|iFBRlENr^Sf)kLnJno9XAZLLs=^i$Y1!6Rwy&6cr8K$MCw@ zQ}O%!7WJJ1XOej6;l_qFivM>r!9dhcCb-|dC^!GK>OLAspk3dHbUR-zF-Z@bu1s%C z+!^aMT|AgAilcB>wh0S{OcdAwW9R;5+b$J|94B<5fLTZ^(BVUzWhC9?4CYaSMEY{5 zjM$51M;W0j>t7!SzwgZMMZUS{)JQFSyLJqJA`#4Dr!?rs=e>T-c5Dd1fC;3x0;Fp& zzIS8N16baGYS;`;vg$w_W1T(R9~Tv#f>Wpj<2ld#on1T*yvr3T+-t@@t4S)~3mL)> zuYLFcEmptCpxFt4%4*I2Azb7+7$V}-LJgH1oMVqljWy1Yb1r6PPia;yd-J;(gp z^nfdBji2E_l0z^>sfBcJA+%8RTla|AS4QwPxBa=q<682Jciv33{a>_i@udls9ppvD zq?xP+bdOg$0Ou>-1%tZBd{Z)>WquGfJHlQoIB?tz;x^;)cFV!YHNFRwsY*`$0b#mfs z)BYC5{0rUxliInErXNKyC7u5{a&L(cnEmZpY+Bc}fJRYI%+W|PwW1dt4A%X$JltvE zKhfFUT@a9>mKNZ1i03!~YAP zb0@pvR$wf7_<}N3N0XONp`Yom%A$V3ouun&=|&-UFYiK;e5ZW+m62bcAq1hmc%;0c zxQ@r)Wn?yv7pJe;9P9@)_t8Brv9G&V$s|`+TQM%Msd;!Vt;?&9MhsPbiJdPnKCqnM zx?`OIrqIKLMAq{vsaq5L3k8`ogv<}S&g&}$7Q6@MIH$zEW97HllD3Ij39j_ZA|EQSJPy!NA%O7t5NqJaP| zhs|6F@Xs$d8@wVKGFGgQ#pO@ZwqBQjObk-uUf;_WZ zf#3&!9cl=|#aGa#snyu1liG4vzvl|k2u55Cx4iitZ3}9`J`zl}3^(+u)>Qj4p_sol zyRzV*+579Nw<5J~`3g6|MeAP;zXJ&8#}kqZXsI(lwUSe(dUaTiOx~cyXftV5jbQ|}b zx$6r9*G5;RqEF+Dz%b4qqRDdTepBzD5E!06b#}h;FS}90FQlV%I7I)@n;?1wqL#lV z?2MA#!s-Wqq`LKTN_mSP@o{)`_0RrQPJ)K8@Rz;bq#&eSCd2krD*LU^nYwub5lD8+ zt52J@;(1Zou(QKgiQJhNm$~Ikw{`hW=2P=m=G$AUUtDttE0T()-B|qWYCajVO*-Ah zvyZ!`A24T^Wj>XpX3Yy7Ffyw_j5HOM+!!p?@TQ>iBV44q!YUMBi&p8HpK)GAD&?xhqDHM{>oJ)CE*0w?eaL*+wuT(%FhSx#i72rXAoD~dZ$-EOnCij*Da=x1Y})Y z-qUs8kuN?YAG}jYAH4d_M_1_`lH4C*i9o@wsobtKl>R-<8=~SML(T&<{ZkAs zDn~Dwt5CdD??dQBl{t@|3J&GZb<}Q zs?6X;4-)kv;H2F0yN1EeXR|?PyX=sW2qW|H@l2r4dDn>dcjgdewbnh@<1qv1yw41{ zz5=sY?rSfj#ImA}QKMp49i5>m83(nAqlebuA$^h%@t!y;c zFb3vLNYXgAKM@lWM7Gram|pfzpBWQ=dq`^*WtLIe$QdEU9r4YMe`p}7bon)@>A+H>;B z7J(*JTEk6y9uh0I6MFA{{4}C`pd4+k`@!U24#GKFQvYzg8FRz44V^?e24X&su^=j& zd$6LiJQuhh&#Y`8s9K^|9=Awp$%}f-CsSN(7yPJZl*xlcx7r@}c68?-V<4?{3D>8B z`nGCaAcOTs3_CDk<14}TxliqbM>n`$u>RSjm%~%u4JD|M)?l<@?a>!WS z^T(c1?SV?Vsxb8PL$nX2>D3;Mc)aHLs(`;XmFooKuum1ZUVBZ}91UDvo8~kk!%2#K zuO6^y*(S*pe2MPAwqlUr2S%sPZ=>LWJ9{`qhR_48a5$gd?UGRjv_U@p@ZSiFAd}Vi zdxexfXx$#uP=(&4^$`iB7jJiK+mB&fUQ18d@CPk%JWjZ7P29JyNhXLM!`~B~Uf}vq z-LIo?d-ZXwKOj>beb`Z)ZCbFdczA~={L88dsvJndK0|0$Tcd5idP2c)(@j^vyj3sLHeVMQSe2OF?hK@O^?Jb5a zaX)UlQ}U#^psm#x{F*Fb-5`(?e}>-*a>rO1zbQKsdUcO!yxS-D9p+3r-?U&;b;oIZ zOD!%sa`>iC;9qS)SHpoQR@U(Z_Ob_$NaK3S!EbGr>bkm(ot>TAbHDwP0n^bk(VU#z zA1OLn0UegrfRC4Dj<+F_oKN!)^)~R=_kB+WY0_q9*|Z26Bdttzd9JXuv~%ievJ?A_ zi-~rj0yqLvR%8x$xZ$Q{JFS0D-_=lQR>g~hA2lpCvw~rpEu$I>F zp^4g+cL)iWd;KLzcf#OLE}?O)fPbjHxIPcGE2uGg1+t(T=(SZz#wLrIRmvHnvf>p+ zV3hOsZ!V44j5EEFH*1x&)Y?uKFWr7tEk{C6%-K+~&<|&)9jfq+soe7wejp8}D6A)? zb@939nG-mBw*>0CEB{o|JEfr@$(W1oVlxr!ZxfH;+7Mfp98p)%ROjIOsCROV_m$58 z=bF#;#=&Hv%$<~?eND{q?h1Byb`+7!>n*a;8*SAQUpQpsiK>tv{b93X% zw^Kx39vbhC_OcjDT&^`4nn0FXZkMB8;hd6-^+U5d4exVParNa zr2bSr?5%+hKb3N#6C-q^!iJ*3y&Hqv)LtKF7QKNArc63l^RCmmQ|o-jeAs|%q`aUM zn~(CFomPdGgOFhj%~peH;&Os7c9*qB@1Ah~jJVnqh>Qb(I`=tp+n* zx?nUqW{G%HJU<;Nd?;2iEAvl6CB&kB+DP=aOP_a4r@||1Ok8kkjI_R?$7+3|FE7y^ zG*RQ%?Dg_PS**tLf9xQ3+c~-2c(gvUYP%W%VP^H4=hf6GA%`y)ITv1Kyyp!Q*VjE{ z5||V!w{=^r)7SUG_MrI(m~rP$QPVTn{Rm^iHR^j&k!{Xi4!^O{JTBCPp*Y{H!26=i z#5uuof{Ttv)CVm_XB&xX(XIJjX{!~BHxs?}p7z9SLg-VBC#NC3h8sBTifP>Gt0Ux| zhr>DDbJR%1rs!-e*E1{?`Sc{~MdJ9tC+xWL|EsZCX5jKb(tOHGGji^Et3jO{GhN@c)*yJ78al$$fr zO1~aU6TR1>Mj4&K9`Qy38z&Dycx8RLTTk5rg2(06jVZXAH?OhnopfPBq$eaok|cBxP|hl5FLWu$4txLsMkfKot6JrNj*{80>?D3;@=wzcx6wE|>%Cf&%TwA9 zv)HBM!?w2hnVDgpaZG(O>}yUcPhTruHX6Rnq6`dSfWHKLH4*RH7G>q->Ji*|?6$O= zg3j6(dXW`;@i3KG-EGdqIt-exCzURFb)%6(QA8axz_0J`SMyHtDjGE%BHl842#NSV zy4;+%_jb$csnIHxQb61DQJ3#PaE}XXeTQLtpKDzBN!8oO2c`Ak2P)(KdS@Z-l^tvd zIAmy^&yTQp^^76gdKY2VvDk8Yf&FJeiNIMgN?p??{dRXZj^o<{_)NeARqK2?I~IoiTNdyO2+;Iw)>@>7FeTSc2R1f;!7sCS7L__8+V;r6 z-g++5)@1R)ah}>_AJrhrWazFP=DoJH<9$A6ff4QAdgxUj>$89sD09#p2J;kcgYQ7R zuNt0vhqJ}W&7$U}?hPIkH$zlJMhDp+17*sldP)xN;?jzw?fHbagC+S&nKj%*-kf8% zPw2|!$?pcRv7279LA&@IlxRjbZ>zGKv*=xCMxT2iM&JY@_)0nksAL9OxFG2k@gq}f zshbM+2CU2>omV zlvvD5U8OJtn&`<$&UR%rB`27A_5ihhpZor;2PmwNhQ4pYo?^BziiD3_mZxw1$5s(P!!o!=ydsL?f z51_NR_QE?*$Z2_JkF=ZS3kQI*@{Wwd_taVU1!5|!j+}|V{g)_<=BENYnU4rU1ik7b zgOweW0Fe>cQ*am6G1MTuo!dl;h+=F`vu&3r*1DV5!81nP7J=);kX%IZFx?9t;~h$%;iB7GIu=)xKqYQj-3k0fV`cG2A_`-Ek}*#x14(ohE2R zJYrp|N{cyyLn$0dFC6e++9BzruIvCIcSvpEW`u@!qwO9Oa(}>GA{rw>hO3w?`VK^d z#HT>SSPa`xY4g@+y%A`;yQnHrX33j+)l)AxMB$pVx8L1K%=c|ByC&mOagyk8tp)O& zZ1mjG0BeJbssNgj$ICJ-MpN?H{UggRBQG_2iXiZC*z+2Db7fl(r;J~dHjAc4=y*m} zeddgB--kFwF8^Zs^bv}xhI|Ga#6lA#qLWc)b+Q^$qdP%jQmwGMW;BXP?Q>Ze(gWpC z1!9t9$J_BMT_bGlxlK9~ekX%2W@Ehw-puVevN15z$+0F%%6sBsIxG<*_UAHcxykS6 z?wQ<%G1|1`x~0J`fb`*#!z8{%@sr}_pKnOEz==LaJD`w#kIn_ua`V@V=Ea(MZM=k# zIKh~#X&q1*Zhn1|PN}9nUpkX)|7|2f-$Ql8`))FQ**4*yn1PLtNI*>8UAkF3#C0nA zxf>ngo2IuNm1*=@MU+??X=ocLBA(>=+~##e6A(V5YKy%L+ zv;M058?z3F==0Ue{>!u0(-0-U321XFZF?rp`hxt4wK6**iduL5)QhO*^}A<_3Y?vq zl9CC*3~XNzMAX={8rau5M)oNC`T3>&Q#tvmwJy8-lM98O5H}4g+W8A6@Oro>wfV@f zcq%Xqd)WGWL?y9|S41GLK$rP<9N$XMae}5*{cdrl9E|ud{?2sH>x%nmqFkN(Txc2R z7js6B!tQX};Jp`zOxA##n^B6x>O_X~wJPA+48%y;=T5L}bXmzx>HS;3B2cQ;`w3uVgu7kdJX{88%I+$-SuO+GzbPqyD;G1at$DUKYHQs%As zlSdu=e_Eb{+6LP+4289qx6`~^3s>tKzFs*!rzbqT-SZqlklQYM9E&~&rEN2CTq>#) z;^;nmzKvsWhwQPq{_EQzs7+Bn*Gv5#+of6j8ODIO z%sElR;xY!`-eU0o-iy#E(P;`VWi`>~GkpO*Hgdx5=Ti{vhqVl6t_HEBbG}e%3G1M6 zI=v6Co2_@_N5x7LA@KC#HvTKy;WzSJn^JsTAyg6jVP06=pU9>5EO~w z<_YzLB4Yg0kmu(1;}+p)AZ3lvJtp}l{m&;a9X*Kkn@=&(X^Nh;rLm)WS4yq$7u>RY zhnLXVpFf+*K&=qK_-%bg=e<3J`WAhhdYRSfZUuw=#hux40X?@1d){e(Bo*<%o@?Qf zqsEK?x}&4xh~U2?iE)0mIw2te3Q@q!x*e(Vs2(5g_~+vFC3TJ+0pKTz*l^O@Z88jS>THEO@3{Ixz!tNo-|Uj1 z-1@$i*F_xr$Kz}IMc`MbqEOp1Me|V;;cSLzx<1udPddL%f<^byQ3Mm^&=`e_Li8$s zdGGO&+tENIZa2cY02ZMPVkYoVN*d8qNq$Q5-TASxp7xW~G;|vI1`Wdzj*;d?7hwry z7{4h-&L<5733TQgc4rl4zd5_#KfpuGPg%x?lOQn?eJr9dwS$T9c|&WFpL4chGpt12(P(6X%07FNwC68e^>#0{&~|L&U`*a5FIf=#DTcX6 z2Bx;^($kWZLfWUYG&1equg>GKPRbEaqEKexs#xAum0BQ*W?si_&-EhU6%-c`2Jw}wuxK6+}Y<|Dexfi;}AQ zY_-Qr3N{i%Y%iaZxlVNRu->juUWpQ7wLHHV-5%Pp0=9hHRfD_pu^ZjcjypbKkLpjY z2$mD2hTR7s+0V74HfITylz}BNQiiG-@%C1F59+^tDTxZ1z32M80s$4v(nExfwF4)ciJ|)Dl;@tc)AkU z^qsIdj8Z5>s;UQf|HwxZsajiaQ1G|6C>>>IGEO-cO?PDi{&ui7z5!zLfp5J>j z&fQ&LCVZek3@)npUC0Py~rVmK{mkeJf*v7J@>23<3e zZGGR4hH<_z#b1y>8!3d-4FTMBybJJ|z z`ps)d^c;KG&%u<;>VEvqR7>`sV?lWhi%}J3lAWswYT2`yte&eNDdEwa!fRUX^*ag2 zO)FE1y)4Qw;fgk zJq#jSO)=W@KhEie*PSNrENAoF3xO{J$&z@zS+ZrKOq>g#i#Y}#w!AnkuO(5W@6&6& zrxFF@=<{l)X*|n(lKBDJ67tHF7F%2D@!K(RYr{!W5@%C{l_1rhmz>N$+j_P)?ZXG< z3t8B+s2PGJkPRfGNaaFXzjZdvxN*=$7=)q9_7D8}P)^aZ^@7T;HtI2eNwE>og&mP8 zy5Tl$L6zmRKwq0{Rcy=}!ly=ts_8H93dX{`#hrn?@o&b^9-KZeZxiX=u4cJvvanq^ z7fef*hy%nVfycZA-{qw&jka~<<;lzQfd{5}9LN+tGWO+65_bIoKb_v}()$iWZa-8c z%?E2L{&dtOWhyKxa#n7QOySRH1yfp)$L~f_zV3}Q{_F?5_wtN^xqoHx#i;6~PxHl_ z7~w(y4)2`6)!~~G`(EnSz1cD6uA)!$QS_VYA(f&(K+i2HF}cy4%p(^(FUuN@A-^;B zaU*nicJY76%@IA`Q$5ph^2WXM@MC6D_&A`HT{#g|F#9?{B;C#d@CO~@6)+k%&d8!V zsDZEMT!5ix%<^O^?gC=-)W=g>akQ=CJB6cCeR;V~j%gr*aX?Tu{lvPb7uif8qQcfe_fM-ELFzTdrtvw}HC?{oxvi87Ur1#XMk+4` zWaru={%Gx~&S*1E$+ustO;1Os=v;wsE(Gh-r56f{9^+h7SQJ^EOFLn72v;pTkh{Jm;yot2VyZCMT3bz?Y4~mbPy=<^% z2}Un09ogp>R^lMSs-wU}?}v#ib9}-=KMi>oLzED=qB9DS3~Q<#SJt@_zaznAqq?Ay zR|zW`t>tA!nHmP@_gFvZ^AKT2A)-CK_(x4Qyf9%tGm5(JgA6?g+aw|?DkDVqm@4Zt za+Vs{5A|LBTLF64Yw)K}ou7}}Kmat=_S=X1)eR!q6FY(vGOy|W99vP(nv zHU0J2E#G>d;ebJ{lC>JhbA&KMgG&yiqbwYs&p}`6Cm6r(X!>2>@;3BOVBwo+O2q{ei*a{pKi)D*O>B_7dSN8gk#&t3CptE ze3n`Pgg0Sp zXCg$r_jGEsNF&FldHk#Udl7Z1XC=0c%A=C1M)Vf_5*r|T55X#+WCC;aGKuu zbVW8-QmXnqE5r_S(8xa(2=GFFlE5tbb*#TDz^D86`uBMY=p%YtfNyzQ`1j9F1ms2K z>g}y9k1q=842QtGf`$+`Ugl-L#I~nPPXd87?_c0%PbLNIiEaKLRFB?*POW$EfqM9o z4rjtSl!Dm83bS=CybD#Aimh96@P~OsU-8yhAOr#^%hfs5u1SAe4D3u49f;Fiz8&n8 z47#mcbxD9gHxr36b~1w`RP>6kwqm{Es1XfYKg}jijPyT&t1j%6{*Y77fOm#(?k*%0 z!aPR+$q6I1ECUDY^~VhC=S4zBV3*F1A_~{B8e_pzE{d18QX`wHy|rz_8-v?0PyckK zTyo_>YQKTb$D=J3ik(F}$TRw&bUkcRRZ-1`EqTgOu?-3D}(cnHdo6(!L3A|;>h+UnnSLPJ`}z9JRv>3onWt0Xuevxa{kE7L{+fj zf7TD<)++WVL~H^%gqFt7N{6+ZeEzf2fL_~riWIueZ{u%nx_uhaZBcXcayNyBG}SX| zF_Y3WUrjKsMOzuul}{9`&8c7J+a>#C%<3NW3CAl>{PJG(>g0`tqV+7O9pIZ$$2m2| zYWIFgpZvM?`3p&V^PrPyPiQN`En;nNAv&y1WMrz{f#+}}XIs`8M<_06q8E>Hz3{p} z_@Vlt!Bw5Q^^>jDVXfgONeqSZhP2y1Vv$0$t?gCXA`pykt?gcgLFCT~xxX8_f|!q6 z6W9EGY?bx>AGll}KcHyW%y;Rk6MM%OuecvSp9Lz0V|FmtQy~R+P2^WWr++GIL{6Ky zUv*7P;DPvwFnmPW9OtcS*rEMLCAP(Eq1Wz3Tn@isb7udyuGH}{}tubB^gXntSMo4P6t z$R+u*Y7LVs{f6;pEWRsn?Uimk_NpU8@o8&wx zD^Pt88`n^BQGQ>Bc9A6LNDLm?w^)H+B#FL{-EPKUs>ZA5gmp=D*DE#z>RCq9$qG}> z*WQO@DQh60jl_>=INhM1ErsDiAg8Q+qs}L6z#pXiB-n4JE*RwI4aC=5P%pNs z&>ldzm{$5b)L1;=NhK9bsD{3+%uXXNes)|VC)DySCdtGrX^6*`ca~^~xb+5x=tsLg zd-?F-B-p!bi0M_2X<^)U5qBmUu#qfuLu%USc`;x_wG|C{BBHXNQ*n_(T4JD#KD8F_ z6c-%7zx`lvr0&TRSAB;JzWbXXGrFSZ)E3MD9QdVYz&~Fd{3`v3C$;en8rq+!E%H=L zbVObK?!OY3s!Onmq)+`j9KK+0h4QtOVwDVK66!|pcbkq~vx|zoVRR&mQ8E0LEu0vSVj>L0jm&uAa_qam9a-FRr$gT}+?ZQDl7wQ8Wu zo;dYyh00EO#S1y(bAqGo(86qr)OO4|H4Fxm<0qbfP}HZ*g5uj{b~wTH>ZUZtqkPf%I~k8RXXCBWo5`{CGY=VA`Km6?JhO$GeBwjFp@q z6y>6rd2M-3&zA}LcM})g-Ak!|#GLlgv0{_eeC)r1+=M-X=tgb=^-s@lI%mGfYD&{5 zuoiLTA7z)u?Msje#w;iq>%U^~l=TACBM0HxUowF2DMT*gfM*9Qk5Mb|>%L1fLX}Y9 z{KVeeU$Uj&HFc_nhRP3G6bI`fTweFMn^cl+%0fB~-PIm9n{S(H((?wmQlQQF`;)4b zaRztoEcJ(%q9PeT%4ojCGXD-9-d={mgI3_%?2nH!(Jn`aF5lBX7cYECk(TpkD0?5+ za5(Vbz5AoL-ctWfP{=rAvC~mPG(ih`y9=I<>#%sU-F1cM5&c^-ALKA5Vm@B{A4a)X z%EB>W5yz?r56E>xhcZVa>EX=3+bP|gq=j`phM!fQkxh8@+F%~)`^yL>ayll(~2D^Taq(RAXHn~?}@P)F;o-|pKW&K zwTS{q-eCTjHIzEfNGEsXdPlxFTG%rRH$uELijA1XVe`Y$2fFgFDFddi*ttJ`G=}&K zlZLh06T^v}JtihJ(}!AfFqn#%8T&`6x&5h{_)6A(gYhF04MwP8Y~d4ljK^4Jx2Nr| zlPYx@7?XdW&2aL*EmEgW)7=;-sKDd+dGfwuAh2Qs;f*rY(S9?dO28l3u+d?|+P7+K zLgbR&`;LkvRKepN%u!U#K!PMlFxlKPFXl%kJ%PH{{nh(FYId>HV)p~1{g|mkv4v0R z5&_yaEP%fDYU!*Vl@EZ$IlK~Oe=|pV$PH0W;>;H6iROoAJ@~l6k?=z|cTur4F(f>lOmqu#YyC-9^KlPULJ{H*v@maAA;ZkW$wo_>oT$ zUG1NftGUK){vlK5m5UxXiQNj_m<7trC`EYm8ANKpXgs2@R4TVulWU=*KB=g0Sdo6~ zkLUHFN>%}Lj7fGcw^%Oh8l5f`-WPt<9ZyI}Bg`CBa;SKIe!=05ZM;ZaZ=67*Xg}$8k@I?0@VfH?oSW?HQ+K%xgubjMp>-KTFm&@r| z^1dE+=L@bK@o}91eJP4CxeQf(P0@fnMYZ|FI@hJr`qM@Am??Rw0#Q9w4Z%jGi&oa86gk0w%3>ZDjll^cINN7J{GCYq}7s!yG|5>qG|a) zKbVoR5|G&6xg+~x6U4&e%0}vVT;IAf_Bqh|UDqf^Xx`mbBW)FncwXv5+ox8;n@YnD zyF_y~2|ug;?9F63(pTF9354ht164CyiS_k=(I-Bk#v(+Oc`U&6E>Tz&Zwp@ZFUQAw zdG`NF7!4JJ{_bLakJjxl;Af#J5)D#GZ0m!-FGR|ltAe|@kj#QZgbAxWd0nh`m;ehg zlHPVIO6f9_=8la!fIMHK-}j|NUe^sfI%T|5+&vuN!_VsaUWziDsVk5O6%gUyvaG+* zl+MHX`X86$mZeAoZf2)6wzv9aEskhsj=YD4H*6qpK+=N{IU)P=mDFBz5JRHjZ^Z!+BGt0Mw} zm3IQHB%%>5!1CA)#JI^TlFRS)$cmNiBLa)DqzhAxm$ilmKI8e>$HSQc> z(6&xD%bHTCkjOPx7av7cVD@m9PtH<@3vm9(>7O=GOT2%R|xqtu)ZIhh=?0=S-c>zw4YA)%vfkjK{wAC5bFg(Ba*>D8TDP2>|!w z?(V_W_wRgn?`!nyW^C~l36BNZ3>$e=g&#kxRNZ@ZBU;uDYP_t3?c5zNAmV!xY6aZZ zZ;7}0d9e6~L?mvoJV~m)=BtCgxbHcQD_gG0xmKfLn(Ru3N zw~kODE9sH@s=fVI}bFegsY?yAN`hBXi;x+c=sqW^i+Eyslc%AY#Qey zM{53JoH!>S%JoH->!?g~OJ-!n%t~ikdp_mzsv_z@UGjWEd2vo{W{{)9Ld&a3zDv5U zrkRK!K5mNP8g-4Czw^1_9@6Zu#IwWRT<`70^h`^cSujRvQgw7loK>sG{mjN>1H^*i ze|5DKy;Fbm6}0ZAMtpSOd`CbLR%b_K!5CtV8E$4=&7OBJKR`P4T1pysbME5dXRYl( zk*&4Okbn=&;1*_t>1avW^rg+~4fYxy#Abhe2pVRr36R z>%N}wZ-IF!6dYjzl;^6#Pt~3i>IpKcQB@%sc*GsS95j!Ic0~?LM?3;h89aI!!?!sq zlKAgi9Y-7va*Pp1jIi}i2hd{IDaQ%-?6&8?7wj=YK+-3FWz}LEo9w*iq@rM~LlmuM zBylwLxxCz5g6OZ-R}06YZ6-&*GKJ=x^5oD%Lg_XL zr)19IIlt2ZGWF}G;03}chCfe`kPvY{J%q0p;_29|Vv6$e;`tNlQ%LIXyKr-xw3D@i z8$dHqPrNOXrnzR})ZNU^P|Q8=n__-DJ#@NKzRM?6++*ha6%h19>?h#Tmr|dL5Q2vF zpC}GDmQ>QEzrMg0Ct~KTWu--2PK(9O>ZW(XF|(8jHW?UVvP&T1b;7E+zvDZiVho+4 zwjCy?LsVP%JCCj#joP03A*Oo+Yr(*B48=1T9bjDsZSA+3}R4zaR^@!eJ-{z z5Y8xG>aenv710v(46`PaZBqw|AiTv7PV>l!h=emTGKeu;{qYbiz3vIABx0rMHk$CM zZL6s(nifi~=StqH^Y5rsTimC|$N%X5e-ks(Kv;Fi z$;m-qs3I)C|C_7$oBt=1kN>mr{~!5>{J%f?Z>d4kblGp?_E#)~=%uBlUf$k<|JGw{ zdOCQ@wtIARRB)%bO4}Y`!i^{Re6%--(c%kv6CH<4`> z{681jNoNxf5mo)W=n4yGi{hUFMoo%_^X~EEhyPiAL@B3Vh|LN4z7L%7e}36T!>Rd) z(<9dX-_A%y7$yGO95X}HIx^sSPtRP+yb87X0|cmm5LiTnWXF+~Mmz_h6Uj61u4j3+ z3K!ZqI<`;ML|;sJPiuD7iiXu=Ck@sULoj6YD(9^S7KRqe0fWmwft-KLa2 zmHY3TUv@BF$tHdX!n+#2& zUEbBUbSy0?e!2!aGDyE@GaI_v{BX=rT%VGmj*^(E_1oU-_r-+ZE|cX<%29lZug{kI4Z2z1?f=Eq zS%$UMtl|2r;jYDtyE{QjaW7DycqtOxJ;+zwDXxLy?oN>6#f!T;0YZ>K(8J#QT<6F6 zo6M|{wPt3mndiM9Q7kM;8i|}N8x|2o<)*lophCPeP#G4sS+NihH!|a$K$h?Rdt-SX zuch}7O@S)Rf@$JaNtylqvRA&HFF2KH7o~R*DTc@$ZEn2UTP5mj{OHlC-q6_8-qViz zObk3g$;EG(7Je=vyx_}~f_9xAP2w-*9=up8ikqu28WIobjo~%6GKwYRv%y(1%t%j8^Nj=3p9Y#Gj>P0t z^1062gz`Lohj^blL80wbqLm;!L8Mi*+aUfctW3VNNcy|2wW3u0y3EAGcdH%WSk@J$ zhu5Wjrcs)UT6nCVbYh~;PnUA|Evp$V$46f_+XPl!LmEx3L9V^N2mPg9uvX~R&^dgA!?Zt-mX9vN86TB&xaI^ z8Q(4`^#}VWDG>0L>5$9W=|MzB2BS(n!)QGxKY#zv{zxjqDo1oi22QRMBAecDxBvanu=u0eP6J?hEyD+hc!d3}nvvh$`Ci7H znMxqk?Mdo%Cj3m)U%Ly`aK7C2HbND^IFRqFYw@{0Z4uS7mH3VQ;5KgFuODcPC2x!g z+PKH2a9_B1J~R2Zdx^tP1ioj0ld1>yoB*B2D%UkqoaKwMtPKDGanroJDAbwcHj&?s zi2=%`?QzwWOq%<>u2S8}1uh&*Xl;Pemj{@S09j z!WWxLVj{>?l+d3t2OAr*t8yiVFmtKus9SG63)pY8pAZ)yi!^;ANbse5z}KF0j z=>9?*Cc9BXKbPKUD6BhpOA>Jao?O1;K%7Z^l$K*>0@BbW4)QyCzwW9gp*Wqm4-#(4 zsa{(YY26}C?LSYTk3_!`d!&`w@Jp_dRO$2Fjy1~KwG*|LZ*;4W+WWTXM=c~3--JUw z_S@#resBmiXYWl}*mAba$=Zwb9-2UHe?pnz+^6w=&q?CLx}cqDKu-LP#k7^gZv6wJ z?pmt#qsObpll>!_=g`MBgG-J0hy;$n!x|3tj<-)PFU(a*kf9MEVNaNgX|N$Fn|s4b z!|gSu6XA7HZsc(}4*V!JxV7*p!Y)Z-4AB9P?#$nVX^6}?8V)+c*6HRyn*Z2-LzzEq zMHHQ?$~aw6BJt%tLoQV(TBM@c!z_BpmHuvL)@sx9{$6~GmeshmLK@)qz8n-u@SOS@ zeq7S>v9a?JvGQCPBm6>&5_BS|p0f>|d3f`P!H85ZSS&^y7?)^~$=Cr8#kNcWtVjbo>J=rt+%68jmw6*n9Q$4C*m>WF`)$poM z37TEKbsR9ewJ zWT+vb+7EL%xpJi)pv$45`oCXsmQW9NBr@2{r{mOKBN?xM+SWDli_ zaL-;}d*f08&!jte2(^9j8bTX3`x*^th}4m@6U?xH8Gu^6G=Pdm27>psk^ zy+|Ev_VtOoCYlD}0xyG05f8R_@+N?$OmAqbEu+^Xuu>w=tp9fF7GmI_B~tRTfogy6 z&Kc{dgr$NrFubUKHhAFkxZ^=NBBE~6!y1J#a2-|7+y0Ia|2R7McIT{v+b7`K7b7bA zoU-nxtZB4iMTG>{@q~$3aH3*8;vvQUk<-cXD1Eq{gSzlE!Yyt#UVfLbFSm zC2Ew<&WxrQ2`=@fz5si1&eJe!D~h=8fsrP_pW(|F@esaugp`oSf}8zVc~0MB(lhk`S|CF1-GH{j`t_8oPA&F9Z<~`%31tO zlg(A@H~C>Xc>WW@5#LAn#9$u>chE$98@bz%_nn?w;$F-Umxk%yf-6+6gheDpCUz>R z^qgmv%Hc??F7p`_Xjk(fA!jCy(K^gG#6t=6ZgZ{Ra1AaNc(+RCfVxoA4l1PmsuTe5$$X~VnM*892X5No>= z<7G|Bx&!3#@Z}o}Rw$$P#TLeaY5pYrw>|k0>PdKA(CxO6=%bn;k`WT|Q3Vp9nI7_6 z1$dAk{*VadH9)gKO$ZcH3)gS+rFY09R3he%n(@+e_H8n&YK~aE$P6`KMHu)@y0MNIJ$J-9lC6zR^I^NZoNbGF*nx{7(TR#e z0XL{1Nht;cpF69;o$&p&yO-Bg6@U7IL8mh%8U+Yb%ICr%2XrQP2Br-0pFVwnxxL_D zbGGW_`i?kTlEN83Hwc5ZkDodN9@Ee9o*%kf`UN-kO}n23qr=)XyI`2}PAh6QpbgUg zKY$$mApqf1&uK#vTx;D7u^!U_57=MauR9IqX4Pu{(CA@twlSDc{<(M}Te{E*Rs%i= zuW(|451W$-+H$x^Zx?~`NRQR@gt8V=e~JX6<3D!k^bZXDO-Pw6+xOf;@s|)}_WVgB z8fjPqj#F5}QP;hmaC_74NKdad_}6t)BxPhk)gTjEZsSCh&&cyF=%$_!h^Mjbc#v*a8 zu))n!gy8m`pEH8d_7F{;WsjHbH7Rr}y6EJbT-o@5mv+kT*X7>|wL^3bac^Ao`MN3; z2h!r?sThYPwN#(CC6U$hY?)$Ev`9P~;UTf$ywms0Zr}`FU?iUJ98ubr8))9uw`KYf z|MlI;c&V}5LT@YdtlJh>nCYr=WjqwwLeZ>#8-~@i2tR-OdM%qfA!%35Vp~x@3L2*v z+0^Jy8a?&Va0*{t2+8Z&|JkS#*LMP0`64m_Zft%m;-7)t1D*r+IdcLoS~w!S_I6+1 z4Cxz^x$KfG4mQWGyBm{__@8g%t@W5T|0efjrsO6VFCbza*5qj49#l!e?s1Tl-6mF^ z>DL`WRhUnjkyyej_dKt;$Hias|A437iHg%oFK)f_gx(DPRrWC<84ttT4wu!JXDOwG zQ+Y9~Xj6zH_Lz6Gsi|=skf25H%BZ}B)jzGj_yw0ZMSf5O-f89f`JAFALs_-Us0bd0|a^qt?FK>umOr5R_Kah#_Skx+7QHhM(EjwV`&q4Qm2 zNL@upaeztWb@w%0M~_20M1!N9T1D40@S@@&mq#W#fcP(t?SbgU`AznVX&P!zw1`uc z7fcq%AU5_8Jh8Mr;Jp~j`VE`L^PY{Tl~se?b?)ub<3io`4+S58J6cob_^dc5i!@)M z=;Axv+ly0j;TT@^B}zqh1>r@NR#bDrB@iY$xoA*C>z8dRs7RvWJo5&T_~67h&l#&Y zT{QL?cdePvGSI&+{iut-c;DYI=EW*}?)Hl#*n@_x5j*S&egOtdY~*@JY0T7%Hb3bH zT%O0S2HaFVJnr;0UTZizk>k`m0+|~~#(F^inp(wYIn~xmtB9E^Ozz)NkmAo9Y53>| z(!vEJTt(X9csgNA;#WH>A)S#>IV@VU)z{Uge%LZ>8i~24azjUco>q&6ORZJ`N(KW9 z`jHp_08P+cib8A65Mx%Bk7jy%neuZCFaQz+fPMYrFBKRSk3&53=#kSU84Wf~#ghP% zXvPH>=ILeqB@BA-PIN_gG2Yitls`r{mLzKOH*G)zH8&x>xSE-eeH!9hM~D4kWBN$e%rTy9swb zsToQ9B05zQe>kzqoU?q1@H3-+SmH(sbozdNWhLOA8J-3GZuOILxhC+I@}lkWmT5lO zg9rXY$_<*FAS)+Nm?V->G@8aQZZO`Ht=(8r)%Q+^P5cd~B{{Ffd%_z3i2F2+{%$+^ z75)i25ia65$J@6E|L~AdIivp4Ocj~auIC*f?nWQ8kADn7`{*Kaf(E(wT(xWAkaoRE z*2pQC%~m?V`kiQsR-*I#HORDh?dn4S_C3;84`=^J)g2q37ggbi2SGG*|K_w^dP8g{ zp~)+J{|iQOaWvr~3ZwuExm^^C-Vs^^%}{y*S27hqzRK)pSc{kBQ0&37VH&>eAze4( zK^$lJ29*_$F|py>bn4~Y25d8ooOAD;vc}sKk13BBI!0 zl1n`j3dYt}BLP*cz8B^o2i$uT5MT+ESVoez2!7JTycWY2yU$b2SQweV(k_LN+f+{g zZzD8sTbKSWt;xZTz)YR(PLf__13o)8fKILV*uDbS`u6?@G#yv#D9Q$qakr9bsar;k zfMf@k5R`9)SAX@guR0@r`aq(Zz@BXRBCe$+Gw7kad@F^A_3WB^?nDxoCQJYr;$e=y zq&6NhnJJ&2HFHF5l~P4PJH;xCeUx8bog8NpkRx+NIoO|C>$bt$KAG9p+ohTxcf%U5 z-gp;Hh3|~cN`b0uT{gz- ze_#@YdW_Y04G>K~vo_)Q19ktAZ71pV*_{p>J31XOd^2{gKa~my!DbZXz*5r`#a_#l zesQ6Xts-<`ory$XGj!Iz?u7FhG-<}`&Tg$=mqHAMORb-T&||1VbJh3_arUl#QmgOy zFh(fQW1|K(Doi&z@u0E9qR9fw_y9WmjR2aiY?+#^Fdxa}GoNsOMq6@M+}e^~DZKo} z_**;kCF>b6^6r@dFx@TfD^_%W_9jNg#iO8zb4>ad*t+^$8)ePoej0=itWdNV%-3ad z5iE-#8)@+wYu4eOn>|`a|1MhC`?2%7()WNq=V?GfwuRC>P#yhLtcX=;+Iy2&H`m!> z1RS_CAl&_ZuDq$^MXddkat`#0l0v-C>O4tjTdYDC-j98W){-MCQzOFt6i!jh%=fUI zdtS4U++7zU93YmpKC{S$nrEKMqjmX?V#aXdk+IVC_tFfNFibZS060RPS2`aK5LbS! zJ5;?5)TozisMp{ISAi+aN!ApStN-m#1`NjJj@P2qI1!b({6Ra80=m&^@T(7+L zc_W;Vr!%X{5Y~|4o5xWt1rwiC!!VFGd=AC+&i`LM9uLa~H$w>}6)Qa6UpJqnRY2y% z#Cwd%(Vv|yFlj1%bBljFYi-j_jJ2@eWlKqUYS)PC_ZDuOh2JqIn}U&w@1Q#=1J=Xy|D?tBj@t1jMti^K!;JA{izfJ_Ebf{LxGm zm5`ui&G}cdqLj6?*5iCo!P*uT_k}O8c68&|DejGBb`g}7F3f~sX{J;{+o#w}Z25KJ zgHdU~VW=9Vct~u$f#u%?Rk{mRtNr8;)6GtKzC66Ysy6$ll(Pv5&>9GD>g)RWecw*C zGr3-j`l7vW^v+2jR*VNa1S$AhHt z5}w?FesE6ZlOaBb9*3Bw7a!|E#-FWbW&3TWsp4dPwRtkg4Cg>$v5^MR0M$l^ z5?f~+ilD6Kh@cT&yH)CtQt`IXDi1hEmiW~PVwX^6Bx3!DN?J7}-UCigE0FAHDCe*^ zz-#48ii&V7C=6hL)26<+rJcRrkEcT+pKeY#63QrKDf&fujvmF(-;}kzjbSjmAr*Q^ zDH^bq|YJ&t2=&7y-XU~rx)mSH0IlXdQE(FMP=!Y1AR$M#Bly&H<7 zDO`|(k%N7xgppOS=QT537Ytz0fBt#&xKEErBWyBT>EnS_vz6gGN!SFFaumA@mMR_B zY>lZg@AT9cMO`y&%`$T|D);ZT*k=K(W7%NYwLILVOyFch-3~gOEZqRW?A5!ib-z1W z+WMDYn@`o(fFi2Q+L4(>jOemmFsCj?>FUGtW`ONo;0oLN_;H{V)A9`DHZbs(0(A~P z)(tHgL%YxP0`G!ii6RJwe>F~jwfF?`V+;&DcF8$LfA$XJWR5C3J^tk6NuFh0u4P6_ z@b7_FFJU*4NTSFkN!S;A3q7;vPTq+iB^g5%%<(GqRuR!Fm!PE7ryo)eTSxp`Q;>9? zLfC^uL3K{$X>P*Od--1u%tM~13?0NYOnuBQXH34^4VoM+e-{goKh^dd%U@iOZ{7Bn@=khFJ?&umRC#a zc?VE%p@CRym6VG56=s@6PR+0L(td*&-ed84WZy~oUm|hic|c!ebLAqc->XlwwnDD- z+otA*OmFMNXuB#=eGjX5Uqaw+W3u{d*DK)HJ>ZC4*0J=?2vN7{o%X#O_-3Ef!G2j? z>($c*9$zdV@WP@-`~{r=34BLi3BJeSqFzK-Xfdp+{An*bA8dlA&^f`9?I}!2`RB4);d>s{EHS1oMpw;`XFRCaK9&M1aSsZis@3;ER2)wH3V2Z6irX=$HI4AqpeT2Ol z+#hEt(*C6#>%O1#zu3d|8t)le|1QVmPkLRnM5ODfrI$X)r5WGsxTcUW7*S@;t-yBA zDqG{6I5=)L5tD(1d&$HTK%SKNdh$tH@uKs9a+NM}H#|b3dVTvje8L<#?&adv?YwsT z_L5*zS-j|-pl2!QnjwNzPKD55YuA)RtcrSP!GEArbumnRFRX5RpoKm-^_96M%J)OZ z{El0qrir|_sP8uYa-34`PBd<91JQXKV7txG;_biAKaIoVr)E8Hgr9|Ynza2mf|+s? zVqy@;LA3^l;K4e-dcyk!nqPGq1np%aK0(XH@)w>ReeB#4j)sEbvXh#cK=lFJ>??h4iww}p`$D^{#e$I7b)g&>EDU@^t z!{Nj9VSeME=$~TJ@9ED#w=UE^yS$Dj9sl-!=Dy^6J_wG5kV@mkCGQbUm&1%di)Gr4 zmR2F z_WM+t!pV2=UJ6+4jVzf?iMpo2Mu?C5Gj2-tr)I}tB8R>2-%*MFwCy(l)_cxM%W+)t zi=8O!tl3LyD{(-%A37+B@*^zgEL#hZ zC;t%Kkg^XZ6ZRrP3@s$+uPABz@Ny0+5)gbkl9F5dRkeGYC%&pMMmK*C6cd&qo3*lyygyK=ck{m#y_!Epjwg;(+~{@n)daWR9U@LyYFMhLX{hudeD zjq#+T^=mGe<1n=8W7=+b*nj8JTSER`%#`_rKeM4mkP|M)wmsEWN2Bnj32VPbOW9wXsom(O(}&=U?don8`P|%GU1p-=M8?h-xHy!JATL~tK&BZJWfvn^068H$+BL`H}(vjr6i{< zHSwt5tjCxoN@6z)8G=x;;;FDmzaMZhaoq6ZWFOCAuIMN^2E6m+ec7DqGDUN_RI$4i z_2SA3HdS~hH;^(f7ZBpF@3i~E41toU_je4n#B!<&d5W+gU7I>OLiNfkkIOkCf|Md^ zdL{hY&qRcNXuqEZX*l@5X*(L?4T<@{+uyM8l$VCy!lD)KnRk08T4rM;AErxahcR&M{A(T?YaEN8l1d_ZZZ52E?F@<6Xpk)s^FBNajBA7!< zeQqsr{MsAuWGbI;$k{d^=#JZ!IDs3qpB;PRMBUdrEKz`taxspy*YF;B8>H$}X?p!a z2!O~D3+A1cZZDp3QnG{*qG-uQZ877Yo*+q{Q#mKb^c)A4eJ*zAqy(cx#m zSfT%j>ZGQ0#V(VmpRUQj@aNIZNb8ulyhtb>6u8YRfn0`OK<9coT%8k<@00eF-kH_f zh9X8(6Y1!W@}fp0G48^o&RWUl7eT0Zv-Eq$Zl{Wb3}0n2y)ZslS!3Ctj{m5qEFAdzY;1>8q9dtud!WrOji6rh zUKVd3_5(bEqgUb?XTLsDN0>n=(Fk4x%~&^j^i)+)Y$U&n(GnUVRR{XdGe6v?v<$rL zoG2ocY>$;$MKcC_{0&*Xlo*R{3f~$Mg7?}isFpNzCp4#VBA{&CXJV#W;i1{#|IBED zn|^5Mbq}UxwYXhbu#R67?*dPOHO>#p?$QkM_ht(^0|{3G?mx`Qs3@Z9<6EktX)=T2 zm)tu@NV{3&<8oAg`g7`oaGlwtvQ~HQ$0i#=H@Y~5xgU1`sf-JlKnB%eQWra@e4i*C zRYrJ={-ruPS>qxq9>EFw>YOg06w*{uwZRf0AqAAL1mMJ--L|E(;KdE*`3lQ3$>pwp zeaNnJOg3HKSGONg^t;cBsW174bivtcCKPggJv^emZk74x&Rzm3O{mW&IxjY+A~RR# zV9(uPc`{qpf7gbys-d~|(R1I79K5Zl)@c99VTWm??BR{1lu>MF77abqL|+Xj*a38T zo>7|(Jy56R<;qD<7s1~~zw{^+@**WJ{+urk5zRDF{#}aBfO54y`}Nz&FSeWa#K#}Q z7zcLtR=)@ApDg>SQ?D(t=eB&VzM&Ifm=*7?m&z>mKH}DOH~&vEAkgTauP#3zUyw&KZHc5Ldaw{?o!1o>_T!xZRZbI(Pew&1 zB4Z@-bDS&}&ZsD>1PG-3S>0Yj^BkRmo3}sM;d=7W-?J?*Hgs*nuOc zgyC10vsN7g`zPcWZaB3ydOj!RZcMDM=Z_lK<8pACn3!UhVUEv1LwO}I1vbivLT44!;ZBs;AuGW_AAAE^FCflcz{@6FuET zF&x$Y5?m~qn5j>J0+>tykwH}=p!S!#{X&fm%BB;EtHt75p22_=5Mv~qv^Yp~pIHASM@br^eL zNXBQwfS>cIyDQkJnVBMACKR#NM+l$ay;y24cpGaxvCC7+D&7wlLseO+5YP-`Lv*!7 zB^Cm{^76WWi*LK5ycA^(Ek&DBZ=$lgJd?>5&zRVHTnVAFH#hZtHGz)#l@Iv3=M2YM z#j9SPWw1Tbe)=X_obcKlCYg|?CaK!?k(OKJFud3qPWUc=6*t=_{A8^g z6|$%wg1cPg;Lx{2YLpmzu?Ad~j>^4W{3hbNv+nw@Msx90wJU=MLX825pvhbr%S(A? z{FgB4a*wO8_XY+rMp23#wftv#nh}Y zav3hW0nnn92YzIiyow}gMI@PE=6lnr)}?lQB1e^}Wslt>b0sxmOYsP#uw~VEg@D9W zmS>Rcq&yOX^cEvgvFlkRd}6z6C~zVfk63W~T}pyWKY4wb{h4^@moDIg>lwtHni|YJ z%vIS>8$dGZ^z~B^-cKM~I=+W?!ZnParLwF9QkB`eTCi^(iv1W?uvYb^nr-WoWgY?ydN1vhBvUY*ndk-{AE! zsQC*lznLM|Hx_ql>*-U-P1jEhQe4{1KEJY3uKfD0xsDj*uf;{Qp-Gg2^>0td8^L)@ zC8m;?kn(Z`{{R#>pT8b|Kj+A#)_)ioCTL$(a62Fj+zd;20!n(Oi?K*0$OWs2^nDL< zLF$tDXl+r7$F2k-C>&Ki^SVASx;J~HtSIiUU9q%`Q^&%V231x>@cAs>*J;w0Ha>RO zXZ>7V-si9HMb4?Cl-uc#r?4g1_nclNJo&(EJ_EcSUDn zTE<-oN+N3Uh)z{g@c*&brm;&rJv*;%e1smyelx*dBD3NZmtwM}F4tAmDM6^NRnz55 zX`nV0(46{~*W9Z27ta05n`ixD;&4xzOUpy(#yUTCi4{Cj%(_RW!f)AUUFS z2ex}4)uj?q9FY5~v2&zCkHzMU|6H?!;g}ULcSGfR;w?6!_y9wRlU2=;bGIY(9b(18 zrLhQ68Zeo+6yq~r{wh8(ot@2X3Y?Ue5f05j4V_T2RJ49xs$|m)AdKJ_aQ;woTL}w1 z_=#L~cc3I5(rf5GkK*d&X!}$;Ut{W|vBZ~y*M1&FIXsV za&m%ePCUCBo13>b{{|)oN~y|UiCGRPj%IUXj)+q$oFw~@&eMQzWK-yqI6CeagSe)_n+!)`>LBZIRF0k9^1g( zz;aR!`h)t*h%-GZ<%xr42G%~cfu(gtC-~MO_B$VpzJ!w0#?|?^Zil)%T}~p+{%D!3 zZ%WFEY$oU+oNO<1BqzM&vI>>fxxXp-{zHx$C#9%cdu0+7#KSfbr=H#5Mb6;V^~zXc zXufmeEb1G{Y5*yGbvZ>D*aN-)N?%=@!^ed>-^LSE#WULoM)7`Dr(-Vwh_YSnzzwYRJnD- z<4h$=Oe6jI;%?u9iysOzDUEKv zn5Hmqgoj%=UIc~e~ zqw?{4I#wZ4c(H5GYZkNqR5SI9(Bbmm%=MZzo@J5E#hM)U^c5CH+<{n+d@TDD zupC5`Cn?4^mIag$yG@qDBwcf)h480|h<&jE9_cKhqF{OF;NtAcXKMEkRYu42&2xcu z|D?B{O_X&o3Tva=N3yPmmNb=&`)Ek|3&O>~UH?!oO--ylbc+S{rYK2Y-%JnqS^whm z+~5oN`w#nR!|i=ACY-vE)WF7Vk~LQ@3uq_U%Mas%%gm|)+zh#nLj~KI;Ooa{K2DLr zBkSJH&G`Wl2#8l_{om2*WLzV*QAp2&`VsM*7U}@R49~&w;P5*q$c0mrc^t+yS~gSK zKX4+~(PN7FuF?R`0wsM6*J)uih&TR+6XJ6>6iB-ppQX<`>wCgs{o<1xABYTEM9tk= zhd(_oGf*+>tqp3owZO-;RnSEY1&?FfjPZ|1kO$wS&i$Xq5gf;b&4!C9_4TdBQdxxQ z$v24uQZDs+l0s2_BpLQA-QzPAn$cc`;DQEkTzy;w-ScDUL%>?>ga2HoY~+TgCyLon zu%KUJMQC%g(Dd~5n8%5cstz4;E5Cz>D%;uBvu9vnj$GD!X_8k5UE$Bv@H-%o_DVLm zI)Vu_Rf>p^c}HP5WU_EbfkOI`t>NDWqXmLVr1(HyP^@zZRaM{yb9(OF@dtKpx;-CI zq|CdNZR^NZbqV!?h?2rlh&r7kjgdj6! z<)s^VMo8Z&%XB4Hv~Jh|tBvcIw}am>r0WD}!@$G`dLlZ?9Y3}|ON&^4q7=pWVJYh1 zv;PChaZ>(#iI(=Mq;5C7-u0m9cuXr>HFmk(=JIHK3PgJxtQ9}zNq?g5vVMQ}jB;Fo zQ7RzzGriDWhWBeb=hx%q-(riTmMcVC4xHOYs^ zrwRLt&i=fhCV%I%1*XMiTn6o>iK*TI<_di?bYy#M@Ea7>Ms% zb_)_sMlaDJq{umKF3vq>*7>lcY@*)XF@O+M7EXTm8SKi{-!^>{01~i zu7J<^W+3kqH-rEV2B)<8*OYuK3+^1SPx}@)aQlw`sn^Izk#n<^ma#&UN!C4|-cv{$dxlr)KF*fWc z^BqN4P8UDC+%(2@6*^o_n6aHC?)?5zq%Y?(bbb3XQnBF7rv&Gz)9^w<8u3B7n!H*O zH-GoIe>wQ}7?4%kOs(90s{iDSFY#&v^(qrX5_IgTd+-&PCx(Ki?UuS<*z~Jh&NW&? z;7~a#aO*pQtx_U_`;6%Vq0r{w`|xhU;~^m5hSluS&I`UD0DblS>qP@IR~IV$|I=qH zb%jm1HU}Umx&1u*eK)sPuvKukUo_H9>45+dje`IK21>_8*stc_1T@T_ku;D`B z$L`UKG%h9F?I*|4bC>_8Nd96lqRzMe%sCmzcm{MGVCG55qIs5h3G4)+cqTy*8yydD z-H}SN(?i$r6X^%)DF~`2mll1SZR>3GtaX!^y*;IzoXEnYZ(;>XQqDxGya7bV`&~Ez z$0yYb3wc@Z8>H`(OkW|#gtmUn;6NgCPmc>jtSS@V;$`K%tG@)wY?WGLqm4_`zT5d< zxN0nJeL$>G9@I9kZb|XHc1sr3H{0^h4lZGmiHxBPE7((Fk2j=WvmgSemg~y>)gk2A z##(1*bINU;Xi!6=_Dq2VX%J&zU`TE~BWiGY_R=xtUW7U?r-h)~tQt~+#6P8x^yg`g z^F@87#cf^qO;wly^RAd=LMg0Mq;TG)zw$aZgr2XY_o1P3gGnMBDLfiQMFP`HpQWSM zlW5BpYERBU>3A11ET1hsX2~<>guHL{FGVfh?iBZLGfj-h*;WVml9Xw_%|DS&HWD;C zrtUv;tg7`%vHoi$Yx&c$LY6K;k%3@1^aBX5CcyXRgYplS|8(SQP5oC|RjOA)Y!VSt zt0s(*|4o+|-Lt-qGW0Z>u2RkRa`tDGVr2WH^jC!JUM5o#B?;|+E)^;3O1sEn$g||X zabOnEo$y-IRmWBIZT|lXij=*OQE+tozbXGycH%3=A1wdN_}{AVyGE4lmT$S91i$=R zO*Dehi`b8aoSyE{X}(;WF2P7?mr{0EXSir%e|!3*Fr*Svec zz1`b+X6Rh<{dmEdU+jD^`f$1c9JwLwen?h^E@2kLG(c9i}@e-dHy+9$<78B2PW1r+$ z3Q5cRC;LnRHox%k%`m8w*{4r<>O$noh^pN+TuH{7;XBmFb270c!+O95A-$T~3eFz@M-%DKN1zAz++>;KnNY6ok|;i&a0ZzhDL_D{=E#eDp%ppSTWhAsX!RS-|V$ZRUH(I(EciqznFt`?~JNK z(NA13$tGHtRP-gi1gQO&!yH`~p0d)U)|E3nR#g6PyoH>dYaUUp?LdLwbW!sImZHT3 zxceYMi8ghkJ^+3Jmy7r)><4FI|{lP)kzN@aBrHn{}W{Ft@&2`0SQFMEIdzxKjXLnJL zk{nx1;MnoStNZYH{uh7xM7`e+{3-&45XUBzV7xXIFi8^A2@5Ox|h4 zsBs~9TkO21VY=5R2+(iXS1L9paAB!zv=W9QmYm0fj)47n&JlJqQo9=(Qp3kp3N~M$ z{nDJ+OIcs9w_%IgW|8xxgkol+YwbTg?fDFjV?6(jW%u|LYfy%nPrwSF-6l5(zOEF} z19xWJJUzaB_VvepH{Pq+l1;!Yw{}FZ&^Sm%`9@50!+;{|&zevA@{G%Xf79BwKFGKR zH3=WATbAn^W4ZvaBDyxD-;TVBDqllQQd-rcKW_9ExfE0tTV|hLyt?CVeI|WoQWO7^ zA?3p40*84csEUldE++T5=66UZ3v;V^P2I-Xxv}YRh#QkF97<}dK;I;@-^rM>l7*^y z%i+*30`Ynn_+)D4(nqf&xy!B6uPC^}$^XcL+zIAJmqV05x+1umMgA=(@%(bpMwx#~|h0mi+YotN%(jNGNYL_LuL6KyPad&Ik*C=GM_8IuJn6UqwY4xf7*}xppehBF-r3U zS@(0CD}QzcHxN!NJP+N0B%UApc2whBg-kE}(x3Z>Qtvx&-c3I5#Tx?j6oazlkuVJ0A~7tE3B$v zaoZ%dWmbUCT2BSu5jsic2PFkN-a4RPbDm<|b&eF~ zl`~}Vf#0A<@_JvpqxnwmN9H_$PIb<@g;H9N*u5|0pmjRWhjSp7D>J({j5=!~F{b^3 zN}gYciDu^4UU&iK!o*8iNcVA1fvHQM&4rqa!4(n;zngCEi$k^H)?9~>u>Y;{Fo})o zkE_opQa-z8)PCpED!0g_j=HLUEPtieRm9Qfc8_$M-Y3!%pZ4nWeJ)-X~-k1;9H@NUc^LV&YTwJ^V z;}@WGQ94Q>YBcsTa)8GS9*gBB{G9y1#q7=Q3ULHbPT>*G z>DNvlz0b9^*cQfXbtg_TmOB)ZXJ${NffJi!85}2H|%T+dn8}@R3wCNA@1Gw}_>5YKSKlW4y4C!{16#81>5Y zn@`ZeR|vGs`&_7aRJ9ks8soo9u?-@8L4gFAsWm8V$jR8e0xzR|4}OCdquOt(HyoKr zf@KwI{b@}{Z7P!KJDmbAojjUm=O1pf3P7c0hyRe~v9E{7eW7MtojplBq$;&^*aPJXq+uqy$ zVW@yg4o0|ZBx%+#g8D8y&UVUj{S%n#T+eQJuR6W|;1k@1GX&3V6&Nh!ZbuXRv7J@H0;D=#^3CRVzA zvY6MtzQYNnV%L6PNGWnJ!x{Q%`}OL*Af-@#j(h^%k<4h>PI8M;&lz(tNtI$yVsZs4 zVP+hgs|L|lGEdxBQ&cGYazN3`?Nw;eTFBtgX4&o!ZI;N$AMU$WpBD|=*!S##>>Qe# zM1!|QH|PJdY=HK$1anjWH!S=1AiVvv*1x~;8H5*m!@mSUp_kPBV}H}8&^1xK5{ z=64E+FeFv|tqmSRXqfD`l>|<*uUwG*H7l;zlU+u)?~~^h_#6D{?r&685~&%SFkS2b zC3Ov{LJi>!9ee{_YNU+~>mlK7Q%!F-D08s;xN{l_N!mG*m$o!l_&P$lKc?@^r21a^ z7bHpU>(!^d!@i%p7UEYryQB;GZJ%~jvqoKynj7e+OMqEn75~sqtSHAPu59*{CPb2U zeT>o6(C)#XR%R2qI_kcKYR6yBYIpC9JG3>WNk|)mrMn|0fIvqjyQ}d9_QzEgvdilKnFod6{MbsxW-1Wf)ktNVBIxoJMAjG z(q`ZWaJI0hnjci6nHlTw(jBnOZO~-^J)>!Xbb{T>JAiTf1o%~7b z%FANx2Mdmj`Tat`Cf_kc#KWCpZA)7Tora}rk~p{v{7?X~(P`1v`6(?wi0}4?6@S}w zW2CE(`SAY`_m)v{Y+cvr2}zIyC%8Mo-QC^Y-K}va1b24}4#C|axVtqDjk~*jP0sVY z-@WheJI4LR7~Q*yUAtEAS~b_4bD_y}_&d@Q3c)HX;}!60AWHxJWrXIVzdzw#VH?-m zM%!3KMNq1mvtxu0Ra$e8wq5Ms2}lpMd@bkB-vsIt=FA;E@! z={JeND!fKJS%1V_+!-^cp$evul2XikLiKb!wzt3R>Zu8S<1pCT8bBmByJYq09`_mn zQ3suhIv`XU4IrU@@DV!4Ge)iym=Og$?v;5w(ZCiiwhHzOuzwg?}!%c6xIiW$=3&Ig5X zB$34ovmOpKnw<2B$Rp>*bbcEt(=4#onnLN=xEmp&KVFuIlK&l5(LoZC7A18`%d7c- z<|#Xu+0Y|9_Au_pGObz@%$D^^d}hrfP}-16Z1Z7Od z_Z>Ud%k07BbFQw@;y;~g`}5|boGbB#etOnEu42$&y;il7z7LEvUW<^(xEg+| zK#Gun>t61GPaHO0lh?9MplfEAEWY|pK) z>36KvppM*Mr7z2q<}>%gRc>AQwux$LeY>h`A8K3m^QO}=nRKbX zz+ceFI&*3YW^>KXb(Fs`6FZLq2$#Zrt7p!9tFo6t!PI-5a>$0lGqch}f?D&)Xtk?e z@l?rT$x7vn@_InWQyHg8A9;y>ON?~axu3YFiKdqQ(_+)QQ(eQ(N6a;HLEJ-dqomi#@|x{hGhUf|5_fy^}Z78VFR67=E?Zq=D}iXkx}VD5lD* zt3mS5L)X>)D8w&}^PN}}ardMzW_GIgfn#cJ(Qmjf{k~)YaJS0FD6Ar-p~7{mn*)o@ zmzG1A1zdKLZz2yj1w{U-q7aQpT8~a9yVm6w2sj!lhEDM4AkZuuQ52K{=!NtQ z}&0M;UXEhyKS(u;vA#)(QitCX*yD}GDuwA3pJwlo|2a0QZM*m^4 zv?!<9R#pM`v)AmdDp^1|E4YqgRZ>Y4@}KvhwTHeaxoSFCBX=_wfEd>!woR*1ttRFR zt>R5+##i&va2zBg^i%C$*Kr z-%Q(gG|z@zomEAfGQ{pa4+zjL%{d%gzN4)#BpubI|5oV}WOinlyQ7XIvIa9M3HxVl zC_KerOFRnZk7{L?@mWBr9ee0jrNLtP2qxxX&?>Khc9UbR7z%~TOn zuifRj9*TBYzIHo0-@Y1{R2W~ISSKo{O2xKo&Z3C6YxLK>9NX^fj9IU2jqR*#N!G>f z+>`iFs>&@n_p#L7%fq+YhZn;fc%$ZX>G!eo@d+hg8>_aXEWrzaE>|YKGl9=1nsEc{ zGh{pvF;6_h{R_iY5ZKt*$uh6vJb~*k5a=k6 zoHr2Jx)C`}nvBImV=};AHBtlfylL2ebKj?w-ah9wR_=KhtK>;|M2&4e<;iHYsEFKA z3!3Ejl%cioq<$zW3$Sbxq?-LtTI~{}TPB=4snAtTb9Nc#UVBc*J~!*W1~Jve6ajEd zVlXlWeztR>ZJymP9@id$veRVsdm}lSKABQ)y7_#?qUUBu%JqdN{9`6QeDC-x%-sZ@ zM_2oNGCt3ZJD0{)1?d~_%KDGfnlfGzs))Zk#5(FWqSBB`&kmO1@3Y@UBxlg1k-OPH z3F64%i6`e2TFTXUAT@_;*)_C9f>p4Wmiib?MY+*=iJK$4GodKvwG!iM(Q^RA60q#c zIIX3a1yC2?+&}l#W$2oag#jGnnv}6aF(Oxsm9ez7X~$L!|3x_W;Ly9K3vd2!3M5JRId}W_w&K^`hK3nWI56f+^&>KpCMxO{xVRXG z9(VKW-#yL_7p#y}BTd#Mpmd=FgU=)&Qj)-&zu&3hG>4T46Vdw;#tJ}UR_Ir$ivBx; zbxdnxy0E`v{=&54-)xFC8*MW+2!{y^!bcoJ0V!D0d)6{iHOHLi9VO=@2w-Kdw70UeBNutc(6vSX z;_lBepK`nOh0Et*4EBGNm*=q)6@8T=iNnWADwpT?&&$hnuh)8?pf;YzSK$L^Ns@Je z2vL8;;08q;N$@awFuIB(qGfLO%KnbM$Js$0xWA7Xr^X{KEd~SOgn4ByRx_nC?=QDQ zJE9)h|6W|j*1ur=I@-VZ`G2mvH{zY%i+~s}Al2A{{qh5sS-K9#C&|;UBS_CTA#&d1 zI{4?%ubft`@D=rKMx)tKFV(!aD3>p(5gv75jL-kLKJM?jApD2ADQ0b5=HAItt{U#| z@Bff5e5oT?En|Wg79SsfGkAw?A^_Z={AtLxj8Xs1NnPon&(Q#mE+~fEs!!KK_{G1%W-Fa0`RKLO+CORv-t8!Ya z$|8r6?1v%8zK9Gytn9Vy32Df>RU2luxtZA&X)CcJM79QCc*FGVH51lU$+87104qJs z+{R8UPtCy0E?Or$AZ4(>NQKvzN^(In zH9c&m!xjrWn_oHAv8u7~eOV{CxSoq`pYz=M=S>YJBEwd{KB3qo_xx}ZZAmLFK0%x~ zq0CzLxYni*eFhtC=$pAtMMl2I(fCi%yd23kyKnD_b!ia(G%I=-#=NCXfY5;{kAuYl z=PeFGyH^62&lRg9aT!#((~j>D6+V8y-7WD7E3dkEh(PgTmtMAaW-LnmviEaI>d=sfnV$YwKqf^T=D1oFa~w>N*>>>@WXA{3#ofc#@UT*gvo7K@&D z*HkW{MuYQ8y54+S)4RZTmcTlidn1Xh0br20HwiGICU*ANq!Cxpjc8QL7> zwoK<@=%wAG>wHF%cs&KRh-wZuUL6|wZvMEbl#O>{qkA>@-1V_z5*nLob*QznZM-6W z&K&I}o#ifyHG7IJ%kbsNcdz_JWOv;g?4WF1J=ZV2ztmTYyWF*FbHov+BtTAU>e*p> z5h*PTGccD1>up9u9&K&-Qh1Y}{aa*jV<=|RQKN3#qn|7YL=-&xjXMo@dFcbsboq zyTE2Moo5A;f1fE*7mFyqR|**&MP#;wt!#;yYjXo!0ZqREE6L#EvzlW_y~SKa%2Fp3 z(y@0iBjAu)G@v>AW$_69YPiTVBRwC!;U!M$f7f z`0Y1xD%zfZMR^L3UR$@>(}?{SOwn9qa>_4qMofu;x!##c<_Dpupq%GP@-iOv0Gmm9 zWKa6VK)gm0bsqjW` z^h}1@W)7BKFWH088FMF~XFyhS6mqV=aApNRI%6mYlh_6g@~UoAI9=me!4zx8J-fj~ z?5k7e(y-qs8H5r!@(wK#=F<0-_Ou1Q<={2)tnGXf!|tC9ET({aH&i?jW?q}eu_U-g z$_ej6T4U^yd(-o$na~rF6kMOaoB_wz7jV71X9qC^Qikf`Y2k9Hf8;;E_{%#G_Qd+1~Iw=ewV{R z7D9ntCi5l`hpW#2qZoX=mUi&c+DAURg$|)sX~>o|Np^q}9TYq+5ffGX&u)~A-&5Df zA(;vIi#?}2twV#nq7BgQh4gU{o_8zPk&d~=l69D5hvC#0wc)?V+SOilY4^y(Y%)Ue zT4S1-%oqSGB%*y#Fy09g&9ot#p+XlfymzGsmQhtMYA{iFkY5n2iQ3CPsv(eTUftC= zo)I46_Jmvm8v0KI5sh2HCFYhvD|Jp z3X6{=6qAhar#tSXT3GEk;BtMz1{lEQGkmSHAR0FoB}X8p24bK6gCG7!VG*>kFDl<{ zY&zN;WD#G;NJfhHl;$*Dx&$qk)`dv8GN}SE9{|7-ZZ+-pqmmT!k+z#6`T~M2>@(suz2Tvar48*TkUSTY zQV~NfhZutdy{h;I%H|hLs(eO#(sa55V~$?I zvRGj@!#H&@vo$~37BRm3W;&WRk`EIv(m^6{-~qoUMsETbcE4f2`E^!IM(0TPbbGpY zABv(}mtuc&(X(oB9*`EnNjbx3V5UpJRFN*!B-QCQ7W{DD4jZ)Y#&;2fBb$H~f|V6f zX(T7OJoL0}vBrfuUIXRZEfbE$XmL!TP)G(QFDaO#_Y?!^wS`4XM;b16e>(#sHM`13 z>`eR&-%twaZPn{ka46M3frcV9b#39gXas!?4Vs~vlpxC13-&>5ww-D9KV zm2wb6`ciU>7zw*^g`{Y)JC_7&*I`vx+|k2L$BmCuE_$IBm166ou|OiY@ZE7de-qLn z*VHwL3!K#tq1&Dz_MBL9r`sbk8tkN_JM&zpyK7HpyHV-r$cr8^iFRkdK-8X0*oRS9 zU59szs`#Vb>8HCLPiI@>T(*Xq8DCjM0uxv?iFIkgV@_RxT14q+`m^fCtpzu|{FhZ%7X_}tFU%(eibN^7OusK|M>^yy21Q+&`R}NB z1&f{#D_ec1ghq{x?-RK-DhAWaimDnCTFC+-u{}7yT})PT3-SZp4T}_WYLFQDhptWy zzYJR`SWS3a;1Q1*SL%!vuDaLV=?)ashUn;d{TZ*R5a5g0KdJ$`c8h}oHt%ncEa2T9 zgHe!ZrhhvPe8*?uv@Ef!Cp7G)_bRU*hceRQ<(h9B*Zsbmvsb60+-_l@?FsR#*Rjis8#o8wl=16y`}w2ZN3{AaevfTh zq}nkEFDKeo*7>%JKAk%cy$CgjnXLq(kMCQcGjt0;h}!!-J`vO`BW^SiOXQ_w%JiKB zw#X4P+s1kun4BHE#~c0`B~MsF-Tpj^#KN2?hlkZ}OXB)m*bL5jNxJ%snS}8DWl|xlBeX~4Rr@V(XEd8Vqp6sFbA^o2=h3MUHoSKk z>&n5vymA+KI)t{g4(}&XOowoiwp%dZq-DK+!VX)fcPvI>i{Mln1%>!f*oma|$ z?-Ro7d28q8R$mf_gxR?vFs}7s2tR8V!S^0h2^Z?9`51N2udh3&-sF%+(#z`ppl4JH zru7$|lFTML_s#4U_st%;o9PaklLAvJ3&-cm86Kv+u-J-QZHKGK2wf-a?>;KWi)n#6 z(_d_}v1PQ@6v8|nu1q6jG9)JiaT$MZ%b)3f?Ndj?Dk%q$bCYHLnGxE71Rae+GJ7M4gzz>2 z#g>EX{fEhKqv_c;1;r)dHHD%}0R$E$Lq)3?qSguMl-_KK8dmOSeQ!Ifa8SjT=-mY! zAL?c8+7H=`_IQ4V=5d>|JEzp>T9($|(+^<(Ol2joPGJo)VVhy_Y(Bx=}amXhBbA= zlv&Xt$l8A68B0erUORF1Pyu_`>SUU;=r3CbbKr@fxWyfJ5U+UQSpBBCd>}x4d63sL z7oqEg4U?sJhRpoUZ0Z0*T(PP1p|L%l2_9ZE3V-5PUG-NJI?wnD|FoY%#>uKP1>cME zM*bVX;EmX)3gbF)+nR>ZcY*8qlpNve&qoCHZvW`>BevULQ_3^57LhB#reCHl55C}c zecH6Y!yC6a+Lm*Yrtm|b-T{nbnA=g3HP)mD9I%0#Mp;D2;*JzwTxqx*-F#X&CTee5 z#i=a0{M6hW8Ij>aEQK~|B7Mj%8kzMcg=8eAmWh1>6-jKG0+6ZD1I@h}KA)}&2ntH~ z6oJ@Eyq~A1jzv7X!qK(to79yA7mK2B`6OLbv4U?;2pjA0Z0r#3Gw2PR>iW#Cowd0L zLkZ}n2H`NrBEB=FX5a+VXfnSz#Z>H)SUh+T^(e5yuR+p?^xwHr=|H0OuoJUh=l8iOxav8%BAp&S>mNbMstx+L4#4vY< zt&GK=iC1NIwzJs<`>UB{Glq%0m(7kDmM`W9(W6SOhNQq_0C5Tmcvn&7Ls~>RF##6BWvC`W9)xkZA#q_*6FGn z^HbNjtoP?ml(+FworQZBpHQ>g9@MhDoN?zYt$f>a;tx@lIW)~locpDN9=Wo$c$nt_ z#;cISUKM*w5(4V;oIGF0p6;*xr3DMi^(_NPeXYF$f#^1&VUJ)B=<}8V*b3xVn-SvNyU~(Hx(`0?V4VIPvaJj=oWT z&0%H^cjMfwWSz0y6H*tZSeqw|9KIKu`>~cz6@GOdtX^-4Te_yzbJgjaqEJEpurX6P zSYeJ-v-xcA=x782PBm!-FNlbUA@6VbwV&vFr>`bta*GC9A%3qO4h#3+4!3teHG8qj z7BcbA^CS==r{0U@Yww=%z2~UyPFuX|(tEhl)8kpqTgLZ(g?hf>!{6k5Qd?pDzEbn^ zz+L}n-%rvxAlc_hYHdyD2ccI-)7#ba<$UvQjvtvp@NgBMmKfc|x(@eUsouqAEM-QV z?e?DUGh4JS+h;w5&10%t58gY~MG!7WAOq5vGA@@yJP`!e6)?TjXa!h(&wgF`kLY3e z%-}*(d;((B(=Q`a+|V=!I$t;0YJWPn9sEw?I8P4jtS6>rsFR^LkLMsdgI94^M!rW} z1Rgi8x4TnF#-lp09|`Q*h)!dCMiO93y8^ zmPngjBOuo%OKfiduwxmFt3GrYZXL)~`BMoDU1}w}PViPE_s#h6wRIFhb zydw^EWPoTCaw}+P8M5h#T0K^nslCIWMczD-CW&=fLav3w{qUY*W?n=C)z6^__j~Qc z=9G)$MNd~xqhrjNPRux-;pAD`p<_QgFRluD>eCYv`m@gg$IX*l;bS01*>+a801 zQxFd#+iU2+y9Do=u3!X==gpS^QPNMr3vPIiS5MqmS6mpFhoS8anPkr7gdH91%h?kf z`h>RHFPL$NLf$uoU#y&FQE~F7c~Ti*c&{}*`+pXOtr$H3AK;C|V-V@*dtR!MTsHR0 zfPUm3F0Sq`=QEA_A`TECw+Bli0#zEn&4x1%2Aw%fD9S0-;$(-$kHOr>F7%3Xa?TCrDbSH)BH| z3yVwkj)0PN=NCA@np(E78H2F<+S_?DEl_PDYe*$sz416w1CM>4-T-?wsY!dSSIO38 zmVc^l_o#JPqs8>rWU{B`9xdT**Cg^rw08?{8@;JSKdz#3xo?*E0@#l~fX(ZWeOqQd|S;b%_q4y_30A&A4Uotd-L-;sMB-dv2%m_K|J~ZB~NW0A(+t9 z?b#A<;~kYL8f2^Qb|{=OT;-XX7k0#&gf*N?t&^A@<5WJacxRh47-YRo73E_4U$BwF z+U@U3pHFUZ-E`j&UhBNr_p0Ts@U?}uLhJ$EuE&C8BF&n+KQQZNleQJ*=L3B8>G8&I zo5aYFcl5*G?nNTt9T^6g4(F6JhVz?rrQFO3WN-bQ(!Jp*#lU_~{U|wh8`~vLHMPG( z#ia>X+TYF2}-iEWKtC4Z_QGC3AE+j>M3U8DD(6c`rN^T~K&@mTREfXk=2pgTvLLeFJN0?dsJ@3&2i-= zskJh7l1av2CN~RVV{^>A+Qf!dnNn@@Ph#!fpn)Z`?tKfFp^^N|nzr0QNlzJvt-hDw zkHy#uIxdkC`+VG$75f^;u9@=0W8!pn%`MTGPO667Qzuq6hf8xTsHg&k>Er(M5~EP1 zhUQ5Yr4;YDG+Qz5_KfPO1|=0$LGMPI3fl3Ho?4&uI>!Pd@3TX9b3cL|6=uku6`i#{ zI48>J(DXqBL|?O78QF_U5C;`Io;A=S)~xh1)^cFeIUD69LC z8>a|}B&xZ?DeR_FWRJ>Zu4^#bI*znDQz4fr&sgdRcLLDiZ{|0!gm|*m8`QY=sX)g$ zqC0z}g)y;fC|da3rX4a$${w36M=@gwk<)vEpdqv;UOd|GTq9~qh>q?FHF<*K(=eiq zRt4tqj*YKD9KtXR=CiZ0?RMCGY3gKhxN?68D96^OV6Y?8;-6eXxW5^y7YNR1%Gs!3 zHe+G~RkkL8gi#5m#|FzmJ+oi-+Uu*6G-H#7YqX=vw8pYz`9#MwMw<}T6sm9&PM>}x zudnlK-Q(C|YzZmZ)RUgDI6IkJ+XGxtObT+U&%Xs0kSd2dilk}{mfVpM%%aE$eOwjw z)Lzl9a&+md-erekJ^Q7;;}>34Kir*nywv8Gar()0JiTvHpUqll1whF+m~{eGQt#L! zFeB`~=F?!kB+%T$jy9fctdTR9cIw!p3hjn!V}hB%o+j16nJ}e97K3;^<(iJ_P4(G= zYslKcY-JX#YKCQ;k(q7nPZPZS5?1aaFYE4uWu;b`KWauRRhcgM$6dvf<@3`*HPsf$ z*a}ZE(5R5%`5KLu^U$TU=jb!cisPO%1SEG>RE067XmyoeYkbGMERj*D+q*^`A|IkLM@XMWV!VTZ?_*ruSXJ5f2-e(){h z1&Z8PZ3cJ%LHj7eKO&>1jkGj;>63>Q2{9a^6lPBa)r-G^MJL^&TAvN2uqIv}E3Iv! z45srbtV^RWrdrP&1<|Dqt)XfCy%OIFy%A3`R?eMVbIP}&pIq(qN0M%ifz7EptqoOg z@>JE1X2`TPL%O|=jE59_9sV@S^VM8=|CHZ-s?bZ|S98Ja;(@6C9-esioZP7DOHu)d zVcdBw2p(IInyCE4WXpN++Md-n^?9M<%Wy!XF%|fyJF~3>?S2*~U= zv!j6IO1=tNtV78fjvCK)#L9G_<36+r4SYaks)S|8*R;YfvUrQ#tc0+v=_7_z!BN@2 z)@Z{nn35b<6LOj;Q*&ue)|cvWI5b2ZRnVU9tXcM|NpW&(M$(%UB;1x4s?Q#Z+z)#0 z7Kz49RMRG1)MD!OLR}L~TjfE)eH#X6g8EH#X}gRLx4wNrH0eNJ=3v={Po^{)!`lfI zBiiWhWpz3fem@gWV)y;w; z1|zV(9LknsOKtep;ax051{N(1{<@WQWqDfY?CsR`SDKx!`k3TZA)7#P2d$J=?c=j5e2s+?@Fe+|9N&xi_uz$Cj0E zY_z~-T&54x%pe0!+keDo@)Q9W^#RAzSc0PC#ND`9Q62r^m2H2_j$C81oZ}!9@nKLZ3@+-g zLLH7W(^dUad{THMJ*SR5IC5$GdZP*UuebX<{v}8xXRkph)Z4CdUWF8c*-5_^jx6l# z2Ig)A(NL4cY3ac1B-73919w6#(`-1DmI~8hS<^Trb(zxs0RL8eB!C3CqCuHqg$n6R z^&obqSPXBl4g4m!T8>vCA!IX-1izCoSy; zrD9pm^IX_e=1alJzNTvV1o7rlYbqa+{bb@tREDy-C4DQdLCY8(43;`&^tfc#xGyFZ zS=(8mZyf9J`p!hOq>CU0#*YnOr!B_^YvtkDpVesIgK= zCz~Ze5}7H}rq@ZXvJgWY;H+!nZ(<^!%#SP@VdS>`04)qh`oz1b-^}=r5+>zdl&>%j zK*$j0(uueA$`j4wlVO+!fohzyG*ZZrso%c5>yLVvE1UHn&mv#ihSU zOcCzBoR98faU{B=WK3&9(%K#d_-;ch4v>8D1IlhztQxB>gyS4WBYFynF*&%69`p%1 z(FEd1N#*4W*!VPr1Ski=!SvMo#;qM{$0X-ONwthOm^^?O;0!Fdaf&JLnYE2%#opG@oGVQOhCY%lrz)= zb4tuO{t+;C`HZrSiarG_L4N=VsT(6pgjTy{&ZmoNGV1QpQI$5o?#a=c&=dZyAoE@q zzoDIr!RFD8w! zuP15qzzjvPZI}6;guFE45J180##+IEaZ=Oc2OQMbQC|b2vj|stYM4-o05`6?laiBY z#1M-xe%Q2WHG(jgQe6$C8)dest$t*b4PJ3?6{Yyh@#zUwgtYR~2keecjFDgpnr}#aYVF{I>|-Y>W>D zE^Z1l#=Ltk1kmLWyz{d*FQI#-A}X?avfKKOf=@Iq2BTAum*uE2H3yf@F}c2Ir+N;+ zkv!gBZIoxkgSE%>Y4e7xl|D&06WH$hi^_z9W#lA#Q4(@u&SY8(ZBibd+~IcZnbom) z-k*MTltu|<^9`IPF_bkOaT0ad7K~E)Rm9;|KGQ8{BwdAb6>U0Kr_V{ze*L$Mv;%HQ zm0%|nx-D4D*Ok=~8cH&0U<%T_|^OytP$>2yUs z>D|q|SRkR4ZDOBxCEzt8=VU$NA@FhtVMr{2U?}}O#q%ZQ~Zynp;4W> zjMNfvl9K2!j+&OWv1g0=NX%HRd+h^KI*o#V`NkLKm_eEM*8NfIX&Dneix$e+-9D)mkn z6MQdO52-LfT_ESoU{0FD0)b7x6o;}f!TRr>USmdRKVYE0zvQPyG%#K9zrztE2q>4` z!6Z2aauHG$j&OoKF^P9dnH>;N;XRdaL|?eiNa;=YKzdf=HogCjF>jXx2{0 z4a|6Z$jVdv-gA6X-Pjlpk_WFOEfaXg6_P&Y5DM?>`p#o}VBM!d+-YL@m%;a!*_Hy< zssHzD@F>%FW9xtE>hFIr!Mwn~!~T9|C<-=@e@AWp9q|9*p`#E}#*C@H|BwH?9V`}2 zrd+PoDEqwJ3r<}9!7fDw1)sIFw5}vVw_5|c^y#rHGBY!8LjGq$&FbH9Q<9Q`Bnz-8 z5V<%x?Ok0PMH9t4xWFbxX(GAN(b4~}!D;E~91h!q8xYmCwJ36Oa#qUV^ZFY$g+)F- zJ!!r375}}~xbT9UoXtA^gz(w_`3yPqFZ1vJE(Qbf=l>D01Ib25uzYnXK2 z-3lUdaTzy`kAHxfjQ5Qg_Yq^*DN#`~_&Gg_PJCPtf%gK^1wo%F?bC%&&dMBvS*E96x;byLW7Xn? z=D}rZS}{p3s`;2kASrO$Iwiu=@^S(wDJn{<5}7$TA^LYdSTUt3@0{Hm%EFr)ICl0= z>b{w{c@6$?5p)j@J!p)V!xl;NJk$u1FabA~w5dN(iJ z7X3R40=AkTm|ZPte3$&&xdf($NP=3YRO7~m9B6XBgNr0J+NDrNuEc#0>o6+peP$r&5LMdv8WEyRyX=AL zwd~>(7n3A4-zU~vTDN;KMiNRKI&{yg+LQy*5V*-**!a#02lH%-h!?T!m` z+G2jzFmf^zg|9+DM@Nwp{n>KzIH1`2Q_ameH-9O=2s*|U6c&aBw@?RWjX$$~aXl^q z(#!kY3m3!?Tn_YkEIW2hY6yyIGBi{hVWJ+I@&F~lUbCb+c=-{iCWrd|66-QLQwlZ1 zn$!S~Ev5*IJR*ALT}SF7_z6M~hak_BckHZEd~@P+6g?;&!h&vG2;dRNbLW!AI)i(y}JTO`vN9{gpnG@Zov<;$d-bjvMHl*-d38ZLeIV~1Un+Q zwht2Ze;M1jCloj$1M2ZOusytM-Jn_x&0O&U$=-MDA(3fMRHc7;#vB;v=w@rw+KbF9 zLqkJ23PcaIIjW^&tcQn>GPLtx8}zxr@)I_l5pgwdvZFPxcxi7~6f!wt7L#v7L&PG8 zf`97GIvG)K;m4cYA5h}h!xVZz=Por|C-l19GREEwSpNet>iRx8&)clhVuiez3Cc1+b{gdOKTYa1 z#YeBb{e&oDR}3V!Gc%IOk&x;sS@ml3fFr$)y=U?1*DC#u;W6e0aq<*eQ=!=4dk?Ac zD2{9>2&g$B@ZD?mx<4Sd2G+#32gApa23VSe!*s^Td#z^3+vf4!e30XQ=|9+$oDe53 z`W4`j38jGK*YxG0C?qLD4sWv=VS@W@YHNT)MNv>Dy-C;no31Q6qkV4tB{9_Z#%Kf3 z^+5#V@*j%0QA?5iqC#%gGWWzg*6l6yY-y(-MH)Z$)8Mbh*I&B}pCO--3sKJK@}sLW zyM?SC499}K>J4Z-;g3-ScS&|+blBYj5m$&`EpN}SztYt@2N!TpPYZWsj27jJM7R1< zfSFyYT`J>2>o0z;w`aVWyIGUFcv6a9+<4xo3k$iW%Ux7&9?9J?L(=#l6WZm+c&+>W z)d>puKqf;s*i*r4?ACPljth+}orj$tPk0uQ#upKvBAhv_@9$}%8r+c3@%;xZZpdnK zE}+kNpAg`G$73Mn>}(8FIx6CdDb|3)8Hb7Nql~-N!$zKtTSS^zKq*D|*0TEDgJs9c zIce+dDIpJ2dQFR}JpyT&*fUH1)lz!p`A+{>l9}Z4#6<@8FjlMmH9QKDR>{{J9FG(C zwb#q9x0=~JFF=LMu&@%lxvv6vKcZXvUK1LAeYe8J2iJm+SSyV7Dl&190CI^5hL_NU z%=G-g8e};FP^og%y;w8}ZSQBB^dNAB1O+N&-47$u@&eu^<}beU{F>@Q%e!QX~G#&ZYL-W;4vrmBggRM7PE!ePR3mZ$$OBn+%Ss8~?yO>{DDc(E5 z2$d|ZzX+N3Q?3MbbYi8?57QOzl?HPNf$=2rIhO4jw(_X`)R88aTk8Jk^ig)w2;7N~ z0CfnSRlprg?`&0eCR8ajHjAG;Tew)+QStWq?Zn_aqxInmnr#P+<-`Lql|m2Kzs@Lh zz4jEzi{!^4qlmkXKXJd!4=_K<7`^_qO66otq)29!#o^(v;0;Lt(mPIMSL`AlF&(CQ z^yE>e@un&W5&vS1C&o0{%_=b0Lsu5XH95$(m*k4Fvh9e}Kp|rk?5!=~8P4iCNWjQT zW#|6nd6bvIh2{su;0{ku(iym)ot*)@YOQOIU*r;TreWJdOOg;0eKN~Y#ENboC_;@2 zI5>gEWzvEc=EAySJ)eTYx1T0UZT?zm^cXNi62PwL?L|C*eF76MK`<$^t#S07^_W9) z_BdFb)ePKNSPaQnX&{tX?7%6CfR`2--SJk-I#0j1oV(7+uVA#yVD|i5_cM1jA40i- zIoD8y4S5wd!vHlR3*4ghqan=>Z@h*}k5?{F;A*%VnGQKBIlPjkG$;)_naK#0`V@uD z@)M|Um!aKmKb36nW2WpQaCLQDfuJzD2zK@6{eP{7xxRGxqpB-GQ>984QNrfcy9_-EIs?GEH!o0;R7h`{-;^wcjx|8gE!Z8HsfnjyvL((R zafxI>GNo%dd<8ai{!cExt^?MtJV1htYd_@ah7T=*<#znq)LYY!zZSNy`oLOfWjVJi zBSuQDGBcVKSWZdT&Y_VrYl2S3Y#uA!jdkBARA0|co7-=!M*EGw+jClD+k~v#jsp2E z7Wnwa_1<16#h7{gH)tVrkhJtXOJQbCG_k)HMxQb&VxV66$VQI8xnX%QOM&!AcqwS()Hgn* zz|60Lqu!oG)cUaEa;HO`MR&^P3KO3E7Gfp#Fw=C0Sd_-8z)GS}SKr{M<(5^2u~Zwa)EI*@WOT#v?ZmbSCvu}-XwU9h#in}}0VFWNfG9vI6_6qeS4 zrP-1gz~*?#&+vVwXv>Z{m%&^>N#u6zV+M19!b#P8LDUYeG0 z2?N{Rmp2?-oyoA4!lUoUGb!|ku;w=2_R4cgF+MS64d%Proj;GzX&Kh-UUSm}?e%`R z4gscXBoAs{3j_zNEL1&pN4rVcm{^8_c7wbEhB5?zBl)QdA?)EPtsA0A>mCT<{Xt4T z@++lHkhPeNX!gJAB2x|;Yn(O>r8oo2X*E3%uKG#0h&xN)^W<&MpYKW~{RF#>D!fQ?OQ)ixE|l(9}>-s&PQ;@J?Z^)ZwqJ~nCz2mbgm zf=%xc-OlTh^eGw#G*}Vsw)LhOyX;QZk&_p8T~Bv$Ibv61v1dCSjYs&xkG11J%D~0P z$x*#4!uuO@*!yl>{}hJPSGg%*!uWtisCe-fe}3<1(wWr}w4s{Dqm+`67Sf71y7+HcID}rd^7~oJPG8fZ#8pj$mt~b0dZ-;}5`n#rYiYka< zs~=>SETSvI1(JjOH7am@dD}ZB03A|mi(Q0#k#PZo-_ypiRedy0npZXEaXOtdUkC0V zC#ZjHPb4|=9VK^uGG@FZ3`SZus+)sfPAC{l#|V=nkwx%Y#za^edVIG!pYm7-0)x?u zGPL7nHX&(>b+GZD#7LU)Q(m{0<@CFAZmT#t)I!?fnuh8dx34{gGz2XD$*(gKotRqM z5GWXY45-T)?fE9?Qzpe*8|c|e+W_2=-Tq%r`pY48i%ZK?i4s%(7{d)0oxWbtMz}=8 zy>{*M1R!>U84W1`_wRTBBk{=SuGJ+L%dHIow`p$0yrmLwCrFDb1QbeCc-s!QudQsM zPZ>0C%7SGcK_u~ir@qy(_t&f{qo3>d}RDZL= zyASWp5xXYq6*Lq?o9#tQkF?~EX6t4(eA0!Cusy6Av)ix4@wDrsR7!b4B~Nxl<6chm zPIZmn6lQjMocX*%+17P>lw2cvI=pFuX>MXuSf{IOC4SLII zi<`J;k^YF~7AAA^M#=E;x>Qb8kl2-kB!L;ZO}VMN$1k%oX`&Ieh$FIO*F>3`&RjZ6 z|NIn!2;e_``NPWI`ml9$7T!_{cR~Q6us+9s+f@ln+#z}8#p64AWZ-e~eXX4_F@@>e z=)raO_Lv#RCG~X#Hr}z@5+_&bdvV+P|L#$hJ@o~9OD{Zie0_LInkoI1Q{za^Y4YWJ zwI&#KCNo>u^GYz$zgTT#m|gO>u{!&aR~mGCiq$eJAKw{Y6X(j|lsnUA;pM8ublZTJ z``ogBeEWxv;2Yb>y(X2QF_#At1~TPwX=;|Uw};WRvqH)%%n`!=#aBFms^ptq{bC&Z zyW8&N(w{*|SfjYzUA1m*8px}QXXmpM_}h^(V#QXSz-ZRL@6cX%_nOI)L=Roaj!dPz z!0xn(hRZ`GS0+wFlDpS4&iS%M3z%p+;*}9fpmKxYU=!HW>}Q_;%YrIp(T|+b_5+3r zY;6CcbhaVl{*7ahxVugKLtAxgW(^9IMFe&a=qQ<<8HlY0utC7r)Am3MXhvLO0$v}u zz~=2TQaxLP&Q}yT$Z9~ZCMh*pdyB~pQ8?05!^-4P~e%Fq{uh?Karfip!f<(ror+kLn-5)i%9s>YZBz z1r4#S5AP$M*-6I_k3{CaF*!Xb1|$(`?Brl-`}@Q9Y6@kLI8Rv2Thio; z%GrkP5`X*4+Mukqe;RKgN3V7|fK94YA75YN3K%GU7)@n>tQ=W1DzGi|dNa!~cQ)HD zj@?y}qJz}RCLxo}{GrzOe>i*Vs5YPAZ}bb)ptw5}3KS^r-s0}=QrwGsafebUF2&tl z5=yZaNN|VX1czY30&m*id+$B>zkA>Ok#lnP$v(5Yvoo_Zv!BW6X*%~XlzqQ*C!N9L zNBdZ~@I`Su<&Uf9YGolSkE5jO^VnPEkryUNz_cVok4LQZP?qo6E+#<*g`njE zKzxo%ZXcEa+qS^C>ky$xs!Y7?`V-bI^k_Ri$MMH!A0^k~k*phvf{oS?QE*9&t~U@N z5`32$a65c&#O!kLm~HCx&plPg{?`Erlvxooj!nQ6cO2v)ZE0!u**w9I&A4aK{_mtX z(`U;mH@R*T>y5GS_!10nylD*x>Smp9cKFWF^N`%j6S9}}+`zwqBA5W4&{!&UI&kA? ziwEg`J+WFKXcUk@PJg$gHFKl(Nmi1M>NZl_UU=fU;KnXvSb4A8f%C-SOYyIhKS)&D z<35<-IMs|y4}qx*e!Tl7B?W^~jifoAZY;&ZI)pCuUZZi%WTY?;6n2l^a%fy!kxm|X z+F`csLNCd=(<5qHYg}@r93uGQWW(D^iBjV^u2tEKawCuSncfj@IB@!|?^A|3*55jv zJmN(}%i$5?D$g_wzBdC#bbOpCytsN2GOVTRL(`0**$J>Xsv zFAlzzrrYNjdd8MDhX!x{ciFXdow0X4{Vhop3YHBLKu~9z4u6q=w*|*Q8lW8aISbKq zzf!yVw`y`GGR!6pG!H$LkufclI=Kj=Ux-8Bo52*Ip2roygO8995hjNa(k_8v$PT^ zn0{or)fPVEX~&`ZpU`tW>YexiV@eI6n30@5-g75MtMD?TMI)}9Y&Tcbs3ePQ7%iEM zNyTz?V`Dp>A2cq$IXk;caS23#7Qk7!UsKxBM9!pUW*neWPZe@+b_?fmy=Z3&9^>2! z7WaM9!Z3VE*1t?4_3~;~N4tFxw+7SpSfXor2)n&OyAH4gU1_$XygTA;8aYrmGbZ|n z0=g{{`fqt&83ot|BKr63*h`Dbhyb|QCW$g7&I=!+PUvJpNAd>#hE?nqu6IX|m>oI; z#i)}`Ix3y)?LiC|>R48rMecB%AxLLjDg&Qgu8Dg?v)oS3?*zAibMN4>&>|#)s~r+I zqaJLz_UI`rCiji|O=k+&zN7LB5X{x_Mt}Aw@Z&Qhuf6a^IcDL*nVyq`t~~rF zgDeMD+x5b0n637Fs!vhoD>V*du}w1Zwj4k}v%MB^qr2DeBK?=Mb#+5EDq6PkFZ_u+ zewTTC+msJ+H7_KJqHqR%zJ51ar7LT==|W#fJGL0#2y4D9%Hgy#tPpKfTM@|H{o)%X z{c?*gt`)$Y^DWzE#@~_pome`f5v6gSn>Vld1gn$PU_LLQtqd0WE(h#hazx2A?;8k&)6isur zH@;MVZbUy#OhI#OZUTX}r-&t!cIwERZ-O;Vb78(aCnr|dUmk(ysMNI(*Y``V64?lm~m&o25 zv=Qz{C*rPh(eHAPbf*^EM>9L0bZeKh+pcDDH%FNat67*h!GF1(F<4AV?qWAHc-$Le z6SZG1f0I!O+PB~jnu7yrj>e9gb%q7#p8d$nqc_z9D<$n*@x2j z6tH%@dL2~2_7f#K3^nXQ;?LWoqm`qvqobpXWoQTdptY0Q{lPj7-%)`o zT*(+Slv`nfP211U20B^PL3twa-xZj(E5Bs6d`|L!93WWq^At~sglXuyldaDgf*NgV ztu_SW7qqB`7AggJ4k~gUf`y%LXvG#wZ*EwE_L1rLfsA3Mrjd#w*E zUr0Zo$4y$W{w}kaz}?h&cX5VOEafR8TBS6Z83em>)4s5aCG};3ulT)2?%)}=TrjeX zNva{mSWK*s+ZE?9B9f^?**-9qOwjZ>D%*WV{igX=AserjS>ar%v_!dY)jG z$fi2jPLYxR}}GNZI6K)KAnU z03U??Q~HWJFBEF+0g^J-eYJ1^r)kb-;b>7cb`Vo^uw>5)th~hy!Fk>HQOI(b{ z1RQ9fpo0FmV$yaZ{0@;J{B+FC+aJ6h+^!ULr(|RUB!3D(S zVll@;-@~b{+mDqDl=)RKD4cF}Jom*MaU8tX5|XQuHks6yTE7uD8T;%h7o}v-K+nkN zP*jedPE}4Pn}tAEcVlN3g4mNj$|P4}W^tiykV3_K940}jO?-Yd>JV^w^<|IRGZ9m} zaDWTj^2Kv3L(5G9p&1mGC`IgT!i_~BlgV;tb=#3Hrpjy@amJMS)H)5Zijy`cTO>2# z?d1=%OD_05f|e)IT841`O z&&2}KCMMWK7s{8?WN@@>b%LHU(AAck}E?~YKc88cPd{E91kD#f0-ZG`0 zt?;olYL6N{!f$EzkTF&7IN0zoG{Y5l120AT*?qCd!BD%FM&B;{5v1FTzT!1KIGp=3 z$>!$)rA8mKD1XwKm2h99fnf#v*bj~QP;9Dx<9`L8JB?A>Pn;hcPpWf0kgSeX^ zpF(i*C{U>G@O(P@=|qO2K6_!Z!V+Sbs!VY6vuzaNrCM{cI$r9Zm^NqJJ(D>6zBxsG zZsHl89C|y!w=&N+?V^4ERYd`iz84|AbZa*&^r@)seSA;c96h-ExmStnygbppVRK>q zSaCyNcn5YP%S}6^Lh4>81|kpzZqzt|&H_tIHSFPU=zvUDC*)l z8C+zfY#aSZxibf1U>X&yBxSN6NuVN_XYusK)*EUvS4}01y zaP2!XvyL!H^ww5>ZK{%0Zd30{pp=K-;PwO-kp?5oH&-2zqSiy^`kR37W@vS8c;DKS zPE^22Cr1d3ekEXjGJLU}53~TEj+!NrYtB@>*&VO5y8Auq+I;dLq!WQFY5Ws=2YGo& z1dIba^TuX`_@BeB-LSt>&N*^(^gI!b5|6LrXm#c7U=fheLCu%t+ru|M*}=}v`$m;~ zF3&I}A705p1x>|)z6ULG*}eH+xBN@o&2o?($CwR~xmY^9^_aEoxt|o(WSQ-c@PZ#=2X37WiOs;t=l4~m#@)Cdg`o-5&WEEx7scm9rd(XUo z(kfvqpBp_ENqSiE?!@GuujpoGt~~(23`xrc`Wxi>)Cg9kW_vKurq?{ZtPg64xa7Vv zKakMBxS_34L9YL%+QUvY8m>rOcX=XH4_)kOhRfS#$z)r3RI55*x=~$MZktLdy@S566}lfj?zmC82(54?NLQJWox!T!IYm*4d$@@ON-Op4yt8);|hNfL4I@>8XUV&=?O1kk4#}F`T4-tq|1{%CF_sW z-@S(VW&G;b^%+GkN%C_^liS#nbuPqrr)5McoP?)zdZXI~EbxxGh>0{gP+&b?jHpGp zNO2y4OVTxm0y~0ie{BslFbf7JkntE#uS7a6m~Bvo9LVtzYT3t{KP2M7#-?#NJG&hN z*;6rEp8qjmxygFB+#BhY16SX972PM+d6&O-)@>Uy+TX7HcFwRU9q(W7lCRw9pyMWI zD6t7Wo5E$PfVe+eWuNc)=uIxz_-n3SD9^pXXg+6Vb@ZNN$Ic9V-L3-2R!C*?xSFBJ z61L~%-puCn2wNvaGEczf*KDR-Vx{;~Yx=kV}LS64N-C~}@8V=mS><_Bhasi;JTkdW&6 z!UGekk^QM%RAy}39j;FkO~Y#gu6mJnd_qqq%3k4Q%Z2AHpt#1$SVOqf8?YC@*EzpH zd&L(!U8w&L3`PqFjEsGfJjvPnO%*GvRE%RAxCjICEw5mQpC5U-5M1J+(h-q(oBOYl z7i9&p z9ul;_%8E}@i<4r~or+7NWGBz5LDfCsb1Ci8vEy(TQ5i)4Wg#N}l4>EEo$HP7Q`IJ{ zzM#+CEx-8j@$p2c*E9+2J7yzdSbJIG$=+mmbs&1_A%XvwQ3ZSXkbwbB&CMg|4kp}^ zWnkaq&6VZBt9}rO-?QsKcy7VCc4LOu@>HV_Fmv=y_NglyC)b)$D^eI|xs&Fv%#h4o zGlW}Kbsx7agYB@2aLeOoX!F0UN(ODX@Yg)%?>NpkSqa+s?(d?l~`sO;i#(A&t62Y zmtMTB&>}1sSkj-=gEj^%tA4Huu{_OZ*`6z5+cpb%q&gkXm9t4KPR%doBRN*TZyOM+ zwQ!Y1zuO`q__voO!k_n_xu33yb={n<<4G@SmfH7wt_})1Tzqo_>i+F< z!MwM$aj)|`8*`n_dIwYCkl%cIrsDv$#}p3!9rH$nuiAI7dmuD%Z58aLX9@!Oh!4Ju z|E91k9IqF0!TmZlo~tWE#3}(xdsYCKCy;I{>XHd)#U$(*!^Fr!Szsl;YItf+XC;hF zwtajQePL|LW0Tt19cz(cthV-n0tw$ZLz9XthDtXJ^rB-I&c+Sd?~(hv2R4bVWVPO&;!ZyY`~m-ZEU{d7$_&M`K8V0tddkG9`zYQA*(G|YZTTi5%f zanjTEGLpg;_9u*OdycF@e_Z=sPDD38W!DCfZOCa*yKt;KHbgw%lWv2VE>&+bnlBUr ztvqDk=#rXd>RuVAviNN*SN8_B$^X>mwToB zbT75yHOin2u;3o=;mbpul!stwUF&|M=;o?$)f1Mz*U(CnH8@63e#B{7R-V~)ww|Ma zdz3E$b51)8ddCevB6F+*+%PB-8FFq;>E|ytb1r_{3AXs~W8U{}|1n~Mt*j8fKk59( z10?w9F`Hr5?c{%SLS0n+X!3)uPJ4XEXN|>ShSU%JIX!O9sP__xFcW|HFS*8IHIttb zz2o$-x%o_3vTX-qDOS02!{YJmG7s|=mxk%C>7_E~T$AgcL**R)NPD<+3p7~mH`nX-Sx!-X?!TD*( zLv#R#vz(L(_jBtyB!h^D6Rp*kGCt6qJRwASu1@!R5Z6yP2sDAOd&Zkgb_&+ZbN<4~ z)E`6=Iq=-6V&}f66zIusG3#zEzW3*z8)ureeGdnou|H`q!@&}3JDuH(TkRoS)gG&{ zW>7iL0(4`3?k^8iN($zM=}`E^%SzEd?dY#)GHtUxq<(9F@&R>vqAIs&@6%_OI+n)SOC4BA@%s@a7px zwit{GHk6a9^?tY%%2{l%;i~3$Vyy2=sxQk;%TUyrZ1{-O3fhxj46vs)Px zctRW{=hv0-PlR=x$$uaudEY%417iKMfHx2ONuPWsPcc0q5C2tb0LpacKLVOkuC2yf zz1Lu6(aOtM5)p2PiMnr%5C@em_5LRr9;nUfIsRa9ps?JK=+9bGn+?ttn$GIBBYXL} z`WO|O>aukvB&K?K)~;G;&L%?>M*-vR-ik>a{_+>NMIrysgd8A zj4#YX`$jVo;!*pW=ARMMEQeauVQ!B`7mGc)ZjD}~^%ROp>H9EKSPP@=dC>lFK2Y3{ z7T2HG*RhyW!Q%J>IE1*-8=CIddtO0|DND4xlGh^~)&?w#ahUJd(#jdR3&PUJtgLxZ zjO_1pxN{KCnZBrCS7vCg!02a=a88_~c*>*|P5^|s8L}ns=Lnx{h^Pvx62MwhZ z!N=r6*o{uj?lK#LoPT%AvfVqu4^#Ps7$$7oAzqXq38^5gqlItEofxs+9`s~6y_OJx z!&_#=xpry2Z7=Zkyf~t)+V7}v-=}xu+cPTrtj;~PH*XwTxdwdT!*h0wC8KWa(MHiZC_95W+l$&>E9o)Ycl(*R_0n0{zoVhuR6D{UdL_GprfNN zI3?}6+XMy%=Bi=1vvZMRf<0!|*4D(J&`CSMD<`Ph?X|0Z7eii;qL_CO*}jP0#bS9u zv*dCH#S2+0hxZo8Bv0mdT`a%4-{O<~cw}dJW_2J-T(3WPZAm~)j3(3#w0#^2;`R0a z!6!Mt(XWtzHB`(W>tlLDutp*?5n@hhs`FBxbIVGXBw(^s>;0p1%U+BA`-5gXy-=u} zzY>>TYNN+XYoHkER5!t+>F~qubY}ll{o0lUP0+8YQq~1MT?M5{7yf#qfo!&AuHl5Y zjd>*LOO)OxkVrNc-tg|h&8-E-?(b0#wKYN$(x-2>6cWxP4@n~Gcw?Q7=9~Nw+`2XT z1L;8qc2)s+#Fq3`hp+CW^N#MdR7QRoI9-wtyPjmrw`b}X6|ZVJi5x{TAFULZkDdXg zpOY@$K*Ap`MqLfsZ20b*E|@`U!%0{128}hDF(|9C7?h6-P zM}a!`Cz(?)8s6NS|ERpR(1eU^VOQ6TFN}i;NZ|X@%F(#w-_jd=rBGnS9CUXt*~4|K zP4l9og;D?CM&CpG4AS(-kX5qFXcWC1p6_&Q5Fi_s*t(j3`ZK&%jwgDl3h8J}_TcKC zRkqSWFWqTv>8K|23Ki?TeR}+(q{pP$>n{A{zr_b!P?t-FwY!gYk;1>}6b+aC za?mQZqB&<~VJ=l&lT@-IvK~zG`_5~$;=|(L*>cL2^)f#=jw|nBQjeq)zRLA|xkPg%WQA%SY@IZfV+@pY6Hw|l}cmiaSC!t6}$IVr_IHit@pie%z*86XO& zj6#lVm;PdXeSKi2NWqMmxjEtS$(Wc|@LZ3S{BR|S9YB3`=Gk_?@(~4S((8*q_x#va zb*+l==X*dxoNIR*NW*Ap#Yw9Cwc9uz6hF06GB5ggCHb!weFJtyf`5ZIAe6{6NKC=6 z73H9KvU?3g)&kc&k-J+6N-LiGK*S3-r_$`z32E!j&>v?fo(Y0tD%OAPVWc5%@|G3@ zrj_PowOiDBwBYeIY|}C>KK}Q(s@2w%OpQ{#)%rxJrvr)G3N5L3Ggg2vCDlv#TS*s- z|FLnQr1q99U<#-5nWXkP6=eq6xQihnBHUx*gLoc!v9B^8-Psruu}^=z681V&h1XHN zx)N)f|E^`lOFnBm8K-*~ElW>?fZ}(rCd@9$`})QNB>f%Cz^w{ukswDNP2Nl{HF3O7 z5V4Uq?qucHJ=Qlc$_@<76V34X1_Z1h9@d6+M|l5L1rNeVWd$vL%}h&e*}SN&pXTPv?*2?lPMz@YKyF%* zW-nNY#PY+xpGY&D@xL7+|K;}WuY2oX!>>PNxTP7= z|GS~XjcO!9GyMNIdWYE84 zWMF8e!bM_r!{Bfq4wiw=evR(qSFuRG{(t%#ozy&4$0}O+KPCSE*GT_QAO5>Dk1$f1 z)P^h@Cl(fBdV72C?UAEaQ9(N0bi=~KS3QEoQ~!ib+WoR=u9EYfS4J)j6c39$k(h%+ z4O%kmuyTRiK)E%@3H3f&D6A_#$Yw#&$mLM=`QRBL72X%2O7a7PFyA4Gkmaxc@>9Ff z3|xwbn%X-suqXF9C9*fBdan;@jAff)I~78nky0F2@)*cHwQQHzvL%y#;B ziU`K|YZdO;=^j)GA(_h^=n)~^eW8ldY4YLKn_z5YBkJxuX?alL|1eT?E)Pm$Dew1F zn~>kjryz3!|JHyLdrKZocXK2*?iH~s;EHV2XLovgFSUei*ATnrDJeN`6l@bjy*9$(TeEs?bWYhnNdt+y(gXz$dQ>)46xrcZGIE=v&SwUdIUPMSo zxQHO^o#8c~2l0Db+og}(ujxpGWqiU`9B&t$UMNn_arq3$Fu^FaHLu zIiqZ9FIX2TyRy8J9tO(ji=GJc5%acVc~=sqJ#8Z8)!14w1*0qaLs6Yi!yz^t7N>p6 z7_Tp8wH3oBr>a<=Q9XW48SqLdH?e#v?3wU$88NnRQ3UMxvgu!ZShyNi*cdkz$8uRl z(3&9*UtnXK(a}+#UYKGrE}-lNeMr1m=q_(=I`wawSA~AJeH{B1Btr>qnKRyfx@Mt% zLIfOD`+&H&YqtOrYlAKJsmb{#-Qm4~t?|U&hV$7^=OeE97QveAY{Q-{cD3WyJLThN z-6280uCL5s8PKO>*D00;N}t>V`P(~Z$o)FSXUDNRgE`^r;Cq4Kr#(L9?hF6?z@5|g zO5kEx1#W&{!rZbKTt)OM#I;G9ZGOg~b7tI#jpvxJ&8JXi=EW1Xg64~hRK)MAAFT&Y0(Gv?|A=X^uRm2J=67}iQ%+XbZD)O`0Y ze9wqxx=H2Xcqbs~X!KYQmh*H^fvhPlw7WpkwAUHXd3YvHlVy7A#<+L_hnLLO?YjD? zh@D#{g*Sd}r2!0BsR6<1VTP0(uI=PPXU7-AfHIG}3#Sn(tCn5%^}+ko&BW8|YSy2P zhVqYRx+lO>FMcAzhRfrC8>n1Pg}cOZcI9>e#Qy+qjq7$nB0~nhmzYZA= zF%9^7U#7BA_wr=7z92}&PyxXO?fhOgq6<~DKYyH~?>L^0FU?Rf6bY zcC%44JnvIjX`a45J>HVZdSRzf|4`*o>+O3O@;f4d4Ova^o#cnuEH)Z~kcCFxN8{Jl zX0>F6SO;5^Fp6E$BCxSW?VHWH$+<)_JaS3p7@_t>u=2wnT$gdK7NBhBv{r0+mWT9h zC)*2lv{*pYbSD72xbV4_5%ZGGFFU87=H7@876L@gn>0S>&@9J4^?C~94nNM<9mM^h zr(H;ki0&8&M4FpCOPrPSPNE}B4RS+Z<}CgNLWS?VYh#FML$pq1e|w~PO`-QmuxKPvR)8;yLRH{LtH?K8UfxNY(hwaJAam#yKxJc3!_X z8kw2IczB3^GMoJ%n3$M&xQSKV68tN2o0@1qD(fL`s~MQYu@;be__E9PHPX6d1!r;B zly+t}Z3dnrh1M3kU?pk>ux*U5zT{gJaq}IWYe`efZ=w1IeGm`jeNNkIr?QG4*K>!g zup&)|Y-6(oiSMg5NvK=G>CPI8)5M@!E-x!G?AI_`-`y1+S-scR zEXUxMu%Z~?kOtTj2Z^=CynBI3@ll&Xpl->TZH91H!`F_*wb(|fc6dQu)j)=gt*T*J z-9*t{gIcDP=z!A2gkaxN4;rjw#kW&>kn2&?+>ubmuWE@?OI*7utz{y_Ad@sM&FtlW zv2nGi?C-!5S5Y-jqt)OOsOrGXsx#WIuU%GATxICoUKlIf+G8b_SoPD%zD}cHRFcJk zoU8pYASY}0PEj$Q>b?ei`ni<`G{i4%tBZ;CJuO4f0cGYfU1#ExXqDmXYGBx}BGfDY z6EbXFFJ;zv=6Vk&cx8y&QI(sco#ycPZP)WOUEOZ9pW~kdG*d-Wljqvp7F{2Ir>PEO zr%uJjCIdmy1spcJ%J9oS&>qh%^FS)K=*!KbMzmL>W_=?;gQR))yMh9W3jhl&kcr&q z$urXy9E|?y>JL-D*E*AO|}ax{t|faDUFdp^V#kxq~a%cv!L+JJJ^fWp1t1kNsRiU{z`2Loq-u*VEsvX9Z5ckO3K$^mVKm9^fmL6Zw`dd>h~-;uLhrrtX2d>-d(z0jHQV%G85yOa zM0D|(0l&+0;IvTZUv_L0ceQUfxUYIwDc7a;x%{@h3S*e@>4|*Faaxmp@rL%jY#s^U zL69f=XTqGj_u6~@xYTxKPEW$Ru8X1Yi2z@i*~QJn=-}ARx)e3}a#C4|+O2;;*2Mx1 zx6@K}&r_vi_apq^lytQ&t7^vU(|i|++umok5Z{2L3&72Jvry0VCDr9+_IHo5qUay#}>3jwcM%WxLJ9N<=PoM4LjE4hu(sQ+~-Hz?bG!8NTxRl-baG$IO+v~@<$bp(}06HDzIqZL0*3$cd zdv8}=sl8pcrfC=^-S%XT*tT7AK@`0nN7Jbf0XnkFttgu-Gnzv{fXE`imdV~=kY#{R zGdFAOWL2S#x&6TnD|E1-AWLlpL=asTLKEVeyXrvac-!lHm55`|7>qZ)<`)Vr=*(CH zK49>qpA^>V+SVKxQrpw5 zSZMxM|MQdVw}a}9$&oaO(5LtMYL!5pMz!Y?-%9o$5cRH&$ckA@Xlv&i2~Q19NXL9I zLLuM(#1FWV)dxI66nS_h%6}Zp<#y1Zj!{ElPx^zEOv!+AHNHUs*;@Iqc6bT343$rh^(Ae@X?v# zzIyWDl^#l<+Y@a!)yN<3d^o3hAQ3Yvhw}q)nzGcFT1?ORnKMIqPd;c# z@f(h=Ra;KQVsmzBWT>(K=An(%NUSsi@BrGoL^TwKS2iOS>X05EGe)7Ye) z5<(lPIj*6cC72?vfwDKl==aRqe2j|a;kNp;c9mJ1>b|?$=tDVI0yS|Vq+0QE*eofR z*Yu+&nLnD3a(B}Dh$ME2t>&q(gp;n}OeY1Tk@YxyRidWCgOAgj6YU=BE#prt? z#bWlzLZ=fy4aj&bsmBn?-4=!K{XW01hwo+ZFRYWqPjxvUi8Vxa$uCBov(`$`Z>wn^ zp4-opj2PLHq?{I}8eO?-AYn^h z6nBG1jH8X!3&#xSLEQON>R^VNyGJzOvZ>l|ex4n(!W*`FNdzEoDC}wsaoJnLa#;fX z&745vLx!;ODyc6R?Agg-c3+#YdA~f83x5J{Qo43wX8%B{Y+0-mrTd@L)32SEDO=tB zoD6P+ShWoI1kFXaI6BizkFytep<*^n8Pq!6o-7Go1~mp9Vdr(JetX#{EdY{4!V(wD z)q}wr!=3Co7h^eZuWH`S=@bnDj#8s7!`-@(l18rNT2_9`W4`?O`=QMmdDwMv9vID| zxfp6nRD|<>UBb0@c#e(;JZ3|#BEA4Xz$#d20fX}6O0u|%cb5}4__NHRXB96-svNjl z@uH4&(Pm4ZYtQgcv-9GP(>N^EqZc{$qTJl(EaVuSk&@s z7syPp6NTLkMRJ_t=4`NT|5`TaF(vPwP)7ho?CZBvl&0E>)Y&Yu<=Oh}S zU}IKLRtZ0j?xBjw@W4aFG$39nIKQs90m6pdbL z3r1643jxiNeIm&^yH0+yV89TJDr_bxa!JcomYscIsaI>G&J^YCqP9QOIcC-sm)4_6 z#2s=_j?BOq$ht&h2;-r3COdtCIzJ*#L%Pdwfad!r-%{^U>qZ&s6_wT+=iQcT=eb!R zSH~_+4s;?y1Xr!{vwgKSD_@lj!tbIm_XZZKT{f?m%elNBI8k-p)YRs{L-d8Zn^Z8n zkYz&)_!AG=DP(iEL?HTuk9pk+pxPmh4LbH?qOf8oYpx?Jt+-;pRH`7IH$n_Tf-coD zq?~CGjZm#eY0+{dl*%3+`GG7Z41bN5!FX}>|9$Hq0- zf|Z&Zq61G_2--FnHQOJKji}$ue_60GDOa#lNHK(WkRxT71nG=eU6I~+OgySPx4Ohi zhE33qpH~>di<4LW(2iT>@PtA3WM;mMcJ2Vn^9}%gkPZ4S{rflf@** zSXoCL@5={QyQVdfclxqy@S~IIuGK%*w^0VH46gXX>6Q12Oj)}l8mg(GNfc#Y*Bw0} zde)7zZsxO^-Z}UkyVt{hHyXpi5~K7uqQBGLOlniFDCt%fD_GH!vG!UN199e8FVX@! z*I?_;0u#NdB46{-y;-krmlt!<>0KWZ{a0=MlvR=|wzx~pc#JZR)|nEU9I8G&MV&5a zuB9mGnJVU<#xC{iH2Lg610U9qp*ykp%gIZ%1yf&7OY}Y7^uwV`h5*oepqXg0vrHbD z7|hZV#~OKG0JTN<(qE21i(aPEi1T(?UQ9n`(LvI6((>Z6ud2Ry(&3Hh_RYsoQ9#ga z=e~kfDoXXN39e5>iP##KE!cAx{FuhE8wmR7LAdqe^6hrS{q`o=QocM6N8BM;db}}d zx0v4x;)}mn$~0#wr!sG&NzY#D8X;>UVp71DT8JXmOeG;fWS4v^Xy=uG^Zc0wuU;|t zg+=Fb?@o2+^sIQu$dO<3q6wMQ(;E`JAg9DxpkMSF&pdBltH^nhXMzXIjNd|LV>;Gy zQw)_mA3Z)j%<1CJwXEzD>ssK-o!8oSPF`fKgQwRs>1)g1GC`a~brzEkeoij2JLjX( zQ;<C0X;7^1AC^;%rK(3gtfD<3)A z<43$qw(k|wCk;ibtT*1kt(%~snkT&c0N|l zl-Pr8e?*KrcAamsn#BE=#fx4`ME-k++IFdS+($MW@afFC=@p8*(yMA7abBb?^Oi&HcGXq|ci7>fU_Fe<>g$?euwzCY`UT znn|t0M8=TQiOgb$JmI_x;2)kr_fw0YzToqNsy_>ld<7wwIFNuRnn3PD3QfhFhEF!? z=UP<}E%_{8E5pN4G{0G-Bta{BC$4HO8i3V1Z)#$rHb^IVAOF*&z zq*^Lyq*NpZc{c(VYGa^d?x4OQcYKdS86=lEWgkSz=7}@9T86qQ+S+>oZ358dy0@?N z-}D{yh&=F8*5#E;cd%)R>{t2d|8;SwWhx2Tm}BzO;9sE0*QUk!Hc%gBN<{QE-4xk~cHyE# z!op3`!#YmBGe)6OJ2uNJL8ZQ%=WO^GE$rum6Lh5}cuAfHR0`?_kqWY~t4!P_cWC@zUJk4+R&i}*rQHfvs6(S zHgq}e1_uwR|%Bv)0GZk;#FXWfHa2t;c22CIn(%@RIIM=ZL9UldAqsw8bL$neR=-VR({_ z6xNV#YYnz{_xGi2I#IFWS9agy0!)J?dJ%{m(Wmt*Pu=;Xl_GyHa)kb5pQ48rpH6B1 zv)jtkUft7ZxevUnFHMK6^;EXN-PG$%&v35U3=}o}@z^BNO#X($_$0i)BWrGm@R(1S zzrgWULj+8A2L1fw9AWrd1Ln3Tq7~r87O^$2$kz!pbFlLyRLy(R)efDTsd++&(^k1& zN|ibd?(SV1t;t@ntf?yJi+(`#t6FK{Ikp|s2{_{TKkOkZT$?OKw^WtlZ4P)Ea-cp) z>TI-wXWx&43^RvNydDu9#7)>`mE&^nf}=6~$jyYWs8nkhQvr*74kpV61@qC3#Ufj) zvO>2n{d~7-Q596Z+gQ%pSYS(+GkWP-wdil&z5lt`^Io2@X6DxF9o{^P58D=75Y9hDZv@v9XUt~PzPw9~Z@R!=}rU6eQPtHMkSB1r+Qd)gl+qU5Hh zr{mMGL@Mm4J{+kK+LUOSQhbDFx)Cw1Uho+PS_bgAeZ^=@t+)O(|KD|;p^~9HD20o9 z*^=2BJ{QEx=ZyqLE0_`*PgaM1133&UK|`anEoH@ikB0b%ecX^6=HYn4{T24`2MjJU zj)eB>*%G;2erG-cP2x?J65!Q7zOS(|yTc(J`8|5_>EIpCxAwsPwj*J9vu)BGYs86E z{q{Eq#Oc-rB?l+X-R@azfwT!lp!WF{#%2G!5ddB*(R~m!>*u#+!Ka~-8&zMB*U%Aq zd73*s)MDwhOYB8Lj7?C3;%HZ$8N6{_p-j=M3fX7=zrvELO-JC7GK zo*~28!3N;8t9}(#FhLRr@P|2Sol!=#D%VmIMk1C>fI+LLSZ%%tUR+nZ?0g%Sx4*5a%CDK>G?J_Q~ zF4A3Sd%=AC=1PCqfsfn0+W~Ui4Iyev2k&S4Idb#2>TN%05i2;hYkXG5TG}t~qpu+7 zXU~&f`+=x2?#?e-;<+p`#1Rb&ECKUr16# z2gKGJ_ZKlJDX_YFn~J>GVGg_kuPr!YS=^k3-n6?vw3vo^<^>9nIL65v_GI_838QK{ z-O+gm!`W%ZmLkle#W9ao2mKz2ToGZ`6h0bDd*Uw+R=8)OsrgMgW9J{j5D)5|dVdY# zJ$1$hB8Cig;j3d=rcqCopk|H-Ub|-CWs0F0kiK zd}6cfwr}A!pU-~cLjq2Op*-*N6zsYfXf`c2~hbDNnC`zYyr_ho*;gFd#?Dn(SPNf|5h{t~u z=u_F+NI>1EEn%2r#P_(zv4M=^IhX(oq?c8_Kigh2o5TWyJw19fsqN(LbN?E6iex_| zvTfgRg!(*{AC*kwkP*A8TwFv0Mu{;+_~i7@cQ%ghcUd2Hp#$0{yxgPh%6~-PR`-Q9 zH`fiRYeMV+S$2AxzTv(7VXTSWFgt;Q>+Bh;RS!g;lv-a?7!I9eaaEazuhLvakuyIc zPK|ksSFnnK0#F|vG!>Fsn@jBC=b?Mc8=dv=`)L=r>=WwIN|JwiqxUpqD{`_gR|=No&czjVSG%i#CS+%L;IGIi{{Pkg^s0;a=%l5cf`e6)!VSwQ*IA=Y%iPn zBtE5v^?49mIxRI14OZsGZ~e8^?!V^mtD;rJk6+A>bDwP)O?mZacn^Ja1W141jO7?48Pd4OP8 zW79k}qYcU>=zJs)5XwR<@>sY3utu$%G6zm3_Xs(0YS{xF%gD;}o?-r@`{b4A)-A4r zS86iVh6B6JGWP1FAa5DG)m^rSq&|49(uP&~COS@)q6OLO1*4&8+})nIZ$hO{j&bHQ!;3b734+fWlo znll4wZgv@g!^Nq*8yxB)qTI>NO=qUKvo~DX|I(I%ID921pV9;|d9s-5Be=60c|w5p z_l$P6C958bg6i{Wp3d-R7UJ~JV&6ayXjd_DF;nIr`B3I(Z(mMUE`6j8JC+xnqSV)0i(!o>&a(t*qVU- zLXt#@Znnl12cNh^dRFRY>g<5^^~kL}uvb4@jTJ8-JUn3Y?Rk>#K8O9=i9p@D#ux!2 zaX+B?P%mGT>hvb=blNo4g8rsOjroz1Y1E^2=^dvY+ zPA=f}_$vH(AZX}h%R%*PsLdAj(T-iN`3gR&h~3Up@;%n{!8X^-PL#UwyQY)Ro2nTF zpBhr%Dcect%_7=);feRgz626W8OjFT$@YGJ8jIa0D{4jo4-e2x)zkQoo??KV(Wf0|j#1=*s z9M%6QWm2}R;Fu{S+K0Zi7xGDgQ_jLzE#Z{Z8=VIe`aRzxy;hU)?hfr>5#9KvL%1if zKc%A{wn8JWyz2W^K^w|r(c^U0=i(##?PEA-{eQ2iW*o3x2H#NU=cdj$q^{0a*;5k}ME^YCJkRQ1h2*+c% zcWzNhM%w#DQ^5;o1#_QEuYFe%X4OPv6;P8P-v;*O(bAgxaB?^;zh`&w35ckE`5sLj z6U;xEvi5c0=}1HbM`B9S%Z`_kTA<|={Z+@WSdrEy3E&ZNaT`h!{X%uRV}F8Y=^77L zFAZ9TT?9EV#)ULTY;+qR#aMU0hJTN%;!X0*^^p{OABi=!n{17&%&O~$%^9)k;8IvP)Z3R9(@BX)-+C*@ILV`dR-U@C#->AUdL~Uw$6EgAmogdbe7ZcCwGfsV2h=AjRY^^Z_uVBjRA1^== ztmn*cOSgag+HIRw*}z<~KaDNnyo%o9~zn0R|_cg1z_aq<(uPa zlsHu@fivuJcJldYytKehqkZxzP4y|i|VK(bMqcyN}2c1Cr^d{QG@G!g4lz-{9C zlm%hE!0CrMOfcZwpV2!mFOSwtxo3SHH-giR;oy+u^c)adVgFQ>Nc=%TYY>Hkh3=-V z{q!<{5XK>rf?j)+c!6!j$mcL(GdGbNE)ViE4{duNY$y1{dKDaDf6pxHqo1Nd(Ely6 ztxePHq!qrZme&;(MO>=413q=Q1|V)C_2kikuI^i&#%A7HJ?^`oq4PhCk2qsS>9Hvg zybj7AWUFu?PehrdXJ*x(yBksI)9%KNC`M>%f1B2`u#FnDc4CvcboxW=6b@kON~QqR>1Q9 z;cNmW=OBA;67r5#zSTcUM`VdySuu#C4-YGUOh=>*grWWvZ3iVe^0v2S)V$?;Iv2;; z5t_ui&Q*|yY*eP6#;hUvJ5&&6xYjSGe8KtMM&-9AwmC96kZDVpaGF$qvFN(#uAMO-Q)J+g2d^8Rms;Bw=eD)y63rFWebEL0vRp>>%%YuV{q#M?@aM>#^d*$#`{s{u!upQvPSu1iTb;&;_i# zIExhZ{R!7Q^ZI-efm^79(k1?CvirG{8ca!9?u zH3~eIkG1Irru84q`#4$i^^ek8BPY1 zNBJtGdiecAt~}MKFn6*lp0^7QhX2hA;&3A=M4#bZ3ZhQkKOdr#`;sP-;tNJ=rJ_)z z@(!YY55La@@H6PycMy&fWCVJR>gjn#qEM(zEjz=Om6e;HL96%GATkbD{f{z|@BTg4 zpo=9Uj38P^?%{PzOnH-oX=-?I!{N#pMYcW7n4srel!;w)dc4_5-ooSMzM(}~W=q5O zp9owtgv(9};k{oKObS6{Gam2B|I?C>0?l|S7b`Vn2{n@}Yz5hEH0o0qw>(U0qU-Ib zV`uOr<7_NC^?&Wr^h8u@jS!-P$HG@X)z%PJl3x*3PgTG;(psO1(~{Z{vq8{(L#MX3 z7Z;fXwOVYS1Yvm>#rx?imMZ;Y-*;j_;k8CwBy0^4?M{HPYn?yWqichSn{8%&XXn6V zw8;!{V5k43kn)RxC94UZ9}(pdpggS2{%^@c3+>*>c5Tjdz-4cmsXU#Lt+BSTHVL@h z7H(;0H#fJ)a@IjLfi~s`MooIXxm|kWvwIlxWv--8$MgCqb@{fJd~WMPOnLHt*=LN= zy2xdW*TN;o^O2iXHaQF24gw6_+gcRn7qtXsb@7LUgccUr0dVG5O7dte8A9n<2D2*) zfLsfa;rDze<&c3sv#F9Ov^0F$y54||Q>j$9zM=}>H@B4H@@RgTnNua6 z+m42-BwO!K^A?uXiC&_pbeks>AenhiS0hL3O!Lq>vE^BBIl4!XO_T zr!s1ISd|HO8pF#ErTa0Fy3b}`0C@5WK0Dhj2_H1$QPhj+%Y%Dmg`Upew|i}pr@3!f zJlzhc9}N`u9bp*eB{9{N-lPE6+>*@F+miErU@v_@FzVT(q1*xI_oW)d=Tf=?q0fLg z(5|lc{pQKd7y;CU3?qeMxOQ48C3ZNECjIQ%O5ya<2NJF8@PPh8O;n(9AT;4=^bLRc zEUc$G;-U|QW5Kf`MvXO8TyLPWRPSO#C~XHgwwxUY`sGvLB{f(GXuTV(>L?EQ4n z`Zd5*lDRW}r&-CR{wt~_afUIz+VR*_$&t}Q(DoBwU!Kx+!4%8+}*J1 z=V&deCkYUIClGI?Ie@r53uy{V~tuz}&E-X>Dr*0w;)( z&t?QG9I4FO-Z>Sakei$iBH~Gx$Au#U)f?=r&77g`o6fH@4tsgdD=uz?hD@*x%#I03 zhJcmpTkWUm;`e7^WE}~wqZ{4k{}Ca1^LvmrYr>(mTBY*7*ysGZ<@g)*9mm}-`mknm zLNc#G>9OB=dHcV`CseB9?C?*-aXEt6;$@AEVXiTBBSw8)axt8Z0nrs&TE7=KeIo=t zlid%e%S2b67a*xs7H_jzxG972g&8pQ6zQhq>ZHzk8wOXjq zV_x5vG>(YUW~c1axT)a6t9CkO$7j9+pTw7aMLG|+Ua9om_S)axRUgkeqZYv%erR15 z=kUTPHXSpD)~{6>?*Qs(kEyHY{Z_PP<%Q|5z!c3O+4bwpD9$*j;V#9~K#R@NZ`*6S zN_9QMpW3P)Z$r~|Vk3B}m}#Q#=CQ+0@MWF$1%Lg5DXQe-?|ESJV4nEp%lppEe|DX8 z-1T}y4~=6oy1J9ImRan68ulD4vZ+zn`?9wWXdxi%Z`|iq_wtn2!!<6hOdDnnO=x#R zA4u#S9Svny0#@AXvt9otcSZ+>iO%Db)ZWjrJs%=5Ev9@?w8*_%B4vNW@L_DNcTgO3 zdNdnY#wJXv8U_4SqE?*5X@Po|CXdaiWce4>1{!6c{hZ$GAYO5<#VqBK3ka-VR8};;dGSKgG?hS&s5*g)z)d8hc zRy1qntKr;r1jm}~rFjgKGi&c-zXgZ95>FRQrb%oQyNjvvnjvOCEU_dbM!haIQ&z%H zsvzuoXdUNOv#g&~QkPm}>Ax~yq(@<=FRsVIA`VG!;wD|dC1I}hCxt&Dl>6<+R^PH$ z!=mE0ddG`dvZKp2vvQNdwquXz*|12-{ns*issV}a2Pqb>q24zD2QdMZxUzRNmT!5` zLmbBVlEig}CZlJo6m{&BFin-LE@?k-qNOVfXjpR{CBj~$pO~A@qenROqtCG!4AY>I zu%~#h@Zl0Ifc1T@(ul9wpI7WY?EBD-2|3eku@VoRW>OQ**JH9pvDLhJ-Lur~VqBy9 zfXwBnf6P!N!m_!UmYHBxHD6;*uCbUY z+xqBT*80FMfpH*NqDNC`#q$;WQ(V-Fi2O}x-bh~m(!E%^>Yq9IK$txt<=}9}`tfTU zkTaY0B>%}kbS*`}(GnZH=6{vDK*~g))k)laDy;MB+T5s`i7ThZT3GvJiM`W zM->!c*_!2pZnU95H^9ksxO(m3toh}+doNYL&xW)PCklkl#7@Yz?UO@&*1e%kTeN+& zH;Qr5a>BKsPL9s3eEl(zRnW;v3v2>nJXchT0j9-y-8b53Dea5bEGpQyR!b8ERHfqJOJCDIhfujVb_>wmut zV`(B{oLZ@Qw0%9+rYq+PJ2dqKYiZq0l4{X|EZ_5dH1 zlr|>$^5Iu~@n1TaB_mfqHeG#4JYoP`=| zK(#$lWOuHmse>@DM2j8MBp~8nWeEUc66=Q#t+KxPsOi^DmT25A8$e^>aFo?f2j^of z@r9xulatNI)6casUH>T#d?AHJ^} zc8{w_?YI;|*2?@{zx zQS%F|+F;3*ovd@5yl*@?eO;lvtxr$)77?Z=@KXwt1Kq@eX{9N?OA|4!i_Ej~oxi1O z2MpDEY~G@MCsti=2U9^?JmRB}wUCW-D1~vYN|o0Jf@*;cZQc@PSS&}nSba{JP zaI5cWg?e<8HJ%1KR0ym6Lvn6Z%m`z_ksCdaEK&FO9=FX+z=Y9wuC|Z`FZw+}RdY}4 zsiMjcmpMn*Z87`fR369P-)--mL$Zw^X=v>?hAanU3I(76jxNibCdx!OK&HZSg_eEL zvVdWJB=1T_=VF%0%<3sKn(2F4e2Vo{Kk+26gl?=_2*`g$?Bli}-X~5FU1deo7>H0_ z`g2?SLZhxV#7{cnw0W)g>S;q2+749$G!R&nx(%t9utbiBHK#svCfy?lSqSNX?0 zd?5|Td&KQ?a7amfv;r!*@W$7EO#^*5%p#m-O#8=f&SdacEto7eHPP|V#o2aw%V5D^RNYSdYfCb}IcU28BAPf|lujd&pBzVuM>~SAi>5hL9t<$;S@T`58 zx4{fe)IJ0k9OzpL07V2WP=g#GB#rZhS_2u%7z~&o#sDe`4kwg)DsZs34~>YiF@9Rk__uL2Zqr0vs%z)HU?y! zBiHEg;T}WU>XrO?+OJoFFk#(MJBz0M%PR8j%KyAzV|#fRrb4FO8}|GZ4l^sw>6!Q> z?~cFY!NGi`s-hwC%9cX-`|Rh1wv(H+c0EYDo=wiAZMSxm~YTYM1nk#xePeogFUj2ck)ZSHXo$Y{@JQ0v) zAd13aeDi@N-I2x!*}pMvh$W+;EO@en>@8=pbHUa7nz^fG$4A}(OtQg(vpJ`&?bV)u z=2=gG21)foeX|5!D3gk*?e0{&V0SjA(C==ANB{C`)vdktvDp~0)x;7V9J&!pdei43 ze)c&yS585&%NJ8{FNxeEY|W<%JG(N5xD^CXIQ&&xowAGZNHjseU4T$EO80YA$1s>5 z5i)0>+j&U}<2`BNNCiGU(Uno8NS!!DoaXZgx{QDhMRi+hvOxw42-)&=7jNIR36$-0 zTJW%$?%5+_wgt(k+|2N(E9y>dYImvBMAYs#I=7tb+O~PNXiAg<$Fc5QPrd{>1!vca z$!!mqQS6*gP!n=Glg5KdM0v^)LPEaiz!2`8ch4D-r+$43)afm2&&*9aDiL`w^q63# zMNohtTZKy?Yr90Ct_S-S`jXGNP-gebW!cSPwOAuVYC9KyeVIJ?A|kQcn>wdEdMa#r zAD}ZBTfa8Y@RdcG!)#0>DNpM7*zf2Yz`;pHoLcR1j8-^AXW_#( zk)6-JQzb)m!Y zOp7HnzrByq#}f=|*OYWNzL#Zf-;(JG*4E_O zawq)}F6zHxkpbdi1CDgb+slfZ)au5qYYf=9Kgp{e%`|JAJ`Ft_3sF?l)`rYGz&#VH z4we+*g!1fTe=7A&$OHho4=CpRfky6>co!I+w8+41v(ojHg+_dQc6l-rOu1HP+f`}A zp3J7Def)^i>`Jxl&>pq*Ln5@?=VNB4@F?V{muoK>jdLcp;5_(?u_l=yJU?Jz%w;Tk zb}Bydvt5hAm2P^pzFk@Fsz#9F($b{8@yDm1hDDe7Tyve@K|DRI!)mFLKYEkb%N_{@ zJqf!t<+}Uj^$*aMrC+(SE+=`U%glT-4GE$Y10C5hY1WWi0-^)`NV zZExMl79yn%)fLM4+=(IcC8Jr^kiQJ@0 z@WTl93bJYmIha|i8 zLqSRb`4ZNflp@-A_dY3^vC#6II>(AVx6ZT>06ss5*zu zqH*4eHx1_FwR@Y4t;1~2zK;mjWQtgAcAy=h17hB3N2uLJgpfeD-zYrc$P?~ z#{+g%h=(^gs2tC3*NOi#KzA$`v3V1?dC8osf6vCoAO)h};95c(NNz!kXJ^=6~_{DK{SfPd7=yb=C@t z3;{XJq@|s~XIkx7s|kmNIJ$Y$Wd<uzv-v8!?6X-tmvXUC z+1@m_s+4PM34ua`qIrAl}Y65(nX%iQzzc-4e@(l@U~nt8;M#9-ig+mF@SZy z$SB3JUxeCKT&4HPMN3Sy&3J{-i65trvc^!ltXxMNjLEfwBHG(dKXfTkblZV1<>tpvS!BiQ+U(lA*Klg?`Sd*&-?O=*8VfGvW-qD>^%E*Op7=+t_-eOf?=KMtXPQmg#!+H{9k!?e#YE(XSyhx!_y zjTPgpG|q;m+{Cd+>~g7SVp}9GCK9_$vxJdax%Ynt1zq%WaK(CY1*rKz2uaG6QloQY zil@%zKJeze@fKu`iJdcW3`5NNY2c)ay-+B<-5CEVWM!9}r3cy~R8g@057G|vOBCeV zqFz|e-2BojtA)?!E#T{0^HpeH>>)e0ov-Gm`kqys1T5g+b z?I=7u$5iVtM>Mi^PplVwh+}Qn9v)5%%wxTI>{iE`+I7RWnG$y~wGYDN3T-#CG2j{r zL~d1Ivap?)vi=CLvb14#ndYk1cXIAf2UW z5rScx=<#|Y|4HowvFF3q9)AW|6x-u|B35Yn7D5@=MR`JE*18&pw}>DLY&yQd)^i<} zBMSNPzOTODeW~ycjeED;c!dS?Ckoy8Xruh!!D2CLz(V@WOVX|FOy-5x%@^2Ui8wN2 zz2F&%FX`Uf%#lqetN*RsoK#3j{Umj$N(FCF6WwWp0xQTYmBAD8R?*J-D^kK0lSWHW zuS{Gu4NZhZGs=r7uSCb0_W`aE?>`Qw$E8Z=s2#EqF{pmj9@*>-)o7$f;gZBdfV)@o zb(cO3i`SqQt65&uN2e_K&8WzXrpYm>AL=FA=6Fdl&!Ah1wyOTHTyMa|aN5|x_A8fs z0h&a$u(Zv&(Z?x{V>X@05@*tE3X!`%mu`7*MHb@)hx4lDgA(3^_fb&DQISNuel(rx^3fS z(PTq5!BlE9&>)m#WZky1Yy)5A#_IRlU=pI-B{_Rq&ns4b{^7T|Hb$afkbZQgamIZ@ z)=MAwRfyPtNL zguVv%Hv7wq=6{55;hbJ@(Q{}dFND6H!|Z70PLDahA9p4E(k_TSomXNYX~P*0hDt^% zyxI*>wO06&J-Hjv_f=Hf0H75&Y^+)te|OJENO}x;YAH8X_rT+3wbLA&{8qj0RJY5c zv_v>~TCCHpZO*2o==`}g-``w7pkiNUzIl^ca4loA0yQpGVzncZ*F`XG+hNwtqT+3S zh3k;+K`DO89e`m_W_qolu#UXi468Greb!%{PlUf(dZ9UPq#3mm zP1IsRut07#$Rwzl8Z2C%->$+3A9jWfOpTh$l-Rx>(SE$cvZagOmouCm%N$L z8K(9^Uj1ZMu;2JP(<>4XsETI8AS9(}%3?y(Xq*Rc{^7ry23eMrXABcdIY(jwN>OIx z5X?}FXk1+R%`=vQgoEv+JCk$gcJ@9SiGaY@0l|cO=uKKElR0nleL!>b+|1MdWhY9D&|~5 z4N3#}WNj^O9a{94xOSLZXD%3vXU}X95X(W*dVzws0@~N$bWksTE z(^8=WV4(f`6-l{`^R}-VO0uQdh&aH{)9!AYkV6Ggi`QJ?9$~JmB1X*|)(4N;1Z_XK zEEwdT%s)?K6D|Z_FPdJ`a*T{14}B}11{DaW2wt~ySW15&F1shhZE9P;-3w#>r4TcP#Nn;jFXBFSAxj{ zYt`oPa6O9OoEKH;jhI)q$BxJ{D+!}p%}7Q5yi zuAvSyMWkCbNIe18_+D2mCkp8UcUM}!Eo?h=TVx(VG)u6&%~*RRuWYy#lX4SRw!sW{ z2Zg8FdO~FOSSpu35-qK9$Bl>DZZ>kq^*)y%GnjBVWzTbKrm*|ui;1bg(*h|?RMOOOCX?PG8f%pyHS?@J z&_0>APt>6xATJfC5tiZ{l0tG+03yR% zJMGaVIq8^h+0&43I%1PfuLR#>DV+0Wzj@F9?km}etgEfs54VMPvt@c4+O}Sn7;*EN zXovO;1h1H>99CYd_cym~{=>(^0=L5BSua#ZKOpM?V8pV9+JxkN?7!+u4Z53pOSB7h zow|wZj)yXIafR20rd^!uF-2N*=nQvZV;}9xk-S{Eo9hdX9j%u#2U31>`2w~Kc%o|` z${*I6^(wrlOeaGb*k*Ts{i>O*O|gAdj}{`F4c7ZC#VZ)j&_i3QR^FQ6a`0&WYOgQh zFnzP>g~6y*n}p7x?@xpoGaAuWyP?#Rr2w*fwwlBKTpq#R9No^*9eJ_8)TFbE8jPT% zllEub*v4boM0TXmUJ)ZB>Zhlo??BB4#7*d9AmV0)eCOyWG81zx>2hVvia$5PmIs^j zS06)_&ZSOltoXcw?|U0E#tL{?_sz(Iz^a0uX0yT=raMYXX3nmj*jN)$whZg8!B!CR zi^Er5(hSlJ8FAA|XRi-GpFAO&+sPZzM%vn~@(NRjx7|c#VZeib%B#*>uN% zD+BZAvU&D4(?lcC@{2Pi;OFJa!>^x7M@G7}5qJ3J!{lPNbD|t8zAwUo;HdH$=3F(6q2GYz(DA$!j%`qO?WaS;M&a!*rYtYJ@V%W50 z0Ud`s?m_?|GTO1Eb;kXBC+E#dq2S~D3-gbMrW@}J46V~nQME5Yy8v|O5pw42N zbeGWjaYBJ#GLpTMku5=qG8mIv2cU+m_Us=kXQT%6#*SeGFlrv%T8yC9%`-l3N@51- zm3T4B(M$*I2zab7t;76wHbNGcYYZbLz!k1k@W8{G%j21_DnJc7Ue+q=k`g|U|21=K za~}M@a*PrXxcABaBg(Vri-}nglL=vVj*xAvRDkjlM zNnZ?9v+tGzaF>0`R1hE112VvJYV-l$&6{B4vcPo1HZAqhb^0xx7mAh1 z2lNArBW+;_#K*$Ua4psk9j+V}ZIsdP1wRL*$swY$mK4_%Qq=Wdkr>rUw5R>U${zdK zFJln0l3V>JFOLtdLJMuHHgk13nq=%eT#m&mw)$-G_DE}6;kyVQ%F9&C_kRGtf&k73 z@-X?zmvu$8ObThEi)b)kBNw8fD__21d%IkAFPdWI!4(Bk>N7{P&(4(-O3J@Gr;Qy4 z4=dgL8o&lwTl`j6w8c)J^%7+?4|Gwddl#U168VDEgyXf3ibAwCz1C%4Urfy?Cc-5H zRPs9iYF&g#;MoIHkYTvaWLSFue4BoDhM|xr;7Ui};izc3!CMbR4g<5*su5!rzXPKNu_&gU;h+{CP1#1=`BG9f0x zR5SRba=)d|qa52BXv4?x8qRqPbQSJ*X)>PTQBtz&EH(lfiY#IT5`gh137%8up3nK7 z?yf;4LqC5+mnmjybp7Rh^{|S=XS0yF6ZYD}i30!G!_u&BL!|$j_sDR>+U|&tcOSV8 zkXD;LrXgbsF{4i?L{WY9_eeZ!^Q+9vn|S}GuD91v>D<|79(AERzA|#G;0VsnKgFlt zO|KNLvcoEGeo}&F((lDOKcu1AN-I065irOg8;8*0%tYH^UkYdOo`SsoBL8FJu;t{# zU~gxvrruj)vT)T!V;!ov-|ri-{9Y&0ZaNncM~h(flMWCalsAnY6Cs6^eIl9uZJ~wXsP^ zrveWQ$oCV4zxp@L-~c{2wNLYZsD0Lv1}uO0XMYyoq;T}>e?R`e!1w)sBlP`0ADMH_ z=ebqKU@(UM8x#J)!NK^xGc@0y7YIkvkwS_B0|Wo%9RBGdIc|6SZ)hJJTK5texrqR8 zb6HVO?*uK_z`)@D@c4@B>f(-<>g&m{uKp4zq2ll(^2%%Xe* z?xB2UA}Q=9sQ95st-1>K_7xY>RHHPtwY8&8obTRs!GW>W-%1ijOs%<-J>Cn&X(zxp zST*_i`Db!OvmM6%j_HQaDypiLUiYr57?XcsjuBI2SY#U&g@qdaqL^0(k+ZV|?9D5A zB3Vd6LV7JNaP}cwVO7!;J_?jm@C!zone{ zi+60Whrd&m81M<0q6Z2Pe)x(0xF8+h_e>cH|Mx(~O6>5zNtQ-=zU;vUI|)NY|6~O9 z_{)9i|L>aq-*m_x`ifeW==4Nk2OExAWy^5$e!~J`gDx=^X>uKuWR`9scC?aZpw)DL*F}x_bSYZ zJQH}jFO4XeG*wQS+mXTrL7Y$ z<3Q^;hRHdb{OQMr+PzhyeImS|zC|f$8gtB4V%j6_>oaH8j2d`U+tL$z7brYiFQy&@ zofzJ=?CKWHAyED^^t8YJO$@l2)zWhqmX(!t#=wW}^^U<6UyT`95FFpmb$-dm$45B2 zF>QC()VWDnD?XPyFtyp~be}s?kgWR*kPC1_CtuBU-kb7uC8l<1`X+&PAmf}7e}9{v zK^02##w^nGNNViH+;g-G%bS_#jr(D@f<~)>fV8xhrriGCWUG35 z@~{n~y+y#MI>YMPbqIv|-+4#yRub{Mr2RF0Q$8CoZ`$2Z%rg zHS@-o;h5p7t%D6@vcrlH`$Fh#OliWH|{*yJ}m(PG?eJ`bDjl!d7#= zXg+)DEJuuP{IXd3I1`+PEGHkH9XBO)HtNr`GSP8bd}1K`kh%B=q6rrlG8GEHg@o&6 zAy1f=nLOV$dRE&D%BYnXFF{v~36g_IK5iBei^(|ASdc(CPKrO3%r~SSS&|qWFX3(< z7Ci!zepF2xU#r}+ufOC9nvMH{VXOChPH)6?zX_f60~;33lK)4&{x?a5qpMv%fonTU z%vzrk)MdpD@GS;N=4%XS4tdI`YbymFai~9~%%I`r*xn>HIzcKtM?5f85?|S_{jhIW zE_a;1^Pi$>BhhJkkEPihi{4nN?X;E}23<%jIQ`6@+Mkn#D5D-V`Dj@N(;7(XYYRI# zo=-D^wFbu^$^3?TFh{Jh1*hrY?k(2x1(S7~|6b@XLv(GzJQmMskN05xve3x+dgSK5 z0aBGYIw!;_USPCWa;f~hwLu}9Va8RM44fie4hN^fH<_;x&JF1<_FS@GUkIL^7%Kh6 zss_D@nx;f`V7E3Y0YNNQlh`6=lDVrvFmBge@{Fp{J>8C8Qwu{Fyup1!lp9G`0CRZK5f`n)uoms-rKvG%?nw=6{Xdxj*l0vF=t-StM(kaugGIc7UF}Bbamh zS0&w&EV79>y%Fx1*M2E&q``cr#RnL_2l+*XkuT!4FFHFGB~_+&3IEx4&V{`Upfz8p zyH*ywH^%3a*=js5au7pF@#k*%`#^-yH?Oe#$$=`=e&(it7UWHBKW`l?;Imx}ow&iC z(~RxwKf-WWM(*3!L%DJM)>6d_C!D2*QyNdh~m_k-}}U@NNJ3!#gz_H zLaWx!%Q4%Gb|Gu0z|2P-Cw_Lm!y zneRjP08f?@ef2=@zpn3J`vCF`Q1x-dcOyt{YTWi+FxG%YKB(9G}D z|29v~Ndca=M@OGHtvWYlEp+?UxHiF}i2j|`oO;WhTk%!l{>+KWFAkM)eS20A?W2`bcuM4qI#@vW^ahy zVI?0z)*kTrS(__2FrR=3kHBNPci7>?{4UKU$0P>Vc(FHRhJ?P5E2S3f`FAlist#WZ znTPgaVQhuxQLI-g$4j-yXLjR4!aD&J52A+B zN1%thyQ@PneUfy|;zeD_1#N1A~+}?;&4bJQr-hMatmyBTjbDW=;$G%nM-bz zrN)r>@aHYa;cY`^C-f;k$A9o~&UehMN-P{%>0JzO9!EqE>>><<# zvJ=0?&%VMffm9LwoM6G<@(S(bv$eAi?dmmC`~BnEjZyJc>rGdUD^kKpYRwb$Cl65rohG^;$Asl!xXN>)ih!kPuB_;AcmYlaF`|6 zaIbeYo|fo~{leyj=o;{h6_3(x;_n!%vOERt59FHRRtcdc6%?tai)h75drg?RS2Yzr69sBC^cVpK`1t2xPN22hO!-+5A`XI8XsNhyCH1Mew4p z`GumS{{5)iKF30}JC`((|9loQ`$m>9;bHRW$t2{IHz=*sq35Ml!QgV|^>Ok-V?SOB zX|#GoFdA5082wEw2yz~wuv>gvxUD|T+ilQ>8VKG&OU<{J7K!ALx_wzk{chNI@u$~& zo28te^DKBDbPk6sdBBJF5)Ji=6Sr8T>pyZCqEn?wQZkvj1i~HDpTbCRBI5fH+sCi{ zkmd`2FZ9;gkVva7LA3QGSneXd!wyJ>3TxPH1~dnKgwnfbQ~59hyB`q2$3y)%%l>Iz zO<3CwvY*9#M`d)>i3g?EnnSC`y|tGaDD%`H_MdH(J^Ee@YPIZ*n~}!rxua8i^lY4z z{cu6!jmMy6)4)v*!6qzL;*X z(zS@z`){e_KxIjW#kJ-IORZL2jG{@ zR21{SAtUGRG_}a9Yl#e5q($4MZjB4*hh@S6A|W5(Wb4};h4)5j|tYhgs)ayU)5DbG)$P0L*mS>$KA8Zan=KvK+|-&0A#CARDZ(N@wWpdi|cY-tq}e1F_ezI zmlrd)ta;Rar7HT#`Cs3Fv2SVy-Dmqmt|2j^<~$xQ&VJWhi6b)ywW9y>^EZDgsjBu~ zA1|do3wFPlfEOip30yuzL|jk}TW}isBOLPG{EWrYYW_hd3*qdB-h^ESH}Oyq5?~wAuCUzh!k6JmGKq-up)SDB-d;25%=CPS%NukM4c4 zVbnN1TXR3C%y%=|MII#9f??4AeJQ{za%({Mi!(y<)zSNY?P!YCG|eM5+<+!+HJ>|- z6R-Nf!8m0?l?TqsrP67<+)D4!XE-ACgdGUXy(jvw$ZoJtS^3Vpp|R`T8VT>prrEV8 z!PBf(yZr=@PcNJ~Aw>okkZO%|c(7eV+uaybabeiW+5@`Jojv)|b-V#@V^mA8yL`4o z%9GhM%4>%*$CNjdHSml`cw%8)H3^oMLs;nSW7c6KY~!A2jT#LyZo4Z`BFoU>#!IzW zNk~FJ#MjZb(k%65vA6A!=yu&yhE}lM6Q= z@Ho2xK2oSIS9qe`+T=l~PPK9)JSHG2louoxJ{YM=zzLg^L3n=6YssB08 zAiZ=B{$c;vq!fW8Df#Ry4S^%>xFreazKgGO5yWIqR8)J!gS-tw$$&T0H+1&L^W-<~ z<{xKwtBrc=htoMi7cK~@%=azpj+P~LO>h@8csG~sGbd4$l!}F)Up`mi z-;=t~`?G^oN!-)T4^QXAl5ci}_AlV66eBc`sPvZE32tYP?N%30roX@~gN*X!u`>;J zwC(7fraya2C@o;tAl1f1bKc{wKAu?DZGUbbvfC(IDl<}%Bulh{oSpUSRaO^ZFGZ;S zqp2|E(etSv`y~Rx!|4^=aATqxEuQzru?jHuqTg#GEsb69Zw>~Fb-OisRy4k-II8pj zh~9B}^Y(f(dY`^lT_79X=o_w3`?GLYFQ;40rK@<++AujOF(q&u(Cy(>+gvSf|;z+3Kuxrn{N z0(u^&p_ov@g0u@}-LCf4=d&yAm~o6$HB0QVoGBgOy^I;l)Xa{dA!RvTcAd!R{6C$M zn%{f>HfFF=wYY+6#=jNk-;N7>kLr9`q@*c5NX$<5V?;$^w9d{QQY&;0M|SU0IMpd- z1JMEvvMB{HTQ4HOCRrcd8E+*RU6cK*THmRug%rt4vohQ8kyNPiB~!xmlCRxdAk8% zmW%zwOC8_nfAHY!N<$O1oiKTB&Ze0%w1_UD4Y$(-Cs_(`ODb@?l3d*umbI%+K_45Z zIUD=5ruk+sd>f(8rGHcL;7i_7ucVW<`%xmByuSui;qp0LQqm*Oa|p+;#siMkM{{y| za3&I6TTfPg-v(r7G?yC@Ng9r&ea@@qTFYTqL$P%~c7YO+%M9MfpC2LA%9_)$v|jP> z3pVoUmbC*!ApYf}pJ$uK+_$c7x3PxsFardHg z{L^b7cYQ8=j{8Qw8z%9QL-vqna_?Ww0b&Ix;nr@4+jG>VQ==t|i<%I4mvF<)&ik=M zjf9yQIZT2YTnXq+%n~lX>X@4&prBCToE-i4F_TbK#879q27Q1nlnU1nPVgM6zOu<` zpZrzaJ)t&G7b)FQUFv-?1I>ZxKR} zSFPpih5%p{>T1^M@`_mL>=k%-rera++z^OK{wUPOXwfsNb}`baaC((Ihhu5+?xKOX zCsT~m7Geiy-xp;y)dh;Q->?aKZGHjxdl+%lSKMwbxnC78s>!J}+jobKIhnN+uXh{D~A zou@-~+XMN~%}r>T{oeZiT3~XT+K);-^(@gxOqgfU)j2KiJ1}|byPHm`((eCN+IvSe z6}(-e2nZ@7DgpuqY;*yo_af4J@1S%Dy?0OqR0NbNCG-xVNJ0;YG^Hd!fIw(UhtLT% zgxui!yYIT?d)K<(y8J;_a^}o=X3mto_cJq3?7^^yhmFDftJV1s@qtMuNRAA7MTho> z>wVK*P@EZv<9e67gJ&ptc*4fO#80ho>6h7j)txxuySEUJ!4vw?ublgNE(d929!C8Q({cLJZqvW>x&az?On>@Qf11QVbk{`2CExNAIC0jNvaIh$az5iGTv8n zO%MNkU*cQSZMs2Mihde*`>6#>gS%=waeY1`KeWhOj2*!P_Lwu?O@7Ye&a$2X*>Atx z!x$xM`S<>|KVb6e(v34oX?S~RPNTEE$tL`+Q=eTxFWQLpP=KSA#cRbvMfgL)Bk9a6 zz>qrGj8FH}YY}5w7M91t|EW1hwY*f32B1cA|ma2jwvC5?A;%g2fTSK54HwCPschk=i}gAjUIJ#%5E zW8&_G(roN5R02~Sk{@Tcxr!mb@iPb=XcWK939UKYW&*;P^$UG|)dO~ROf=X2m6LSV>>jRQP19T*lia}ZII zDU{}_Qm~&whS9cb)JZ-BJN_ihb9fvNVU-hY8d@az_fPl7LIjHOFb(apuh1;YZ+)P+3 zP@Z2-&Zs^=Zhf$C5*ck%g99B->PPaUPN!>{*Q&2L8UOGM+m&Q;<}2eXgF)JxiW z2B(8tRsnBBMfI{9lCJtVeBXObotbx^;&XFOCA(H$h{kOz^j)KiQ^WR25d1~qbknOu z;?b`xZ}xxO5>qa$6Vc85o>{XJ`kNjq<7Ofi#n+t1waCx@i2GZv=wKOjW!+~mlF<9$ zfUfQA&#RY~Q5g-Y!T;KScl583xb+6N>1_LlME#ZFS!MG(5XS$_r%ykv($w_yl7RmL zZ_;a+iw&>9e1eZWGz&U`Y%;Ex7;;xUqfVMA^pXu}Btm{nY0~gmVi)NAUs1j6Q`Vs6vCPjyW2@gy zb&Km;&|Ldg=;v<&3AZ+g8pLE@1zlx%T;?y!W9jZO)#PToO{cr>Dkocmsd~HB*I9!$ zS79-i60=73ufwp!a`3q0ch3pY6eTNoRH77o?052g$+O2T@1dR#?O99y3_fNACCn*7Jvus7>Vl?P;+|Yrt1I0JO$n4NLGP8(-(r+n7~F?kdaK@5%%Z61 zL}vtPyv~2w7+yi(cRxQLF-g|e_2Y!ad@eE8$iw8wgKxII7L6xWT<&|0U0wSO?Ei?PP49R~2L=z{1OQqAYQ_XKndUeS8p_KgXnz3*VXjn74h zufk{Cwgs329C8vRyb<9tj?D)_^9b+9WwIyv4FDN;P!t}0@{{$jRF-!nH#hVpbHk?Y z*2oiymg79`yUxKuCzfuU2i(G2wR3@U;_ZD#Rb#zdIKwdC^dlBNW2zzULKVZEe8)8; z(!m7{F~?5D^_3mX8lEBdJJ!4UZ^53EkdRoiTzMQ^mC_bUy@kmGF6D7swE{R@+j1>_8GDq9nN;2mRNfV-sIGXqoTE{^YNyPV4@s-6G#uKK z4tB(=Nx!*jJuv&XuJodsrcFlJ0LA_FOL==q|Bdj($|Y;BG$fbPFmac!Ddx zJ*a{Qf>_mGABb>5r!nT7Ps@b=b8^+7xk0 zKe5b+(n2md&yQFhgck(8?K<9`;AO}u@C{fGEOK1tX7l^NK6f65f9?M3XeCTr)FL$P zOv!1**l_$OmF)Lmp83U*tH>RysWis$GDPU+y=6#ALUk^53)}WcVi9X&U&?A2WcYK0 zorFX#@nz%(79KWmBfM>236$QhIuO2Ri?`cLHf!~dHP@t<1pG>Sy~dLp9r@jo}x{(jD%FIT0JEmWXwit^WIYcN8`a0m>p9 z>DGjb@ZDhwK*K_EOqBWI37PB!;bPek;Hvp>op>HLA(VPxt~yCn)OodzLYRdg8K=&$ zCJH=mp<*oGKn8rHSPC|5AUr9izF%D58?K=V>dBTiD%?M~dv;faSxBSMn~8WZuB95I zg`FFJ-a&?!BWCFhKIM)HMkF9|pP31Z?lpc~>i35eB>GTs2jBY23Ue?eKh0eF?kx;G z5m#QLD;(Rnv4iNyvlVt+hum@dC~}2_q(#=s=Ph3$%-ZM8N!y`B!?7g{n=ZS-54-@w z=wz0u8Nmm9xT+G%gX?rF#g#`+jgH;N^3N16F|N;I!WmEZ^C#X&%A+~Ql`{?d8eQTN=sZbBB-I@RG4AzhFgf&M;6Nq zNJDxl=lG)YMiHBbPJT()s=TGpPbTs67?xn{8(7mi8L+$bY{Nyk$ev45S`ns{4F+}y zX{YCA+72CT4EOeA5-_EHdEe!^u1q6US1~R8Gx-<<)0$STkSp>#;rvsMR7&|E)&Lj; zG`l!G`#H$J{=HtAa|ms9INdSQ7;(~c%dv6z*VxBV4nAR)=)SP*8297s;8Ztp@&I6BOiDziqI zRT|3{_NAX&_{b2rB*laTaP%AK9oeGTi;kL>&it!LV#J8H{~K+hj@+u0}ZQc9Hf*^)O}Yl}EK6mx&xd1<3>lcK>vNt0cW=ofxu}h|BXh6N+y6KY?`wp_e#r3IXBhR&GK>l&a>rWI~Cl%ZHIh5aC^Aqr*sNl>a&leq#krwApZQ(82o{iM0 zHjDau_PKto+vX=>mJ$s*K^OLq-Jjioi;RZQjISrRm+j0QceHF3=;}r(5Qj?>aZa_{ zBZj`OuG>_O8?T!vv;;dAi>3!=BsCVYnH}!hNc)$WSm%Z%!vP~aobbKzP1IRw&KPr_ z(nfuwMai8K9lm#y{Qb(xdE|FUNU*Qu***xL5Sq|&5V4yNlYP6}&0uZf#-KN>O5O4~=iWoJ#G(xh z#!z415f8MAW<8;gfbb)uDwP=-%lqMQJs0jyF%ptBQ&P$DM{=*yN0Lcj$=0BNSL4WI zL66wjdM@JM7EaBlrFeJw9uLx7i2q4Qo{998z*Zg8KUUvx;w*-n>)rsVONgZq~m{1WEl!W=*6VzpgCoE%v2m zWnuVkJf+cZaeLP-6L!}0pETv=tNijs)c=3X{@*NgkWsb8dcD)eShsYO@BYO^=TYmo+qKS$Px+ulTV0i?b9L6>$p+DljrSZwnDi_fTeec^O^% zCQ6Eh=E~!igri%xH9bxA^-IUbqAfZg^tAKKl7p&)&Tv-t?6Hxm?jF zuHa|--fQHsj1wlt)VHYh-+g;i+Ea9$c-@JY^cB{m#H?K3ds6xvM9k2h*q$OMR1-)> zj7t@!MV!WIBZgUXttx2}zW!EpeC~Fu)%*7w&g8Uebi!TY{lD{~$hs*2lPyLOR_8wW z^VNynMsNl2^Ov{a$zo`Pc|Kc*Wyw5mkV#_OcjRSTB{r*PfCmpnDnbz_u0a41s($U-b@YVeg4(l~7xe$EOCc}g_!OI1=)a^^kzrK9mLe>v8R z^2t)OSRz_$dn>wv59@N*S_x2PaLcr7>tGLt~?gQ6|!9 zuCq`p;W1Q2OG|%_v8iG4My8o?AUI<#c-#b8QBi5AZ(bAAOEErfRN0?tq_3?k>Qs1< zj>##t8q-gd1rttJRt?s)+*N}KHkx>}2lmgo$2x5()@{1WFvMVbKEinV)&oPB@X;G7Wc2#zbsI7OCVWZMO`D`m?J zx3r;282h?}ge^a*C@S6?b|LpNrxaB>&13;{TCzK^+$FvBwgfHBf#{{{* zZdLlrBY1S{bc$M<^G^PgiiU_SPoW9pjW1KZ+c55$DnrfFM_aSwZCjSH++%H*?R>aB z>8af3AE>fI*0!qHh@<&nY=)*prhraqj-b_Qj$zeXE@j^nu_?Q!u`!vvXLyjHUui@W z;SQLeH(*udV8YlLk;Z^sjSVjf@@cP<>^L+W!maZk4o-*6z_Z#U+C5+_FQ!jAL&50X z_J;P|vTc0$LBp!l{`WGk8^orSkOa9>fS4|eGPjyI1I6pPM8s$K*0=j0U@ZZii9*M% z^}>&270R2hO6)9XJ8%9Dn}MEHI1Qe*oP6TJ?tR6lX14w1Z~2-6c`LD)RO$PhEq%RB zP^mvcl;WU#WesOWj5UYd7`c$Zyc_WQUCKYoi0?nFX_VE8vIL_GKhOM?n05t@MsqVw zXp?ElnCG5ArWyn_WJ2DzAS&_1{`18(N#wo2>{yY#9oN9;z)ENcMhUk2lgSMoZsL4u z>)ShQP<+T*i6JZww0MWMoAwJB(DF5#281p$pUnhyrKXL7tllNqrDp1u#W_Y8*E`Oa zV>oha9&KY^%Z#H~MmxhsKloIS4q2b2In3_?@O@j>C~)rmVyuBrO>hd5;A{D&!4KoB zDHirkiz%X6Ms~n;nz7xxCj%~c*}Husmw0W}Rgr%LIWS2+FFwa094lwzwAQzQ5(hC7v2keJ&S@+46? zY!Ro&qHSQfBZt{13xnu!NLt8ZzAzebr&{3tZT_CrA!1<&`j=>_J)xG)X zF|}^S#o^!+Gpy|KnlYlCaZHz*n4f3CQ$HSQZL<=JdkG^P{H^l!?S~5Z<7{(Zv}#y! zulE+QNhEx;*V9YM{9EH|oS&FrT;2i)Tuo9{%k-v<9}{P=DrR;+EoncDuL1V2-Gf0F z8iRwhm(ooQ%td_^$ZA}Pbs)F8Hbb(p@gZe@tt@xoP404uC*=9zZzG6 zan`G4cqTB`YHhu2Uu;IX+1^rMoi|kbe$eJ2!1!T($W)Y_`~|Fi`6~W=T7T1- z%GiBu#LTg|LNsFiS-_S-n8(P@;oO8H)Cmqfg0!+u&tMf4@p~{c!mrs({4$R(-p`>m zeLW#pCch9?J$(8^;f#G~z2;}KlGEf@zq6s4EZ@aL2VCyNDuYbv;`ZfiEf=B=J6*|& zaFV&lz%YP0tf;QmVq|1I8f-YISdhz53t%;}b+A6%VwSndcOP8ems3(jR*W{Zs=NtA zGv>DG*-{k$o_4yLcqn7Ifa_GwDA!$tc$&9!GrW@>}^%I*%CeJNxGcuV-V+`!{?(Y4QDnj*jG|j6FMK^=j$0 z_OIMN?;n>C=kMBXZv4ohPo~X1y4x940WQ~7bEpnJ+^)P(WN_MVB86h#i-;JRt#Tj% zWW?&Q5j5-i3g#T^-$%?SaLdDOYr;<;IG)JkT2-t6Bp`yqokB6dD%%n zXusw!Au1CB5|8CB?+cc&^0^#ZNUkaTuQ8_ir}aFF%LK#q8Ixb`Ucw%d$oT)Z|1uAf z$!oX&-JKj_k|1{xtcC za>C^CTAqB=4A-S4=#Alg1|!bE5L4^ zQI*w9uY;EM0#htzX^8nO1gs4|A_DWy3ysJRM5%#{SahcGu`wQD;l3NS zqqF6f$q3_`-d=8d`(hqZ(E-q9ZFbY&f2cPW$x>NTQesXdL#k1#ajLY$3&UnyB`!?E zv_Y`=*~em7LFX6Fmvq9cQa$aV$Y!`A&1^v9b_>o5e+nggtp0goJpt6>+b2YPwR!b{ zmnd5h;Oncw+%1t>9ibKx7z$OB@#eU?Uc8WK4MrfE45FvDi@tF~Pyg;u3}!(HN>(LXdqecw9;lu@1XK2tt8ML4)3yzN|EnlNMAg4y`m?~6Jn(&QhM z%+RxdV~nI=1X#2Z17egLEkpec+X3QmI~7>#9VcA-lZljTMA#@YR#DyA_O1(b*%N$g z;ncVJPZQE)>t1Th;vtgfR~pngi(c#lX7~Q7Cny?KyrGvaFSLF#VuI{ z$M_DNRV%-@TC&cO!fZqlI5=n-0mV-Fp{*6FpzO#Y!GjwcF0xVLUT*gsEY( z5{uBa?2&hi7|6IlPY3|O?mAsxX%5eT4rpL7uIq`*?!@|JJ0N%!1ds@AgIgZw&4u8F z-9oqg!UBsrK@{16>tu*wLu<1`m z-TMNzKUQdl9o~W1jL&0xza}4+Qz>)znS*Jp!_;I6dxW(_1gx4Sl+5plQL#Vp`1lOL zdZAWn6{x!-lv6PvGoii%zJP@{J4H7Dz<&N|kg^bNnlPqVWzD0wj` z?NY(f7)x}v7ndl_r`6P%;TmE2q6C=fw9HKLlX1NUD4_~#AX*C?Zg0FOK{W!5f;--9 zY}M>o5WY5epv#6rHiVo!W$lYp{8B@(aI{}=NT0~o^R5>)vyTiCpuDlp^%%Z`3wk_m z7A#@1uCM0Se3T}RNikY-dKK<*in=yFY2s`=d)WXM?DuDiZACm8F!B5)jm$2s^zIJ?HY=8OY>^PCi5tMPjawN4W{M0uaH%;L zjvxCqW7XRw05fOrax9L_!93!560Ifm+J>yK%JI1H0>z8J>wet8Gx@G-CMzTM=#y>t zt><^!7Cd@#bZ6PmX;j)M}0 zZ-Zubr19%}5f$H$IW4`n;#>9?75mi>${Jjwa!gt^soU=zGD_{n% zn|AExAnyKb;3|XfayOOm_TUIpHcBsps^t@$PrfRAM-{*Sx6d$O1KP5mr0#do^nz(~ zs#H`IR)c+0y1sNSqo%HEnEU2QYM5QJRq&R=a!zPTOi+N+VSgXAe&VT z?h`g%^RU>2v5Zxa?JNc=u{4AVT11QvTQS0K@oEly=1M9(s@0?78yl;vMivo2gH|oe zuG=Dv?p$h0Bu>h2**<`nABJx_4CP8&8e4>y^TEcL*tJK49CNDP24(CA3XBJwJTKlx z=ZUHf7}o8OrM3}r`V$=1Ayl%J&M2$0JFwBs&;EgtVtV+qWuTK)>IMGD{Orf}xNVy| zNYav4o1a~5lbwhUtH#W=pN&~d=Z-XXgch=A2gNAS(E-O)!>}W1#)tW(a*l~i`J29p zQWGL)G%R_xY?X&Al*+zsn*g`Dd2I&EFi+eWe_zbRR>mtw>A3!#N`QFYB4F&uIHAIQ z+S-pmjE_}x z0+%6S@#v0=#NgLMTH``zDS{X3XFr$4)%I9W=22ls_ zp3Sf^kzJWrPr0=flu9{6`eA2XwuIqiZCF_;X^is4K|RyNbVSXmLD-1`Y=7opKLOuX zqRm)6gdix^q;2YlReDG#;yXSq8diYgPq@P_O|uM=%F()Y+xn!u#PXQYGVE|%vkN>= zD7Tu?EzX41tko?8p@b&~EN?@@-mFl!obB^(U}p^0hg;FRiK~Zal*`|3`snSk8>Qi} zV6Lv}xU&S7(=+O`%|p?RPU_{O(1+m)zUXM%l+y(d>@PvWSQ>!UWtAuim@8Lq*oC8> zw+Y7{t_XIFZFF^E%PT!5#s=6i+3nNVMuv%sO;0GD43o^bF^e~9zC3D~uA)Y~Br0TJ z)0vXz<+~q)7S#P)gu8vm<*E6;j(GxdH3nXMQW6xVq&_;oN^&MPJk#@LiRWJRKehE_W+OSKP zEIzkoug$^@k0Cg99=nf&0^q)}&B6On8bddt6GYFRIc@#7AC$>wMDy%~3zj18+QxT^ zJ?#(1aq$vxSrTTBylY@odwksN;m#OY5*n*<>#Xfl(lL518Qbr197rg7vI0n4^_d2%{7gml;S7W9pjPWPbfKu zHV2c7JEIkuzRp_*!6?h~oKln+ax3b4L8S#(){pk`FdJBg<Rl8gAnM1w*^}?EZOVZ+FwbuO+sn zg>2%KaV_Bz+SdUjd{vl5T*a>Z2U)Aek=&8~=3I&f1vd#h=Wp>66PYCve=~A%$!wdG z2&lsRH@>_~nzlYz{ExY~fd8AhyrdK+-sMCkQ7)f8G6x#FzruzsL6!6>9h{|9Gd&I7 zOzO(ceqiq~YR*qgcb9fjm6|BceopwuHX?HptTg_yjyL}U`}p5R^TdacL=M$^FRSG$ z>X&L6Dkww|xm#*R#`>k4tf?8_W>w?u?foC7K@<|rh&A%1Z_)YI?VZ*gnE;W?4DvXd zG1aY`Bwx8pF2DZ2B>duUN0;6alE|E)?wFK^m!0c>)boRks!ZM->vhHL6AKzFa*(ts zA4O44l#|npMVv$e_q$ zIU>bZS7x$+udA=3NH|EZJSIL>C~)^RQS@%M6&o3ZK1Y$S{g+!oXTCjbR$GPMf;Riw zKR-k5^n=IEo|>MIZ(mv)dE~D80r-ygEy z`d<>=#fgkbd%Jgyq|66U{HW{gGtxTVQjR1f*(yZ#DRw2}=+B${RBDCM`luAX+nyOX zSF8NAp(dil$186Vesu-pa8ZHt+RX1&DvH?e zzru)^SFWnhTnF@AbQZ#*ZkBdeFk7<_sZI~k*bh~9UrTf!$GYd)jR=K*BmI}xWqn`1 z6fLPnu=#7ro?7kzO_2XRNkFm5z$=W(&u6wPl5UCT(|(ndF`NAR{+Y)}A>#Vb`wh9v z^%SeV@MM8zX`o)uPbA?F4KaNQSgvhV5E#=(EVtwlqziMhOl-_5_ z|5L5=_~jCJwbwjT3JB8e6>mF(If4qKO4g-%wj(*DG#~Y)$uVVz@SM-|M9dY; ztHY1h4X%+4OW%ID@cz4?k$P#RZ@3(D&naf}rccq}S+I?GhKitpbl~aeOWx~~>85;~woZ;x=`O+Rp#hcwVYGHvuRg3+rOG@Obo)A}JGFje zO{~}%pXQUt#~~x7*ov~za6ido; zZI4nyBw&8~TOl>B)^vbkt1I*SGRJrlMo8IkVZK*NxHLXH7cr@ce_ol{$;U5wh0Uu-+ovSrMT8Jmb(ZNnCiCy z>%X2u)-0VuCo*a2ZZ}S;1$5_<@tEU6bsQjev0TTT`s@CVQs21*KsFTiAMk29DD;=t zqed-H#E_U0psJI*S4cVZn3OKTx9>@9$dW~4Z+}G$=hPhw0aQ#F`SmKMrm_BO9N()O zD#x-DgSK>_eAowPHC;)=kw2##<;S8lTxVZxmp=zL#V#6`K=Uo@V=Sy!!%gqfe{&7E zyO97@{0z(<4l}6;)Pf>;+{&S=xAPHl%-#5G=(-Gf@Lkcs7Qu$9-Oa-G%im%RA8fZ;Hynr0ShtjI4NuS#5mzajF z9JO;6ckONb=vX@>$b{+OX%Ektu-2N)=X=;_FXX+WDEW|21aTlT>>Bodm*0?dqs!)s zGB|P_goI$Iz$C1V5{ZDu&;H` zb^WtT$al90)#-B4X4q#LH-_MgI;Ob!?k{qU4d_ zA2l)Rw5Hs8cw2fTpK}u&kWO?h=3eI!cg^7Py6N1|;q z$J^8$vEtimMwu}8=rpWvdlFtXA#5xcMP@L(A90KyB&q){%qxc;C(S1F)HKU!3!Ph- z?!7th9N7i>BFF+TpTbHcDmno3g=ndxi7&U_SS&iMzuof?;t$zz*%BQ%i|UT|cvU^; zytUe2H@f0z+(Iky$sFcSaFIspQ|XNG-npD8LI_zN_T!|}Cry?sxwU9>qmqEkj>?M? z5oLGLV=tDJ@+48)jF-Wlpz_h4x(VxIafkVfjIa)JvrdHgnPCj+yJ?-@=$$@kjr+y zMoW;9Sh6AwF1xN@qtotOdEWrwR~YU_+HuY!BwY0Hg>{y%$Di-5#v8;?(P_O_>uF5x zV}g~(JcLi>^3oq~$p&OYw;f<3SLDqv=mIEHoZw0H=5H~HMxXW-d^vLHc#KX4V{zN9 zh#V40B6~N%?`Ft_7>}IW zjf?C>*6-*JOUIcM77_kM0YhsKK*9L&g^KR2NA6i7Zr-w207OW+{hd%uen&30$u|j7 zHD0VDcdhkR3vI9f#qEyS5Gdlz@z?ORcoGF_)`~~leg06KpBtJ#9cNe);fe+av=ooj&EQ9}k+dF#bCb`O6D394 z@UJ;VzqzvFpaF?E-B#$nss5I4o8{10wN*<*vQ1BH>oGbXZ1%}5R$LnKsz#zEqBzUjm0dGWf&DfVF$;K7#8vZRO;>Q1yz4i&*vcOCV#qK8Gw{q*c#kT}4 z>sToTK$W!M(pEFrvvXc|1Octz{CNGFLQZ{2zTaxGErN>#dz1Ww$_@5pX0C(LQLL73 zXgNDwiu2UMHIKCfks7FmC$ZsAz;`cF zm(!z8gApRViI((L7Aja0V%ICg>wyv5rFi082kCP|^$ADaANXMt zUt5Z8Mo23crUZrSTr*Zg+z>GOt4QHWXCLBLy1V11t1XMjMyE`=o85p~_ShsvWEF`+ z0`nO3E%Ohs+dThQVs!w?kGx<;M#kMeT(7b!>*qk zH2H^H*g6^Qlp#TGI^WeQUy7Q1S16v4jlLpVoL*%{*D#+1IMTb)(Uk6Fc+$J{%*ZbK z{)nq_Ih_fcL(vVYB0qoC$m@?K%+J>W>krB-^ylr8V1m@DnAlMKno%zbdgDe()`%&R-4EB0ko?|n1r)oYvYzm#s<>kb?0l`l zy;;rYaT@tk&YwZ9?IpU^_M}EbA9Y>q(>LFj%C?h8p3h7jxBEN+=7h}Dxnw9>mxADa zm9N@Ge@06klvKFB51DPxasPQfP7P9?BND%lH^NuCDy@~P(wMizeL8@dG4~lti^JYa zvwlq|{C!We;cg2YfA?dWe@N?5J^kNowEC;tTR0wfFDZ`~a7$#Js5A;L?5QT2&b5uM z**^Q5&VJqsEymE|Jfe9zarve^7jQ;@^kC3+@%inu&SS$q0=TTI%2)Q0>3{M20$Vx_ z)aYR{wAbC(hT1)(xkPrYaz!Y8si|0^Bv>a7Nv2^|dr7~hp)tE6jw>|VdYb%)H6GLx z7n&@x5L)1=BBN@Ens^Ne?8Fvt*Hw)&@c^zS^Fb$WExD?XsNLE8Y_;j) zq_5#F=-?;7q0eL_K;NA$$W!P7I`~1-ZKs!}#ZT>o5K$Pg$^F&+O=E0yT~EJNc2!Ek z%!hYT)kD4CfGK~?Eo5w={?{s;+(%0ybDFI8#s4Vv@C_pfjjf;H4tTw+bAhGx2<OID*b0BJ!T(Rx;$_ZU`j$==Uv5pxODwC*#f4p<5O!bY_W_gl|=g ziGkZyw$=}apy@Bhl|XlcQ@7WOMm1N@26-&#hjS*{A8kcS>6|;?7(sXVXb!^Ma-TZp zm=0HU%$&{fS}gE+Oo$FB;{N7u9c|C@!LuJw0*-T!u={))s za3<}jmBYAAD?Y2kWv!woe+%`@UDa@S@2UW!8;`zagRA?Pixa!PphtmU&Z<(S){4V+ z6ngyh>cu|HAX>d@P(_9OkHLTi?U%ndJ#r^RCSFWBQ@blW2^hiiyPMM96cjhc-?#xT z+=~m_*1E^B=EQO?oA=acBQx+UyCV6ZtGaM1!aM_47<4=#y%w5L2Gx8_MI5?Gk+$u$ z+5BHm)Ls5@W!hhq#_1NqedJz7F*0lUqGn}3AH?JR7@ES6N(k~4T46z~+%)mr>8jPC z@}ErSvk+qU14;U9>ULzEXUo9}wlR$8qo|mHh%nM=w=7#>`E1D*m4}*d&=&!GP959x ziSOR&4be2oZgo7F5Kc53fW^DGxIk?CZdC}gU-6;-ZyjvSsTOWu}FZEWHlbFb|@}=*$=>Id#y3GgI;EN2Avmw;pQ6xRlSPaj3=K^8c71 zo-?eGl&fz)!m3i0@gPUM9s&HrzX1MgL`yYDB7zrStuGRK3uF|8x!oJ9=09o%>Ou}i zt_;#}va9fXlNo5y2ONdbd*AGg{o-^sqc?r6r$$S1s^NoYgeyO^g#H)d8ymOHm$W}3 zTcfx(b>tgi;x#yh@pKQm1b;;gw84$8NaBhaXO8sSr@8g_Sy`HMCu7dJ4 z1S=mk{b_|bRG-`Y?9+UqXs3hu=3!hX7(Tb{_F+-q%Bq^zykWBQcaC((=G|v8#IQBu zqN{TjWInu+m)hU#x8%Q`70Y6b)00=UfD)y9gnhuIWh{V4T(*F%B#_(x~_P zS=AQA#LV`cuIRPzN2q-pEvP1~Q}1+rE?3ZgdiNP3ZB{T(c*GzJO7?NW0OOsu=tvF8dKgU9a$i@3z^!*?;7_A5YDcYY`#O2z@w)QHd!iLZTO0f|&=K{a&;h${_Q&cvTE@?@M>Q&I$4f#9j zce3S>)qE09`WrTrI7-i!K6A={LFV+9H)J^dxwD7zXavOLG3~P}C3y7DZu6FVTV@Sx zF!{&W2N+MmtQTl4sP^@seYF)V6qYi|@69~s>0V3Q_y_KcR?u;FOWCPelQ&(0$C?Gt zWgl#Yu8PlJ?^LMj^GHQ&p zs?&9UE#%|Ius6?3>zVY2glxFp%^LNR$BxVs>}!DUy2{2m@LSF=(b%5fd|be~;N%Xx zmSp=cbaij4+;nCwaH;`I0nFFWH*r(496`)}q_cKZ8d21=PBDHviQB&S_t;(?moTO@ zSY5yv096rveJhBvybCX5*4PVZEP3y%Mcb&-nGzx^Lg_csQCL7>KN5al@MUh}t6Y?h zKXWTl5&UAJ`M#FbZF4c9x(7qs;%<&4Cz-u=<#EzW^@whBc&KR*Xr1aEx=+K@slvkS zijn>{@Dn{nDt!z#XSLx9utI_k?52|v1m{P*Wu)RMYPkW3wY`WVCU&tvODDbbz9(H|WOY`MLxj#y`?z&#Q&j#9nQ&!RA| z{Qz!A9`QUfl&_^6O^#QNq&ZL^*KM#CZgoHV)IWhYA*7EVj-6s_)P(t^i2?fFHyA@3 z?2iCh(??+FM=NM=3)M@~L?_&>mR@?GsXnY#{MYyD)^Zt^Vl}_t1Y`8mxQQ;oW- zA1$n=N#0mNJnCFID{m(hXzev)aFNN}37b_i5rqp~o!|NR@#y#_Nz(PpYDBVnwa&)k z!a3E|k@ohW^dXaimyKbc8CNug#-m=U&1*0$Z-=%n-bcEHQ29j@8~JVMBIPmau;e%$ zEIOMS+aT}ToB<)_S-ii8I?G$6en5(Jr;met7ACicKZcZg#g_C`-SjK(u*{bfn>~z8 zv!U=9FfHMAJO6n)ElyGFmXnFl9|STg2QS*ADd8sUJfd6fPkvr3$ONR73_6nbAv66* z=_ooDeiE2s=-mmPAB*_Elz-Z+Nm{c;wWqH+a1t!`f)r*9}`r9W>3y%{LJCU?99iO_&IWB{rI8yw7jdm!M>q)^P|ZGA+a)-$aD z!dG>Xf+6+K$d9i!{bS@%_G)b}fiX%ht&@e{xCa1}v<|p1*@__U8cDUeusz}U=hF(l74asYOG@MS;2=afhML*o|4bWmlhK9%wCPGA9yJ?M zR95!ug1D`V=&|v+M^E3sxc93&h6@&a_&x3})r}hl78aX)|FT=#R!Vr_-1m-MZgaM^ zQEwE9w14+Xf5-RyWN%}-v8I*tGLO7gfh+kRui&ujwh>zD>iVBP-a9xr*kS={i7(#+ z`M|}u7cP@UZoAAhc`*sQqyVUhjV4< zgh0YvbN>(=f-BlH89)=-4>u$v<%HU-N}txXw_C9Sc#Kc?ZiLL7B}&el!gJEd&3x_~ z-I&$>&0z`$hN!M!eH(qKed(k^Kz-+TZ{{5);ThFd7BTMgvMiFmY8v0ONeR&BZ*zy3 uM3KSE%Pw;BG6MLKZ+j{C2;N+0ge%?9;@80{l1G;&sw!%|s($(U-Twhth_Fcj literal 8435 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ÐxTGMs?~ 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 Date: Thu, 13 Oct 2022 15:46:40 +0800 Subject: [PATCH 093/482] Changed font and tag color --- src/main/resources/view/DarkTheme.css | 44 ++++++++++++++------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 106314a106e..eb351315ff6 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -5,28 +5,28 @@ .label { -fx-font-size: 11pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: #555555; -fx-opacity: 0.9; } .label-bright { -fx-font-size: 11pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: white; -fx-opacity: 1; } .label-header { -fx-font-size: 32pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: white; -fx-opacity: 1; } .text-field { -fx-font-size: 12pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; } .tab-pane { @@ -66,7 +66,7 @@ .table-view .column-header .label { -fx-font-size: 20pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: white; -fx-alignment: center-left; -fx-opacity: 1; @@ -122,21 +122,22 @@ } .cell_big_label { - -fx-font-family: "Segoe UI Bold"; + -fx-font-family: "Georgia"; -fx-font-size: 25px; } .cell_module_label { - -fx-font-family: "Segoe UI Bold"; + -fx-font-family: "Georgia"; -fx-font-size: 14px; -fx-background-color: #c08189; -fx-padding: 1 3 1 3; -fx-border-radius: 2; -fx-background-radius: 2; + -fx-text-fill: white; } .cell_small_label { - -fx-font-family: "Courier New"; + -fx-font-family: "Times New Roman"; -fx-font-size: 13px; } @@ -164,7 +165,7 @@ .result-display { -fx-background-color: transparent; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-font-size: 13pt; -fx-text-fill: black; } @@ -174,7 +175,7 @@ } .status-bar .label { - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: white; -fx-padding: 4px; -fx-pref-height: 30px; @@ -192,7 +193,7 @@ .grid-pane { -fx-background-color: #F4E9E3; - -fx-border-color: #DBC4B; + -fx-border-color: #DBC4B2; -fx-border-width: 1px; } @@ -214,7 +215,7 @@ .menu-bar .label { -fx-font-size: 14pt; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-text-fill: black; -fx-opacity: 0.9; } @@ -233,14 +234,14 @@ -fx-border-color: #e2e2e2; -fx-border-width: 2; -fx-background-radius: 0; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-font-size: 11pt; -fx-text-fill: #d8d8d8; } .secondary-button { -fx-background-color: derive(#B1C5C3, 30%); - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-font-size: 11pt; } @@ -302,12 +303,13 @@ } .scroll-bar { - -fx-background-color: derive(#1d1d1d, 20%); + -fx-background-color: derive(#DBC4B2, 50%); + -fx-background-radius: 5; } .scroll-bar .thumb { - -fx-background-color: derive(#1d1d1d, 50%); - -fx-background-insets: 3; + -fx-background-color: derive(#F4E9E3, 50%); + -fx-background-insets: 4; } .scroll-bar .increment-button, .scroll-bar .decrement-button { @@ -343,10 +345,10 @@ -fx-border-color: #DBC4B2; -fx-border-insets: 0; -fx-border-width: 1; - -fx-font-family: "Courier New"; + -fx-font-family: "Georgia"; -fx-font-size: 13pt; -fx-text-fill: black; - -fx-prompt-text-fill: black; + -fx-prompt-text-fill: #696969; } #filterField, #tutorListPanel, #tutorWebpage { @@ -364,8 +366,8 @@ } #tags .label { - -fx-background-color: #3e7b91; - -fx-font-family: "Segoe UI Bold"; + -fx-background-color: #C3A288; + -fx-font-family: "Georgia"; -fx-font-size: 14px; -fx-text-fill: white; -fx-padding: 1 3 1 3; From 2adff0fa08ea81b1932540d5f019dd127cd9d070 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Fri, 14 Oct 2022 12:48:15 +0800 Subject: [PATCH 094/482] Enhance UI --- src/main/resources/view/DarkTheme.css | 7 ++++--- src/main/resources/view/MainWindow.fxml | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index eb351315ff6..8fe80606b9b 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -202,11 +202,12 @@ } .context-menu { - -fx-background-color: derive(#1d1d1d, 50%); + -fx-background-color: #B1C5C3; + -fx-background-radius: 4; } .context-menu .label { - -fx-text-fill: black; + -fx-text-fill: white; } .menu-bar { @@ -240,7 +241,7 @@ } .secondary-button { - -fx-background-color: derive(#B1C5C3, 30%); + -fx-background-color: #B1C5C3; -fx-font-family: "Georgia"; -fx-font-size: 11pt; } diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 5f00852272b..692b5796488 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -24,7 +24,7 @@ - +

From c588b4400de11f18fd28d30a6624b09451f5a1d6 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Fri, 14 Oct 2022 15:26:33 +0800 Subject: [PATCH 095/482] Add placeholder panel for tutor details --- src/main/java/tuthub/ui/MainWindow.java | 21 +++++ ...{TutorCard.java => TutorDetailsPanel.java} | 13 ++- src/main/java/tuthub/ui/TutorListCard.java | 87 +++++++++++++++++++ src/main/java/tuthub/ui/TutorListPanel.java | 4 +- src/main/resources/view/MainWindow.fxml | 19 +++- .../resources/view/TutorDetailsPanel.fxml | 34 ++++++++ src/main/resources/view/TutorListCard.fxml | 25 ++++-- 7 files changed, 184 insertions(+), 19 deletions(-) rename src/main/java/tuthub/ui/{TutorCard.java => TutorDetailsPanel.java} (87%) create mode 100644 src/main/java/tuthub/ui/TutorListCard.java create mode 100644 src/main/resources/view/TutorDetailsPanel.fxml diff --git a/src/main/java/tuthub/ui/MainWindow.java b/src/main/java/tuthub/ui/MainWindow.java index e6f2bbfbe6b..e3f8fb51364 100644 --- a/src/main/java/tuthub/ui/MainWindow.java +++ b/src/main/java/tuthub/ui/MainWindow.java @@ -32,6 +32,7 @@ public class MainWindow extends UiPart { // Independent Ui parts residing in this Ui container private TutorListPanel tutorListPanel; +// private TutorDetailsPanel tutorDetailsPanel; private ResultDisplay resultDisplay; private HelpWindow helpWindow; @@ -44,6 +45,9 @@ public class MainWindow extends UiPart { @FXML private StackPane tutorListPanelPlaceholder; +// @FXML +// private StackPane tutorDetailsPanelPlaceholder; + @FXML private StackPane resultDisplayPlaceholder; @@ -147,6 +151,23 @@ public void handleHelp() { } } +// /** +// * Displays a panel containing tutor details +// */ +// private void handleView(Tutor tutor) { +// tutorDetailsPanelPlaceholder.getChildren().clear(); +// tutorDetailsPanelPlaceholder.getChildren().add(new TutorDetailsPanel(tutor).getRoot()); +// tutorDetailsPanelPlaceholder.setVisible(true); +// } +// +// /** +// * Hides the panel containing tutor details +// */ +// private void handleHide(Tutor tutor) { +// tutorDetailsPanelPlaceholder.getChildren().clear(); +// tutorDetailsPanelPlaceholder.setVisible(false); +// } + void show() { primaryStage.show(); } diff --git a/src/main/java/tuthub/ui/TutorCard.java b/src/main/java/tuthub/ui/TutorDetailsPanel.java similarity index 87% rename from src/main/java/tuthub/ui/TutorCard.java rename to src/main/java/tuthub/ui/TutorDetailsPanel.java index 67e0c2b4638..89c7a8aa508 100644 --- a/src/main/java/tuthub/ui/TutorCard.java +++ b/src/main/java/tuthub/ui/TutorDetailsPanel.java @@ -12,9 +12,9 @@ /** * An UI component that displays information of a {@code Tutor}. */ -public class TutorCard extends UiPart { +public class TutorDetailsPanel extends UiPart { - private static final String FXML = "TutorListCard.fxml"; + private static final String FXML = "TutorDetailsPanel.fxml"; /** * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. @@ -26,8 +26,6 @@ public class TutorCard extends UiPart { public final Tutor tutor; - @FXML - private HBox cardPane; @FXML private Label name; @FXML @@ -49,9 +47,10 @@ public class TutorCard extends UiPart { /** * Creates a {@code TutorCode} with the given {@code Tutor} and index to display. */ - public TutorCard(Tutor tutor, int displayedIndex) { + public TutorDetailsPanel(Tutor tutor) { super(FXML); this.tutor = tutor; + studentId.setText(tutor.getStudentId().value); name.setText(tutor.getName().fullName); module.setText(tutor.getModule().value); @@ -72,12 +71,12 @@ public boolean equals(Object other) { } // instanceof handles nulls - if (!(other instanceof TutorCard)) { + if (!(other instanceof TutorDetailsPanel)) { return false; } // state check - TutorCard card = (TutorCard) other; + TutorDetailsPanel card = (TutorDetailsPanel) other; return studentId.getText().equals(card.studentId.getText()) && tutor.equals(card.tutor); } diff --git a/src/main/java/tuthub/ui/TutorListCard.java b/src/main/java/tuthub/ui/TutorListCard.java new file mode 100644 index 00000000000..a997ee9b3df --- /dev/null +++ b/src/main/java/tuthub/ui/TutorListCard.java @@ -0,0 +1,87 @@ +package tuthub.ui; + +import java.util.Comparator; + +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Region; +import tuthub.model.tutor.Tutor; + +/** + * An UI component that displays information of a {@code Tutor}. + */ +public class TutorListCard extends UiPart { + + private static final String FXML = "TutorListCard.fxml"; + + /** + * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. + * As a consequence, UI elements' variable names cannot be set to such keywords + * or an exception will be thrown by JavaFX during runtime. + * + * @see
The issue on Tuthub level 4 + */ + + public final Tutor tutor; + private final String studentId; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label module; +// @FXML +// private Label year; +// @FXML +// private Label phone; +// @FXML +// private Label email; +// @FXML +// private Label comment; + @FXML + private FlowPane tags; + + + /** + * Creates a {@code TutorCode} with the given {@code Tutor} and index to display. + */ + public TutorListCard(Tutor tutor, int displayedIndex) { + super(FXML); + this.tutor = tutor; + this.studentId = tutor.getStudentId().value; + + id.setText(displayedIndex + ". "); + name.setText(tutor.getName().fullName); + module.setText(tutor.getModule().value); +// year.setText("year " + tutor.getYear().value); +// phone.setText(tutor.getPhone().value); +// email.setText(tutor.getEmail().value); +// comment.setText(tutor.getComment().value); + tutor.getTags().stream() + .sorted(Comparator.comparing(tag -> tag.tagName)) + .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); + } + + @Override + public boolean equals(Object other) { + // short circuit if same object + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof TutorListCard)) { + return false; + } + + // state check + TutorListCard card = (TutorListCard) other; + return studentId.equals(card.studentId) + && tutor.equals(card.tutor); + } +} diff --git a/src/main/java/tuthub/ui/TutorListPanel.java b/src/main/java/tuthub/ui/TutorListPanel.java index 925e15f6b1c..839617d80fe 100644 --- a/src/main/java/tuthub/ui/TutorListPanel.java +++ b/src/main/java/tuthub/ui/TutorListPanel.java @@ -30,7 +30,7 @@ public TutorListPanel(ObservableList tutorList) { } /** - * Custom {@code ListCell} that displays the graphics of a {@code Tutor} using a {@code TutorCard}. + * Custom {@code ListCell} that displays the graphics of a {@code Tutor} using a {@code TutorListCard}. */ class TutorListViewCell extends ListCell { @Override @@ -41,7 +41,7 @@ protected void updateItem(Tutor tutor, boolean empty) { setGraphic(null); setText(null); } else { - setGraphic(new TutorCard(tutor, getIndex() + 1).getRoot()); + setGraphic(new TutorListCard(tutor, getIndex() + 1).getRoot()); } } } diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 692b5796488..e626d283412 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -10,6 +10,7 @@ + @@ -24,6 +25,7 @@ + @@ -33,24 +35,39 @@ + + - + + + + + + + + + + + + + + diff --git a/src/main/resources/view/TutorDetailsPanel.fxml b/src/main/resources/view/TutorDetailsPanel.fxml new file mode 100644 index 00000000000..83eb802b8e5 --- /dev/null +++ b/src/main/resources/view/TutorDetailsPanel.fxml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/TutorListCard.fxml b/src/main/resources/view/TutorListCard.fxml index f4797b0b50a..ed2d4fa1123 100644 --- a/src/main/resources/view/TutorListCard.fxml +++ b/src/main/resources/view/TutorListCard.fxml @@ -6,6 +6,7 @@ + @@ -17,18 +18,24 @@ - From 4b49427e6a9f2a19203c130105a7cffcc8c34975 Mon Sep 17 00:00:00 2001 From: fannyjian Date: Sat, 15 Oct 2022 16:49:21 +0800 Subject: [PATCH 096/482] Enhance UI appearance --- src/main/java/tuthub/ui/MainWindow.java | 10 +++ src/main/resources/images/tuthub.png | Bin 0 -> 110637 bytes src/main/resources/images/tuthub_32.png | Bin 4214 -> 56148 bytes src/main/resources/view/CommandBox.fxml | 2 +- src/main/resources/view/DarkTheme.css | 65 ++++++++++++---- src/main/resources/view/MainWindow.fxml | 82 +++++++++++--------- src/main/resources/view/ResultDisplay.fxml | 2 +- src/main/resources/view/TutorListCard.fxml | 8 +- src/main/resources/view/TutorListPanel.fxml | 2 +- 9 files changed, 110 insertions(+), 61 deletions(-) create mode 100644 src/main/resources/images/tuthub.png diff --git a/src/main/java/tuthub/ui/MainWindow.java b/src/main/java/tuthub/ui/MainWindow.java index e3f8fb51364..c6a657f7c34 100644 --- a/src/main/java/tuthub/ui/MainWindow.java +++ b/src/main/java/tuthub/ui/MainWindow.java @@ -1,11 +1,15 @@ package tuthub.ui; +import static tuthub.commons.util.AppUtil.getImage; + import java.util.logging.Logger; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.MenuItem; import javafx.scene.control.TextInputControl; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyEvent; import javafx.scene.layout.StackPane; @@ -24,6 +28,7 @@ public class MainWindow extends UiPart { private static final String FXML = "MainWindow.fxml"; + private static final String TUTHUB_LOGO = "/images/tuthub.png"; private final Logger logger = LogsCenter.getLogger(getClass()); @@ -42,6 +47,9 @@ public class MainWindow extends UiPart { @FXML private MenuItem helpMenuItem; + @FXML + private ImageView tuthubLogo; + @FXML private StackPane tutorListPanelPlaceholder; @@ -114,6 +122,8 @@ private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) { * Fills up all the placeholders of this window. */ void fillInnerParts() { + tuthubLogo.setImage(getImage(TUTHUB_LOGO)); + tutorListPanel = new TutorListPanel(logic.getFilteredTutorList()); tutorListPanelPlaceholder.getChildren().add(tutorListPanel.getRoot()); diff --git a/src/main/resources/images/tuthub.png b/src/main/resources/images/tuthub.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca4db4ceb1fbb4c28b49e3fdd783ad73c5c2b78 GIT binary patch literal 110637 zcmb4r2Ut_d_cq3$h>9qR4FLsd(xeGUQ$$3nASFmsdaogbYSzLk3QFkR1|q$8$gT>8 zP^E+pN>f1sp@#aOfbP#gc%JXueUwP<%$?KT^PV$v?;|Y@<^A+0=xJzZ_N!dGqD@0X zTSr5)vx#mO_|4u&lJ(%n4tH(k%QTq{EZ@ODK3E#4SgEVi@PW^CG_*So(d;B&0{*Aj zae{_+{WA^C^&Kbw`>ef#=hrn58k#^`8tAWU48c$Ge`eqh82#%fH1r|OZtyQL@aI|5 zj{nV`1o=IZwk~Ps@6S7%z;!g2bQD!oz)vqXX$$Eqm#%8q+)z7z)m=obOl)dO5m~??fZxB@I40T6)}O_i}V_a+mg!J+pp=H26&Zwa^*%^-DbL zWzQI>Yq2XjyIHbJ2nq`dpOK?yXJ?mjv#^rZzH;@~aPTkLGd3O`F496m2n0e9Au8zX zW-WAHN=iydSVTxfL;zeN;Er_ixa}q2Q$8SWu_ z<_!5p|NXbIP7hnF|J}*S{g+rkKq2xsLgxjAg{Td)^s?P%82OuxVe4{j+)jo(nY5;x zttD76d0BGjW!7&%@w@*mPlh~;w643Qo1(L$BN+6@Twum^WnFUE^xNNGIM|YvDD80D z$y)Y|mw<(()or+g#~Hc*A2*N@BJ0h;cGG>=e@l5|8KLdgx-rKew%9QA`W(R0a`ZAn z|9OoZ{YUwwuQW6YG%8mv-SpZq-mC7$fh~~umX>ANt~jO9-KF+I!I?0m9aY&(K)TTvMgrX0(eK#L;u{G$|yD zC{fgi{%f1tu;eSCdu7{r0^YgyvF6{eKS*^&m>cwQ7WhbP*2%%F-pYn3F5YdHjv1$I z$h)^RWM4lu%DNVo6Pc%u5@PwuiMegu&?*q5SV+pu>V^#~tFNt`RuoU^@)IDRW;nh?63g2r`| zRA##^BCY11naf%2chug-W~g_N;a6I<$}jhI&amFeJOI-{AKu2mW*(^Nn+stqFaMFP zX0ddPR7rGZg}VD zXACOZiEk_AD(T?a;aAt~#8dTCbx+JRDj^-B(+d)`M@2}VV~E+*Wkx9;vB}E`!5TjO z4!4WvLOkW#-3M-zwcI=)vyIaYT!Y4p=lLF1$+$YhRltnRY_=NUg4tITrM7Wx<9#e| z6-b|+<18|&-Ba__7-ny9AC0z;O)pp-+ksC=g;Lj<+NA-RpkmE-JBj|+dT18u>(eWI zFnhLPb3?(vzWXHVQI=GRvAy2MWiK9e0W7B`I5!KP+g>@Lvuy~OSwXmA1bD8VA~M$S zsE;t8`nY;-yPUI5n#wlt5rx87wj0P@f33$v;w#XY`=)ItgzmP;kgd|p@SBht-bM#9 z+)X2>C5w#YDd_?Yw9X^0y|A>Jx=SmUccw&i0#&)=r^b&)#Yg>*Z>i!VNmMGay zn4Yy4ug6K1s5K0S(8JzQ^&5-~Z5Mx;FZ5c*u1RCN@EG?Hu9F7b_9eY3?XYc70E2<3 zkCbV&+buZh*gu!a=OHUPV$czI-8LHA$LW#_+KtNSB+Y)tuj;Gu zSi`>g?fqGXL#uDfNUrpi-k@i!A@21;B<76iV-A+XFL9=5hAURWBe?0UxM zq@$+vhtZa~?MNQDAi6<`k!lds2sBwOu>lmwA8WNkf3-w$9q8w@kB?kxmDZ&0oh(wX@7`!bb?to|T4Y6MOzW?{b&IC%o|4BL z$Xk7oXVg7D9WF=ENmHjTO`Tp+IR{A^mX-sSAJl1A@BAf*ABj$f`)?ngb=L=s^=?hO z*XpP0pO|@>sc_zu3&(cOPP{=#2Uo)I7Zq6)%(@_s5s1X}HW}lTc3bUn{UjAqED*+I z^_Y7Cbz!376wpU{0nn&jNG-Vb*mh4otid?99X@%!;JP~1M1-mUdaed~wtEI5AetZk z(SuenH{UJO&iE*PTfdn*d z-fxm1k@sfPy0<(giWEB^^*) z-M7x#8|x2;$Zp3ooSAJzzJh6Al&EBUjyqa&w#ljtfi=W;*0l18Q-=SYP zLDCr$qndOj&!C704@Y8S*s5~XWZC==ahCVy zv4-_E@O6no6l~41LJKmxi8ZgOqakJoeVmnM5!P^jjXGH#vuh}~Q&~Ws!6g7dRPI58 z+R4a6sH*_DE=>07!_ex(1{OqsIB>sMfD60G9IMrI3s78tX=?7o_-+H6k3!Yofxk-0D_80`OER#RK0+S*(SH}02uOK-A*9% zFU(XiBkr%N=_ej|rI z$v@h1=&gWO=CGw3U=@-9iG~S^RJHx^kd0`wU#=e7Io>b@cr_z!jDuZx`m8Tsz|c0C z$D2;LAR zNg#Xy_;&QZ(MttUwg3RHh^+80+baB^O(-5%s1$H1fElP!+AbLor`{%g$skEk5lQko z3O&9k0-GMx&(zLpJp!d0=gO|T4X8ym32uiB-gRl~AeImetk4^zp8K~_)@@jBoFta5 zk2P$>6P5F+M(IEjtwvrMdDd>Of-c~cNmUB5yzO8}|29#IxwIz?@wO6h>3qlaAf?+U zl>I4eSW0ht@JV;+~!UmK&WcIYgWTOLOd$znv z9nb_SJYP*a$@k{JAWq+>ljHP?A|n*_h|b93)NqJFfywSn9h^Ppibkd7R&6h<4#=2J zpbKIwKzTsER|^x*{&Cz2gq)PT+cQY z+&lU(#50g@#s4i#h2MY&K0e4U9EO2$b#dBPm~0oSSC1B}Js=*WD~K`ut#4o2T6eGL z9xnR|&vH$HtW(rtb-f4%G_12gW1Zj)xIkkZhC$|rzg~7FP%SO?ooTX&0PeF3&sESs zcI@|{1}rGE$iRn(r0UvHqhj$;4Ur!JqF)rKXISQvJ)0#Eqf`h>SSm2F&fKO}y0|xP z^ixctjz8MFz9G$>eFr3vQ)~5_XLx#>m{68uBvxC0tA!Z7^pfg1hF|Tq6VIH`-l%kJ zE@x}Bd#{veX5>+W;K>IH=vyFApS~kg7cz8KGOt$`?PJZ`lozM~f3ZvTA*LmdNqZ2W z4N`t4yKayiQKY3-V%OoV03vx6mFKVs^n4uXdA*d%PE$bd1aX?BGaM2~jk|z4StGBJ ztmjs8U10)bO-fUUMFGsgXM|8KE-)ziu#gixY*JcjU-E&b$sl9KgHqz+%MvIssgVP9 zFctQ;n^Q~f&VUYpYuoS*&@{6_5o@YIbuk7@bq7pyYdXO^q3udvG0)XAx7`R-1v9|K zXaR_1IRlbNjr58#+2r;SZ$Ju8s0?!)VkTEpD8QTPok9yt2u{?g3zwjloX7xh9M_va z_|bCj*a1&LRnYV6R4h+rwvY7#RQ$PjDBI0JLHR%S)sM_&wltB*)v`t{Fvr6ti2}j7e0@uhsGF3` zo?nUuCc<`8Ws0C&1__&uRx52!{(2n;SZ-9T0`jLJ2vd^?0E}7DTjLaUp0-QPAE5jK zj9g%l%{l>5mv8|nw+LH(i=?LSoqNTi3FK-iPbEW%JY=8=+U4*~5H>cOU+x(hvz3h{ zr6`az7llCScJWPv2OBByx;SgK`bOR=m5Su|()&*<+{GBt z*0SveL@{P$SbW7T)1X~_v+gnN>kf#WGzF+Q(MP=pAj8o#v`SWX zJy7-r1z$a@71Kf1^%rWo_PU25^tq%fj`F%hTSkt|s=OIq6M#ox9p8A@vP3ALe=bi= zN7Rb@ERvRLOuK3>B#>59a}ZLVOLbEr1QYqnDe!yq0IXjucd+YG6dqa&M@~ttO?LgW zQ`SEm>3_{>cTA%gWsL$dt61HE`I!VudjeYhjlilb{5r?COl?`q5e}EoH>>#3;ljkK zgc19ast<#NHF%@%DkAnxpP$LZAOW99Sducut^9>CM{!++qF35`gs z5-JjJz31|w*@~c#4V343s(vH0qKXS|epEz$a|6w+A2hWTkjf-^zF`S?go>*SB&E|1 zsXT5;R3u8k#=I}iNPo4OPV=X&Z9Omq4EnORgBALKM(%61Y|0r;QY7kHy?f>7TALV!|h8J#XN$yqF(A773TYUYUW|LYz^B=xmu;1#@sT(?KRZ& zlgh1x(Bg?{k*TBBTl-pC%1P?cKs~!YNdxX0m8^ia4Bw?&Z~wBrAVs5M6v;N`_On7$ zLgl{=Ub^LIpR(#wXwyE*+rmbgoV3A>~%n6TYO|a(sj!bmC}p+7LEKdH?)? zX7oETZHf2lw#g`HSDpK}r$p1dnzBZdu|`we&!779ew9+OLMgEC*wHqCMRGm(p*c4B ze#GCV?VVxOB(X+^60WS!;Ze1x9m&^H^)q*GiDxggLhLJN^xE67*j8Kg9dAeqOuOFx z_PD)M{7MgJBvvU`T>@(!f~LvG<_(FIT+c*z4|R;bu3jEK;k0r2XKC1=G>`ZMdRY1> zC4hpgt52)p_5t+M2VaT}3Yr*)@0>fWwPbjV7}E`Ph&SRoij{!Pag^@OKkgl2#N`|s zJM?Tcz1;{8E3!XL$MnR_&k-~z9#G2%?31rCmJ=&s>22u-Zz8I78M%%Pi;mfw>^06R zacnQqFgYs}>Zsj%#74*Ixe*s0>!wkf&}cYVTVR~&dR`WV=C_SbN1m$Cte}EPtGq4| zYZZWS=w*({!4%%sA%^$>Q1@qDk@&5|KC18zw$mgxC`~Iza7583= z$cK#V89wnAUT4|PvF@+pS&>BLu&tG|GN(&u1-X*DO0MKU6LAI_!=Ebl$jIwcCmHkc;l*bCYtaX>eJYR$lx^rChMVBD6;g>GHf>Mb1dRpfY0gVN@o7 z%M8$O3IzSLE&I0vG+^iH3%MPftqv%Wn*IQ%Y8jA+YeL)pIbgXc&>Zc8apD0wIwFIM zt?mhbk;HXLU}NwfzTcPSe@YpAj9!&(ohHfgM_#q zR$G(tn06A@LLck)^r_#eNW3QAg^`ODm!4HUJLyspz6SYX@s%q=nF3FsbTWq|ar5Fa zFAvn;gZ~g$Iq!&aGk&tNJ51evf7r<#GaO^NL+^;snbdNaKB*xqks|*Wq$ax!Ju-$L0a| zSAR^RGqO%KH{P2veLMRz#}S)cLhR77MijB<(DXr@+*YuwYyTxxil8&LrPM{yL)7iU z)@GJcO+VKZJI5LZy^e|ml3tvd9Wac-i<=d!9kQ9WM6)cCv=Yqkn1C&SG8G0t0htT^ zj#TP}^-fyi(nsGXOOdGvkWY$G*18WWZzh0wtb%XR__K0wnMdXbH`#b)S zqcEa`)XeN;kMFSb)S^_?*oVgyoj|jHA;U+1hG0kikFzbV!pW+WM}4L{0cLCn`RDN- z8Q$zq6^a+GM{4T1jkeO(Hn!=yeZ%8MN6Iv*?B(oYeA~v~Z;|nnW=#B}KX8d9qr7C? zN^D)qKTJ?pEr`0Od*nDV&daIp%=9B9h}&W~vBdr2(8@5|H@Pi)ok@Wh5%a+12P>&1 zg{iL1=1(6^m?nw&B}f+;6UuPD+)MotM;MQ(n}tW0$;l_2C_3i&hAZ>5Rzp7*skP)3 zu~OG=b8`sH=vU1^!Y$(6GeoMYZ9b~^WW3PBL-?V zrV*FT5+RBb^*EzDrJxMxDzhL(Uud=eo;kg2+G3d_LV4;#*bk)}Q9LH}MUhRv&lS)0 zF&}#U)u^1*2a<`Jy}h2I83CdQwu9aCW%R*UwWJCShN;C)%i#Ka$@EQZrcN^n8(Oxk zEjJXkl>VZeNpqT;j_L2T^xJ<=mqlSr_)(a{wAXdue~%gvePL~Lz1h%p&`+#_5xeh@F)>p#)gYNLyl10C}myUJGJI1IA zjIL+XJV`Gh&xCu-gnpD4aS>B8<}<-o?VJ~}-iV=q`JH>il5t9IXx{}T-+oiv#rfKc z3o);c>6=A=UrHd9)!oSC01ZOX9;O+4xRu5+Zb>XLKQFUEp3?RwJ*^~;QBZQv6gzBHv3+(J?rAdzc7LjZYi5sUoR&( z$uObiD;&iYXvB?cd?MIj{-o1F0B2Fcuz5dT*c~M?W_q^9=8Q*tUb*?C3~$2G;zmVd zKV0$fw2sex8WaQM&6nO$DHxa#iJF%2h#fbVndyj4uVIr;khf+9jg>$7M;Vr49Ohmloteap?>R^6hTRf6~o~BQZni_MOXa@bF8B4Z0mEy3`pnJ|H6X27z|Y zOGpEtw266Rp3~)bj;iNs4qAW9DS|c5t2D0}M_4oNVLYakgiZG|S&|FReMeF^G#Qhh z$sc!TO*m23;Jx0)qi7$nmHpLaE7JT=>;6<>n90AY>$e)|B7!Lzc37Lp>~&Lk7O5vp;3P-9A}e=`YF5OOQaSxuWam zTKLN*Hte^9bZmo$;4%-mF>AJhB z*|3!Urd)KYDfXng=Cp1#IM7yo)Zq1%NPKSK`T7Ob9{UGGLqFgxz8%wtD>HKwsO%;< zGxO{ZQ6dUTJ-Dh2d!I4{CyF8e&Z$dYG`JA>_Z>|r7hg8Ev{cSClBrjx-%>m}sr+gr z{zs;SVn{dHQAp8TTQ(@}(S_}r<&*N@c-81T93M1_ReZeUker77@r-@^0cIbR8D@?j zwMS;MX~$WM7GX14&7YKEy&D+zbee3M3-ulB+k7+TynsD_g2i}*pJ3se=n(22{JG%yp(XhIwLP(z5htzztB0sCJS2J z5SP?dj@P)jc^J+zSEb>!M(!uUCEsK2(t+xR9H^a#zb*9$4308d#t)0n%8@2Z^9Whp z>6YO#TMv9-IBA(-ZPF!#tF?oRWK@ZBQ#BXs(r3Jyv_P`Yyq5u@XS=0}<4 zZSyL}h6cq6OH1nQdDkMiDmUj3y1L6rSiY>#?xD)qa|dP#c@fh?hhzEEST&9wKS#&d zk*E;+`9PMa^NM#~m8JZxlJct&_}ZnRTl1nLQ)%fbR2Jw!dwtOIdAVwE=QSj*XPE76 z8Gx3QLze2!o$m+DgK|Jqw+a#)7O-6Ii<@6ECONm^?7zZu8^@Y&%~jxXfJaBqfP#5* zb^^Uj+v;?5nV5>*DfigfIPUr5*1Uc2sx&`ABS#2yRlwyrp;Rse>}kopD&N(|RhAj> z#PtHKvC?=BsnNKc&yx0beEQIt<-*9n$Mgxft`dM55~I_2Oyep}l$`uah3um@|* z3Yr}7wc2t;IU|$qT6?2Nc(AxtJb?KveQ6gD2yWafJsHV$nkeH%2B(Ct`D$ zElnU$={-i4H}Rv>9a*Bo1>==9i=`7|C9d0fNi#iv-t_1R9-YcH=`km?VhxN7IO)fx zpz~}yAQjN-(?w&`CFRWfPC0V%XBivg#j1Begff2VR+V4*MKUrWss#xJp#jPV9@g5>2Y#GZxwnIujW$8*($<70?1Ed}jOgM~1hF1d2wlznJW zr)VRjGF4wCKk*Ull5s(gix3RV!Gw+cegKag>U4`8!%W4nXt}xduCG^e+ta`5M)AQ9m)&gV?!spbTGPd`ZjqHZf zsVNT#s(vT-n8@Wk;F=G|KU=bhl&U$Fw@o@?{098GLvVkb$b>-7r+>yQA`Q)-mNa;G z4JoD*)gukZ0{8fyRWJ*M=)-g)N9XEa_2!c*%dI@3t<%qwvyu!o>32XQqFoM;cSe^G~D(_ zn5*B*at=3uIi9KVZ_eY!!2tqcV^HD8ezw0FS>TWxXqj8?x!D+ImmzERm+f=HNMIj2 zDl0SvyQZ-k6=&}-QtC3srC>&c$Xh;GLpy}xERa99(1`nBbAsDLgu#Lr(OGkbl!&e3 z3Q%d_m2fvqFE}K588ursw`||OR5X+rYK@KE(wFBVw=|oX+-Y!pgt+qS5?Fcefa?vX zCEN{OiyvYaMxv^$9|Wi*a0-P|87m0JPBD3~<8E2AS!3nT23%VWjk9w|E)^a-qcG49 z30Rv)v@9l<$1c|l1#ou{@of$o)bTwwQH|d$PGPh!biNnq2MOS(P|CRC&3@-<0^{P*ey;2=>Diy%uf6iQfVpEPvm9NJ7PZ+Szdx zX+6S+j9DfOg%au2U5~!0z%b^d@z%|&3x3w402**x98;p78l>RR$Plf zxU7o9`kKiKnPk@*3%OO5Ja7Q0urc()*866I`|e2W+1b%0;Zyv}Mr1Dv!#_MfNQhn* z0ud%svc=B_=zwp83~;i2Vg{%0U_?zUTWHmKsf#7q5`FvONzj zoZr17g^V#eTeBJ!8MgVPA*K}=CB^??y7N(#Iz#C-32YT7?&8&rlK~575zFGht(Dy3 zHye`%6|i@CwZEVA5VK5Md+~}sR-L#`87B?Q!cXdl5GG}}Kx)oiM3j8{)-N{55=#cq zbaR6DN$yQ)dV}bpYJd?##Csnu^5sC+Kzwts#~Uo~Ze;&&M_kaIU+W;*8~VUHR( zOr~8K+u)WyL`PdI|8hyk&HcVlk>w_o9=Hbd5;F6ld(Hyv{*Oy{g2RV?dyOo2qz##( z-=F~MZz55<1qL`^42v^eJ#~P!5**3EuLCOY)5E1Q(Y1f2-}}9k-|H8S0P-5-j+~v8 zK((-#^uYw_)NUjhCBCtxHaU>4DFr`b#X0GJ)xMy0@Gy`1^hZ~x-poz%qRbCY9v_*O zZ&5Ft^vhj|BN0a=8~>IEJ^m{03o19rM~n(hq{8Vum?d$abVr+aZ8@;awSg=%bwmxf z09!Yq&|%|5zgJjjP-C>vnnPR`aW-WLoJc-mQyt$o4&BAX6A(v+3<`Ci?g58P#HTvu z_TYxjNLl4ams{9In4S$#a|*q~g7S>Bt-tluSv3dyY`X3n=f%5)CKm412|5I^{D2FV6m%LZ>(&bxK;>>qNH zT_IRo;k~bSN`)^}6?t?XI}WG$0I7@d&1QLL|-ZkVYaxRx~ zi~QFhRcy8tY)o!=WvPq$B{TQ4UX0Axn#x$88$THE?VNrSliQw=+ob*83xy+7rK)f_i`0CNCpkUsPIM8|Ts$^gn4sT4Rf0 zB{4&CFV&j`mkbEzId+HGC&{OgJ&?hXu3O0eWcuAk;eZIM*4=#v#C%8{;cFU#p|KW; z9Tt;kU~<=oBQ5$Ru~1wk`q&mJn~`6?o9c{ zrNNd1Rp0xjS$ZpN@88>m8XI=a=H9V?dT}yxXV|jpNbxbVgwf=V5tI@!aFoI8{fgrF z{QhAUYGF%*asqem?I{hG#$l4j1{w#i=lQm|2O9?pxeu5kWEY|byL$R%rlZQJ-d6ZH zxNT|5o#s3vTazsBhN<>1`o|{+Z|(MjFGmp`uDuJ3rDko$Z(K>Y`|2}rZ@KPO5=17a zqY{Y)Vp;PCgAT8hD1RZsMz$z;-Oy;}CgCiEcWq6M$5T^LmuC2+!r)@7Jod!mctDas z)TT!5FI;QfYZE2!EIPyC7_ukwc-hbM{(rwfL=OeBGTBDWV?@KKxD;v%07T6N|F=!E zg9iRssQv-;ILRKSj4bkrT*$<+n{UF*4I5~wD!eZb_UL|9cQa<#a&PyLdQFAcas92$ z9r9>Eyibh4HB`G_so{6QLqdfZezsub{amdMY(e$)%R|VQPsRpY`ZpA-*W{S*FT;H> zmXA<+@0*?nHg%|I*&E0`&(&l5msQHEO4)BC-DO;^jirNpF~NiTI5r{Lx;&U~;2y7- z*77g`aDJV>dfAWPN;9n<$L4TRo1X44FugSXAC(%B?%=^{)qQ(-|xeh|@+Ndgki_48);yjyX)!z`%V zzbkn_>U_fS3<8Ty?PxtUPptCmloL>+^Rkw`nj5`Rzh~wb+_P_zsTv@-#n<5aMh56hgpo%6hbsV&6>;1P=cQ_UvxC2axYc?%!x@Wmrt<0Q{JONA`t z>%MVk*G{sb$2LR!E4qbi5jPCfe?i1P{_Ib_!yzvSyA$vpl&%HJlM^Fr$&>px1Qy61FMuKUX~vvoT8B4|qh66KMaoWQOBAyS{{^n1dz;L;;f`02@({!} z9knpi0_M0RrT)ttHxDgTYM-*C(D}gMWWN5*qML7hO_IVW^v>>(pA@tPlK^~T-WL+~ zi=j&Ib+{NJ_KY(2WlksEUWGm`vl7aVUSV)pcK{Qnh1r6gG8&ZL&O zN~&gp&T=_w>uJ20i3GST4+EbI~?jWKMSRFYG34!^J%v#}PdV zx5<}lT^fjNwc%^ML5ZBfY9Oz&bncPQ{VAB+Uv;W8!7&mDUBm7I-xr&&OtI3pLP@tx z`i(x8LXPszr&!p=Eg4Oh&by`7Ej%p6PLfXa97jYa2Yt zl|tv>oa+pQ8oiw!f1*?GGu%=MOM z;MB;GobWU2!KuvGG}=2X|IxwcwNoMGLD_H+TIcSa+c+Q+td*qsetCqh!XcVcm*6!6 z__ck0?|2-UJ#Bnq-W9;fjx_<{?o_}h9+wNYoUra+{1cLeMN$2Y4iyoqNog3w@eVFc z^cy4xS^G)B3W<0lwi@kGmek7>ahV8KVoV<>sC8n9fd2Wyxpfs>?{XJ%VRte2tqnPT zDF?L&xPj)vkb$8y>N9_p`WzBrPEd+kpG_Kkg-8~q1cy?(1!eiNx5q_yqds%u`4itq z=UxTsk`b6RpXifYdFJ!y(t*+?0Za}S$H3P>H|(E_xcLCqbn@iJwB=>xX>pV`+DI1h zD5j$e{$I!PWXNXlG8w?jyuQ6!9-_SAalc~8j1%DDb2IfaeH5{QXq9zND~_z^MLL^^ z`DW1w3Z4HF#N}T|3X@6f8?s+v#vrly1FoA&qGKi?C3@+IPMDfiterL3LB7`vW5>)f zd!Apn{iWt_{D8MbH((y^U6z@eg|U*ql@ZGJUp*Z{5x6v{DS*i}dE(Rlw3&0aOyFdZ zzVS?&S37QvvYA6o!i103llN)$V6lj3%>^jz1eiGCV6oSTKVm(B{I?2JGcd6-x1L!D z#L><^hA;)?0nUiJ01kSL|2$bExvq@=DQq9$nR3V8JmTWfiV<`q1`cIybctG+i=*d= z>A@80VlW;+1Xlj@Xq>=y3V*(By2VPqNVG=>hM1O`Rw9dsp@TS%EN2du2Q(DJYjPe^ z#xLLo;GpZYpj6w>g8#sfr4Yl{Jw_C5RL)_UgWpE{8JkfLKuHz-(Kh!QSv%~)Cs73H zOpjjIxOG7PA44+}1}6W9NBzpW5rR#U9w}f2b0$PSfyVg%L2e$$+%v*4w=sF@LWsiKRjT54x-& zCJYohqf@&KT<1{AKWEklV=mDx?3O?9RjiA`!-Dk{-YW_xfzz~Itmq7%C*qs9 z_it-$Om$;#{wc(oJvEQnNAAAzq+mBLY^GmWCccuLmH0DBquw6`eYH4uTkdrofwLmU z@>R=Di9vd?lmf_rnj#?mi_eBSl7bY_m$;30S=E&eN^Vxj09hgEmRk*H z=tmo3c|q3NTz|l8TsQd{>IOL}@}zTZBtYe}E?urgtN%0xyHH;E8-l_&>=&efw?a-e z3(H5OeUSSTtc00>dqv0b;5Jwo(-FzKh8YIpS_ z17By%2KuwyQ)qET_Zjyc+$8ZaP2e^%w?sD_!kp1Y+R3eDtLKY>r8V2AFW<-XCl)sv zuj|kmgo$7Pl`z@3xGHKPMabzCVgDLwWh%kvBDcbTFl`KLch^=lV;43@N!YIiE{C)n zPgGPTQ$v(9ZC6j*@M!m3cWRH~Z}V)}X-)_vM0mqL(w4z1#v=hiC`1&#r0*tR_X+~2 z%mBLC>7@4K+JO}A)yD~lB3Gu#ZXuCH1Nrw$HRCHUBNP5v7eon_3{DT%UHtd>rdoqR z-7I>)BieYCX|CjHr$r(-u1H?m`@;s-w~YNINE|U1D)v(7>G1h{_M|PzF7g{+>d+t+(^P^8-h-21t{|%%30G{=?4MQLi$m8zPCA|il zUI+6xhQJFj=COh;=L()jG&YO|RmBl?Um-DhzL(R}?BIHs{kNonbHH+03O$@nI!V}t zd2C+7^f8UQ7#t)`W?9hZ47T6t?Wi-F2(;_y4K`+Fm`KA{tB>=5RG)qK{_$zY~@>=!f>F`MeDa|q~uj?-Cq^c zI#K{PCqFM}D@{s$TBd60=DF z%8*B_lo*T#1ecbkF!MG(&}9C}B7P^)VOqoPD%!%e)rJd{-eUF_xDAsGZ-kgCC?~rv za$6&R@OzIyhLJ^aB-WAQWzXQCLMzH_HyHzLXMdTMI~zQfhPQ}aUUCY&_?QN@16q3# z*ZmqHaNsV?_Ho&Dc-W@$J09xaZyR;Z|vFnIYC&ytGH`G4Cs?^X4IvZ1AH`KxI#tkQ4M`D)Kdg7FXAm;lAm_1dlDoca~V$>{a`@2nAW^d9NkQ=O8J-ha%+cCuZsB=2J`&Gn?b?MCLP!j0!8TYA@ns&v* z7j{$X9y~j4_FTJh<>gw>$_3d7ME{FEScvyV?nPBX9J#zEtiP(xXDu;HBv6X|L|}kz zWm&seRdjJlD5ZncZX4|2DYsa(v%9}?_SB}k{PLQ8XF)!CGsIR^UNW8GIm!`madN20 zxqrskHh-J>lUiBmX4 z20mvq>;IKXC4JYGI|Y=BsGO~d4_PK+X33x1CVXG-{FBH1HV3Gx$(sQ}(S@dcJtV!n z>F1`b9R+=Cm2uS@1{B_lvSLol->5o%kCHSbkJ0o4BtH@sBb3thT@UY_aC@u#JlR5wPaD z=VI^liiWb(MuqY}X#HgkPf%B`McA&a-(%dPwP<%nRfT zxE6y7U5fGGZBfgs1BivW{Z4&yLx~)fW0Fqsu92r|3XdaNT+?sYfM*tUhpW_VLY&7u z)xhig)cMlU@@I>%iXrL}9mAu2*cb0RDEnV^pbfs^mX&8N*5X0cAq>=;WS_|Nuzj*{}3<=M@WhY55rx%VR~i^iuPyanvR0n#k8 z_h8|2&mqb%Fv|so)l7^jTOUm@k^TC8XS-&9MN36ce6U;7dHVcL4^V<*{Gok>l=OF$ zgYPQn11C%w1_M@pRHz5@klGEbFUlIb7X;bhF=BcuP?&UBrCzBR%6~|!XxZnu=>DIhlE2FIKy%o zW8cEBfmZqxHU=a?t0GaJFgD8OJ@q_utpu4mj|&o&Uo%4oGB?VPKj%2o!TP<@F%}aB zWgsCtX4yW;#ed$D%e*PZ$oQL69oe6?j@iV963@|BRWdHK!}S+>r2|@;8RT}M%FH`n z%N~j<#?*hn8kUlAg;b5`E9v1x4*HllP% zhR%Ulf8f9caHcHjodO9VEci|@-PEBsXGmph1xs$?m~vGjNnfnl1nTeRS+n_(P-&5D z{!`5oA>hqjtk4M3NKN3$%0uj0;Ef14T;ts`zP1tlArF7m!aEfDSx-KZjWdhGfu_Fs zVydMd`0kZf=2f(o39fN~htv#)mey3}N-|m1M{hx(CX74*Nqqai%(K1ouf zwmSa{-VaDeJFNB^`fO_MbR?sbr601ds(k;fQy7h~JrG1bEL_<2?0~Q@>lasTg2dW#zbyjk=RaFwzBaTx!-Qg-`=k;`{U$B zF_yq&GmUxQ7*ph15#V%rp0Yc*12WBMU=i(XyGurHPNzBo5rlXO-zArjg`2lF4m!Ef zp-wnx;}#H^sABo#ch>%m{8s#0C;E(IA(lP4HGP^s?SiwaEtPfaJ?FcaXAt86i9$ue ze~mWTMgcrpbluZ&-;7@*NjIeHfc-?-!^N+BWGDb9wAx_EVq@PZ{_ z--Ffq`i&EZznl8baE3UAnl_T!yV*pQqg6L(>uIQy2=-P0bNFD^LmsDfF8as9!CCCF zFv90!Jm!m)@0Ze*f7aNyiyhc#7+eCUHHW7fql~Le4`}ytZdx~Z<4@Pk{(|F^t*&Va zX+nfgK6ZUYee*9yrT1+RBBi7;Hg_D`^UZ9_g$6P<{v~7okD8jqIkDm~*xGG@KHI+O zE1<#$JZx=w_Zv3<%<@_L_nYO70&j2pMt9=^x^)vmkI@KVDWwEWXV5XE!I$U|Fl5otkY-;;)BdzMXN2yrj9}i~Lz>8F{Dr zw=sWbxE3axyw~^>JA`CS{=!q>g z(vi}qQ1?LFMZZjfHbL4+{O)x;Vpg^w!L7e+N4v%PiBw5J(5P7IX$;3t$P4mPR)RYq zyZM`}oU_CsCO+kL&D^zRt$|K40iWV5O*W3ldmfamzm&C7?lUnZqPKbFyU)0w{bcaa zj^Wj%Cxq@e!9jv|=HOUC1pN2AL_3tsV((S1!g6sxgN(Tlo4On9!Uw?11;)ELy=*wc z5FYbSKle4k!OE-Z}JWcFtVOY;m_+gKDo2; zRM9bvLwYjFuiaAuv#7Sd{=jqDb?pgD$LBw<3|nsrCx&ZD;DPLv*?^~kK0cOXZ{7#(v)4RrmwJ52FHYc8R ziU~bk0Y@u0jx-MBU^3+im2wl~Q=FBX%Q*(c0j}*%sC7e_mf4Hy!{V2keiSS5b`FJ$73CQGI|$Jo z1Fw{T(6MXDqLfa!rHvNqEqP76?Hhb>kmD}-_y7HM^NLw&btfM$qh(^o5jpv@LaLWv zAJhpe9;@m2EHavWSiXM!+J)1?Ny1}|JL6Z4hiVuf9ohk9RG|6uFXEAu+*X^Ju)^661i+JGL9L`m<17da@7-NN9u|k86SstI&ZR z9G58Pn$%6g;W4t0d~&|#e{lKiR&+x01|0tR;njx3)GF1R0=Iu&hh-{U#W%aQ6@~Ow zJFZJ~ftHz1JvnxA zA!z+>3Mj~4`tjJzgOmzpq`MYny~b{kA;|o?_37E77L6Do{n))X8+H6Hhp*fEuEGt7 ztuIH~+m7!?|1=GwLJ|}#d%EOrL|W`#ogaKbuS*^j-fZit?3mEnFe8tGS@NQhfkKtX zqfHWHvT62AFSF9AwzlbO|7bYW9g^17FNU)dFEoHB{CN8A@P;E0nGK#H0%rm@jaD$e zdmm|hCb250Rozf!I@%5wVGVm5;|a^$b@Xk*+ZerayT`xQehcN^&HB%dKU{O&@hmu- z!f%v`bsJ$0_2OC^6cIwDU{PA~wYO-$E2J zfeqY;oxV9#7V_)FH)nINK5Ub23mw6Iz0lkoy;It|`I@>YDGMAGCkuXrIr~0|NFS2; zVpG5#20bT*L=RF7#=R6-@S|IoyRuNKS-{@<`MY{Z)m8DaJ9`!_-$lMP$y_Y|;rZ@j zs`iG7|2{W)U!z=L0vor*NGw1*H8)h(;z)LG(RMMS^#ZkJxSPGvRw*PV`ycD#S8xY2&D9R4We9+%Z7NRp?$7FCAm<_ApaErIjtHT-8S=t`ot@rZ$N_4fG>7(lR8?jM) zdQxKlpx^MZ>%7WSPp;1TykR+h?=o-@dgixPk1~0K`QM!tl+&I(_MMgN07=r2h-1M^ zz7kch)!Yw7eJB_zZ(t3qiJZx)$zC_aGV{W-e@CTyjqiaMRCpbfh0sMQT-c{UpRV_R z?0sceRa?}qB1owqA=03vbax4ebazWhmvjq)qI7o)Y+}>hh)8#*(%re)a2KElkLR54 zxj*i&`+R@avth3_YrNwfV~#QA+6u^u^`WwFn1(iA4YexL$z)u!bZ|yPKWqS zo4CVUvIC+hV$l^x^dAp-j-T(mBxML8W|q9f944kpp0zfC?K+d)bW`+_4bI>B>=q0@ zVle&I`3pd)>}Mwrrip&`R~^&gX=7(a=jA5|qb`61dO;x;?x-${w63K;yd zk}zSV#%*euE)z{#mfE~~%fo1j;_)78L!k#hTL?uU5sls>wm@_07XG_lzNZGJz!-rJ zpRa`R5g@`Yn-7mz_%sYx>#?$@S>!}j?iFtnUZTS5G0Y)eIaRS}9Sg#1Bn8C2^vKy@sg>Oyqtbq{e`7S}qkiK1Xm)&2~D+zExyt@#Qtt#GYEk zyl67@I=&keu^7_8kD65g@C3B>xC8SPX6U2h9&O~dO6qASh_vV8xgGy6mZtK`7(Wrp zxudoo2X<5XX*aF~dMRIhGGJCrx^RV7Vz7JtiBrJQE;Q(b9<0DdZp!Z=#OQ@krktW*Tvr_{zHA} zpELxyM_!~92npiJ)T-D8{N(W4GjNYicyImq!wgu-d-_zyjgWrKdX&?5TM=#PdGgf& z9cgsF48{l7k3YSVQfAjPezbfKno-d7)g#nP^S#1ibXWEbY=_n+^eB4|A zRQH?yUMew&n7^q8XM|%zmR8wY`~~Rz9^Fil&fpA>+0&nf`4j9qu5<^JNu1#yp4Bse zMrxX{_*zmX)@^eR7?W|8u(G<9@nv`veyOb7ZShF$@REn!e?WqtNCI$hqLC&-0jKtk zQdD*zZ6tS6Hs?7QUvENXyoKZ%__{DrrgLaR8M<6!zJHhZFOM=kAPdGJ2(N;=2@&}T zUNiBPmJFe)CMa0R*&&VTl?EeR;5rSd1oKLmRN5ypo^x`~KX0sq;@F+jSL zMo|`_De=0E>FG z;s22CZ;EuYR-XK1FtsryVrj<6>)CguWq8yMc#PSkT&^3`r?5&L=hZr318H{`5XQc^ z5!2NtqC!BJUwmSi3xd>2VJnB&K%1Y{=sZBUacd4gw;rB?Fku)Sg`k6_f~Rj>nqInI zFz!ZOGx~31W~TzyDnQ&exhadhbz@7)!bce6`s)&mXizPyOHCpXpGG-EEwNGR&$YmN z1PJ1yWkoK^4>XKE&+6@}bgtX`^m@Md$eq2|2lExs1n~HPHC6m?6TbqdXBq(5;(GeX zmyWe2JOUO>JBEfcG(6XG3Rcl^Db+Cz9toR=Un_Il7XM>A$e$bzJUvjKYiMFxHr{D1 zPCu%aKk#eYRzXXzemgN;O*(jM%emppKV0Nk;Mp+K@t_#|4B#HZyosrPwn z(b+K!7}0rEr%U>sf1C64NlQ$Ye4ud?WdNC!^rje4%#MkoAJ z?oLR-^p;>AML(6dHHkXMG*g?V9ylV`6PBrHaQ9C>KQlnw)kF?@f9nSAKigITG;gjY zCSUSk{w)d-w)+p}>OF)mu#Da$mVqw_s?IN6Qn; zR12KnPDUcfeYa`&@+TPrjHLK7dMouKBd0)Jxh2+zYmI(JsZ$@N%SUa_)Jh}j{s{!l zzkAK;H@bBjmJy9YugO(fb;u}aV#e#!`s+tm-vawFvMdI1{}J?gk(I-AX0BwKKjnk^ znnuRg=cEqj6@V#G-^x6{&YwCQk6NIAyaPIbJ$YC)wI!qv`^SF8lV2FlRU(=&-IRq> zfHyOBBvAKiw{}cQFZo^VZOu8JeT4<&n0q~nv+qyp>GkqlvmC5ui4;^^Yl9PKUhi!@ zX1^v{uTO2-_i2qX3+x{&o`W!B59l1FHb# zjkE%Qv<+NY&3t%C*WYya8alv_IP@Xz@xFUyS_UX#>+0d)NYmV-Yw&d=bt>sw$^nlb z*|N(0OMvDjj1ze$IRz+9aShR?+MLh%#kHn2*m?0_=QNJh-N7Pg-Zh1Q?5wF5r)C`1L|wc61Dwr^zTP;rM?n^RHpV z09xD=9`*G<`)~!!(`HA+lYh|VFTs0B05;#KU3~68`=|rV)6s(1L-Ic<EE`Vkeh&Pb0>Eqk3yaIu_+MDuVB>#b@t0!%FD(8a z!=g9NcD#8_7{|jyzviVS|kCswa~&! zy$opnq&Jf?-~lfNlAqIE5`BgfZ&_7;AFcI|6@M&TJ%l zE^0-oOq^o2N@T?#WuE7D{-6$n{I|ure>OlLZm6LDHo=C{~wp>yvcxy3aXpw1Ltw zj}WKJK^zuo%zXbgD0&V7#YuQ)9ROs_R5X=_z&Tha&EH5j>78td)S4Nuf+<O_9av%kZ(kMv)M^%)8Q*n*^5KGq zowfrRBW0tFbFoK(P$93so}o;m1EMgXA*k5pq-eITShdI-$kJo*u6t=`cJcz{koZMR zhXGD}(1mstT5(>Vrcj|l-?{wI@O_7tCtd986R(pLd0s@kegk6hDg!w{qEnpAUg1w}&~B^DTo;U$&sFo_fueYq>n#} z0c<9L2?}qVyklA&(~swtisIoHm7uB28ZsTxUA7#p3=^j1z+aJh8O7TW{NSK0UeM`- zA&^J3E9l<3pf@2XlpPC(6d%y6754t0d!MVNNkEDRqq}FD)VInWU@yq7Yk|Ej;7F^^F5(i zY0#|ka)qN$6EB5(ieuh*WSvqC9f5Y;U;GTU$stShEmJ>q&0e+0ATZu-OvoT}PpMKE za>si2mY@2zmd@8#b0oj?A7Fx4h@(L&j(5WhUY@Q9GxFnGgjY!~=n|5aagZ21Ab#EQfsYTP-Da zcrR#4n$H5H%2{GN)HWT=bcE0AmmdqSTNOFh+J&YT#w<|Rqd|(8;~hVhP3D~158>h* zo>uC5H%aZ4N=7#kkH045l=*?Ezq2J+{8H()NNf;%TtbymarY>JC{fQEAtlj+XL+8a zZS~nEOr4Yo$Zu9KAh)g6^B2rPM?m__N^X`AGlHj5W)63|O@$Z5T)cgcJ-`yc$Eg~1 zNMmV`<#q)at4?zA@YTmwVMcH15(YzuDj3!r-&Qk5@410mlExSlOQsRh;?{*^vkR>V z%U&en=any7w=IQS??8gTj_gJu#hWH|5_KTr&~oQH@`bPOgnWg4=(4rLpcr?n@dCW^ z*erCxPr)gH2v*GHHUY&(06WZIgni441ZHVPUtPSIPV{N~gj~b)h(_+IreeIhT;Y{3 z-=KRN@@QNUM5t8yg#!R)oT~}CqZws6Prq@fQu}4}vr{>$@J6vPXmr|kEpr03kqVb9 z+Q;kNs+-X6A2$C|SXZ>@&pI9;=U8b0mq(^c$4%< z>aFa~_fwCT<1oGkDX3CS2doKPhl@7g$X0`M6j97PC`3pwqVxCaL8r!whCAe6sMl6V zIy;;Vu(AHyY4C@@cqDh%r-&8RMCVwASJkT8*)vQHP+i{;0=KUIIx1&;-AD|0GkJCn zI6D-#t7kGU(NV_HHXC?n#V>F-paYRyI$48Zxk9YSR*ZxrW`sOE*=IrL4`YsyGno9Ewtg5Ax_% z(x?r)QFcBupHH455Jc1}rRx4Ilv#vU5Yss$ORAa}VO3*))Njn{vSl_Tg^s=BJWqW+ zuW{tFum?^KkY=2~0u;~stW(9IYTQF#%Yyk6IFLtPmEbXP#B>#ZTD|O$yVU`lqF4*C zom4)%-LU<0OA5rsyfg3=>%3Q)3r+ZjOBL*1G|_KJjz@q{K;yX#)t1ExhcczAukL^# zS>rfU;ma^atGy^W?$oE0c-MP9{#F=SKIU@O1&;yUwZp2}S3?(a8*j);x_B?rSCW?me&NUec=1fZRT=`^XXhD~ux-|XRBS)f5X$V>DC2kAncj* z85Z+qHYPq-^HnhWn|89c=J?uO$VC3A-`bW!!0vaq>ax^zkLU1X{Z;_Fc&bdnd1k41 zGG1NIZWPX_;+JS|!DJ&)%Tbl3i-o@`E|ZcijS*ADg2)y`s5;2KJ#-j)%&Yp=njZFQ ze0;FyqPpX|&o$C~F$~ z`zSL?;lhhtOEDL(o-#h4r`JCGdm0_5a=M%{_01Cbi}yBQq6i1C(}9P)Z@pBsG>Liy@r$iuuOA$Hac!FBi=vjhd8b?-Ot-LeF( zBYi~3UdV&XHLUmfGN48v3u9Xif@;1H5pseDn*sF6*B z)#bh#&b?eh^;pu?P}ju!0amTZ!SsZ5O>TdU{x)nAT;Skh`MWKg;vsj(fjW0h{X%`H zOvr7=!J|U|1IM5rq}QoqKG^kg#>Fzk18~X3CTr__EhNXuVOiG0BVT31?oP%$Fl=#m zFKmJv%VPp_ft`|}y&TOKXr(dim#YZR*HaaSR@y_oho&jvdzqGGC(;pjICG0*x9B|= zAIFpbVxjKr)2}frw-MX#%I4Be1W59patOl>PV{NErR?bICCTYb>fQ33#pC97$K6b| z@FS9w2AJ=v_rzZ|tDu>zWasHK2ZoIKE!nD-9ONECEj~hpH;YJBE$A3;wL+!^cM6BA z=ddV^9f1S|k`3?8u*cxm{SqIEJWkJ3KbP>C+vS{}uHk$p%C|+=#{T%4J_})3Ar(_> zQRgpObDyzxM%L1qRz@Xkp*P;94_5|UO(!tT(;IvKQe^fGOR-Vh=lp^5j&Z!OBMY>} zgbzvJW(X(OyR>WmdW~9uqEl`;dOChrz4(j@JY}~#ES>PFJt5hQv4yV+{Xs}N4d5r3 z%Z}f)OA*(QRE8a#hvlvtr{_Nk<$svqJh{Z&;-25SgU)%y^E)u|m`(5#K06}jht&lT zL#($}+`jMpx9D5-NNS=lk=A5=Q=h_53cF|$Zd8Ju?Y42c!rF>a=;F=kmhwK3XLIj} zCorKG7^@dEtl1(pXZd z`l_R_@IC#Y^+V0kh}c){xp{S9{+QeJtE6dylu!M5LFE-xHr~d2S>^tqk;5VS5PgWnlXIvxh%(e880Xr(rA={2=Aa`-mIG zgqt?CKpD{)lH?$zh@Cr*(Y1>7D$MRl9#vH9RX$f=vv8CWwy#PZ>&bqPKz3R3B;*?Z zSKS0Vr4HXSVNtT}Y1T|gk=DYV`ParxE3dF7w&Lr8Bd*40mz4z7{7ap*B)-cFfhk1>D+N8q~hbuf=B5_=Zp9d)uyk2)u$+`!lP&r8_SDd&heZ>c#Qv$hV|c z=-e*%!Eyaheyy@6KL?z}V1cU!dVIQ5P3xS%j?~;wH?|D%OlN|I&yst?X!P9+sKtTB z2V4JEU=TcYjy^Y8px~T_ehn9KaIxJAi(+=9R%YL!vdNcwSNT37Nw4am(O70&>g2o# zxcwEEs4|j{!a9`H)txYU@aa>}otrJb5aw~cEXtep3dz8hIdS$wtq-a|=7Hua^Dv3N z?Z)v4eJa<4PeW`)Vm7z?!P4syz>TT47k&@_OUC>S!d}%FgSNDH9}#~Jco_IS*b12K zcUrTnQia!a+XIJwj@Dn0=u+QMy#xYnnn8hS#JbZA*yJ~cKtX2Kg&-&fdvS-30CDfw zKK{}-P|%$14!y;#9cn$#@#)S`3{BVb9U$#dnTZux@Y7KQfM$ca&7s?UZ|@i-!h0^M zJ?09ZK;fwBSWmeAStosv1Mv*n7IU|a0PrZXve)CE1OYs%@yJoGacaxP)BM#$zad|B z9P;{@E0)Xk4X>YBi45?ZZxHDcY{e$v|5ppgksXb~@69Qi81T?&3v7=K%dQ=jUb$H; znxoUwJ-GTNJF;;&fBhn+KGc^YfFQYk{LuMDQ@6a3kf;w_JG~QIwe^n&2A#A+ZuhcX z!o)KQ#=#le&apSAnXR}qfWQ7QX?XFmJr|&^lYPj7Dp&Kox=10^WKmdHKM6e+pl{}` zOGv0xFB;&$y_8S#TNsqc*PW(f%#k&IHcHd@{o0(s2nMXvF>gj-gLJ0S407USHjE~( z_N49z?F=fuG!D;@xRp``!svrM7(#dg^eU11ZMP!GE~kJ7xJYz6EddP7Xp0QJ{=DyeocfeK&u`G9fmx6t zL14qe{-a$|$IybO@8RXz^JBxdN75UKM(PKNp)IzZA#ud{I1#VExvAfo^=hEQe7ff0 zVwJ-9!1~qKjREef2P`S5fE+pz__xP zL??`3_AGS(@03J05$_~V)21(z_r*;(oV( z$!Jt4;L%N4ww<|o5>EQnwbKG@{tXgzwT4k(c3mYH zo4KVoeB46lr4hcZ+(;w?L&w*Nl8)-C{Q5E-?Nvk;*>Nhs{~5*CI$$dWQae{>Jt7NG zaG=)Xrkj?XCyc{Qy)Z$g=gC zN3XhF0FwV&)21EYu81)fd0Vir%N$hWhrPI>;Wo@5-O8}11SICABz}v169CrtXgl>G zhqgAo+hclm?((718L-xo9UUpd5hw^Iz3UL=IjllP=WSeg zVQcTVJ0jw`uV#)1=ul#}a7>&OQ%PtkfWX{$#)Ll=8ugpD=ZND;T=k@0R7ax|Dy}<$ z2Fdd)N9db^j_Kz-<;)#yoM+$xo{DJ=5)@iA;+y^KjTs~YKCiviMADk}NcDn`!>7+`I-a6;*&dl-u&0a?8e zZ@xj)Z=W3LfVJ7DB}Uxar)Dz!;NxUi!u)HMf4dE^PDfWwqWyo-q^B|r$&1=5jY>GK zXm#m@t@l2a@FUT{1?vOqjj8zMH+bQ}R@p3j)1qb-HIzIVI5Lbe4mS~iA_%%Zr2Xpa7rK7l3&gmA4es*78(PG@_~ezl ze|-J(&u26Zq0|H#?r4jDVet39uJ77{i`Lz2BqaeZ!cT;580q&<+gduQM^CdFZUKgM z_6gH}+-3DVdE^5HLh5Bv%V*~Ge|B}YNP_kfF)q@PCu8tzogb1o&M{S4^aJy zB5(Z~7tz*__HN3*-2&L>Y`9Z#o+`9^fj&-%v`+;8qfa_mV2;NIPk;;D6Yk$<7>xXp@ht)JIooJ}>72Sttls3*U)R@-vP z9UWOyh&X%>`R_VH%&a-sUm?SwEpj9Mmq=Yla+Nf8Sej_46x+<#z0G4?v$dy#R~!D-ytOS6!0>4#6^J%vXJAy3W`Vu z$*U{lv2Yu_KvT^;R`kEE9q^zhI!q_6!w<%i2XB3xObHMFo%Rg8@}HsbE&!S&jm`XV z5n!kkvABQjHeAs2OxJlN#K*}wGN$y)9bP6ioPVcBm)pC3E1J)TuSw6D$u!3IpUMnO z|D}LVYvPASVz&u+H%-mPyf`ITQ{S@m-e;0R0O1oneAc83>>@lB_K5+%vkqqe&vSK` zK<*`?@8x1)cWzprjXuZsu7w!F9=t1=;V=Nt-l3a%$jw)g@*R)$$_Vl(0b4;;!(lYU zz0TLhH@TE6U+3yV1mZ83`vHI0g(nqC$fMh;6P4JOlG(kQ__)S=mw!7(nE+|3=j$L4 z^2ijaBCGxUnvx2z_Ns0DwEv<~{Ni38G=U){3m>PJ4{rEPujd zQY);NulkXhz&hglR@=;-xWaDFe^!aKZRDQ$PJcQHuqBe-dd{1qC0`OA!GGpaS>*rz zUstUL_(3A3)*u|MAlJj~PrC$N)IsXQ!)13J%+xrzKb{?S<-83jZLE;A)~bS;M;X}D z_x+zi-A<~rvh7xS_e2(2?1#Rv=bTA~Gwa_N&}bf~Eg3pfebS;M(*c%=M_+cJed2Kk z;JwDur~gIp$rN7a`J1x`P_9oTZANetcG52~+V#}6`xvRH{G!xOhK8fiOIzA15%w4Q z#aTFsfp+Z3{;M$}X)o+4XtQYuVfKR31LY#uSIW}so8>0M$8M*6-ATqgyXxT-9`06x z>t*bPsK80f%w`MZ9k5g;rCOUD;JHLrm0bDSf0=!Lm)W9n>H;GFrozT4e}#NqwNhV8GGF{ldI zRVLl`*VO}8S3wE#xT~BZCp*wEAqDNAvocAlw=N|Fm0i@C;m?6_aYg||!xXA z%y2p2Kv{ofu5|jqy*&NP7_h1C_@Ad~01iOHs4$F@cNloHRUD3?9Lmj}{pgM4C$1A0 zadV0aqmGZwqBfB4-2lRo@vt?QNG|=^WJ0M-Y_&EuV9>)&|2X>#aMV0S@;jNT{5ZSz z?*a~1WubFMl&a^a-#7L0gLm6|BWDl0)PgjMzisu-+%Ij!6A@H?fB-}j5R2ZJ_>dx(I(l8tgSX?j z`)rFnb`M&MwKBD5rdZw>IG8WDJJdVwEtMS5tO$uwk)lPbq!wbZU_fA3-=%V9&RkpJ zmcD7qaRu7*|m0_QhXY+z$ zO#vBDu_gSAkCF$MKXV|-Wj59CVi*-V-`LKQNma>{cYsZEG%oEnouLmoG8NQRjxSps z=Tax=l7hv7`^;?dO56{|Kr66?SB67rDDqtqr*^4&sb-KVJ zl%HsHdF7M!e=)N~k1E`U;||Bhr(DWt${8z2*`*LS6JeR!*gy%mz9v&MgyZ8-C|kYb zki2TEG$iBl;LF)=B&F{3(?GT?HJi!RK9Fj@ttHcdd3M&RjqKW+3B$yTH|f)<^=pdq zRJGZqLV^h4;yR|4zRj-%_dQYGUMtlWAQd*QuHA6mPmh@?{*t0hzMNL&i78qS5g&N%&C z%!4oObOw|SjT33oh{b??4$Jz^Ob`7xvuc1kTWW!w|3q(FZnj;sJCR#=?dw3vm-eyJ zaT+5N)MC?8lKL_1$sCfC2(`1>cKM|GL;F$;zNyWOEG_}*ja6hahok-6$J7g<+wxN( zhpcEb=!=m=FsG>cTq3}Z&+6Q|e=`6BmB%SCx);1sDSi>F7obH)Z1W7Tj zK5gez$F|e-H*~8z%&53^@45uW3jwBPIKXr82Wk>}Xw9&>weHi+)#Fobp0$z$Zvv>! zQm}i0?b>H~6M>O0u*Mr*{Yp1TugApTcTxqm>7WS{E@gocPAQ&wpK9zY4=L|!9N_HGUH3>f;R6{6P?g|HU zAaw;j%qVyqQ~r1#eleKCCq8J}4NF)*4)ysz(9Q0Z2JxA6UvGgL=x%GRkyUGb_``ptMdE9b~{@sUPp>$0xc8au(}`_m{O|on3RC}{|gRUIIBwoj_{yFtrhM7qYDuJXYcGZfK$Ly7z zh7sBsoXM-=EAq(~$)^(_OZk8U0XRh4Hd$1JhqI<2VhYT$FUnodY*Mhvu7!^I2#~iO z9WU69sp^pL!J~bP#DR;i<1!;0Wn?EZG|^F6Ir+0utRFQ*cd4|rIG~Z`cV`GB1_{VB zp8@4VL7nl0czyMH#rDA^ma z?&jLPxvUY2pgC8kdn&+bpoK_!I(ZH`?@Eya_8~~>J?bqV4kqkWjR+G$+eF`bM?5c5 zd}=R?1L@X{j#XOACqFrhYkNa zQT2Qt>l4OZ63JwZN!R`_3Eq2TTMs!(HuF2q<~`f=q^Y&7 zTy5L&TiuU2Yz)e4wP@SRoDddks!0fTfj}_jVvJ%Ya0KT%rpI-L3|AK-=$C{$j&o!Z zAWXoESYC{$ctWdzSg~LU623eCHx(n}I7P_fV2|KoF(R<(p%C*NsS<9(n%NrsA!x-1 z1F`GA12Lo!<>g{mvx`b(5NCHtq#kjeFMCvJn5yl*=C5a=jz_)unnv@e1@!Q{Cog;D zYqe4FIwD7VD?$3=YQE?}7JE2k=&h{UNBcl7Q`#QRO*L@A7ROLEY~g^aBF93df6_3v zUSsC*A={SEiEjbXsBZ(sZS~L$Rj1^!zH`)!n!K?Os5>KdKdM*{bo#k06 z8`_Jy?`8Lrr!v^*1HUk=W1e~lGCrdO+9EMUSvEL_i@nCf@4M=}h$-vIJyJe&4Dt6f zAlMU3Z$X}@q{7uzKW)>s@evD~4qPuS9^P}C)5b<0YeZ|@hS(IE#tT(9qwVaCz}GLM zO(k7`)8HBloiMc=#gPN1jv=vCM74|Y7Arc!4l%27igC2~i4INiG54hS43SW}dCO*U zgfYsP#kCg3fRX}ZzCx@Ws!?xn7FqqRIxPsr(uA#<0$%`J&xQeWv`H@p8N`4 zMyUkftTTW(5ASNI)W+)lKn0sKimoRff)}~I`b$}YX_F-f-@pU&`&0)|as5kU!VZj^>o_Y`l_OTXQ{IaPiK(I|3i6K&Z{!T(f6M^2sv&7y^X(?C)zN=~`&V z9h(&qJ3EwhrC+3ipm!CQ+1!DHXG~l@)vYr5x68#@=Q+57e4L8JXO6{)Rb8ACx^Umm z_Zv70j7oSd6&Ny_v3V)==z5P|P)JOwqqb1?FvYHKlV2%|(qd&E4neW1V+_H$} zE12|{5u%aJPB@%zAtDVxT4oP=IQxw$YKS{@n}^l^Hr4D}5^>fKMsRvB6^LnW2EtFQa+p=B6{mAt za;23p0QI(fA28U?d@#bbwpzU>+pMEd3k2_jnqQz)1h*c<%xmn0xcl@KfnS zzOXf;2|1pvB==+jrhuSWZ3|U&SGxpgnM<-I`M$6FaVqxWWtRHe*w>{~8|pHP$}W1a z$%)AQNnZNbj^GzfH6Rp3w$>>V`$XaRrA!-FNtQ9aFC%OZFXc1U;m(S8Lk|MB_=TvsC?EM8|rn3UzFMT@m{ zUcd>@%G%+KFX$Dl)5ewYcG1o!-Wtv}6nkf`7X?kHfvSpkXX`Amgbs!d_|q1)D!t{MA+5`!aF!QpU!ymrEcQX zbB0*nqun=rAg<6V5!}J0d!CAnme?w@Xta7llixKrUS8I6UgE$LWABY=+5=1hUTK|^ zVX_;T!CGgIm`FLK;VAK$F1->EwtLY)_8!Q4I8-|3;r7rR6q`YJPM}=(fP>1z61#?? z9qjnph2Pm46>$^&Z9!X0Dxu)rmZJAql3YY@Vj{H7-8d@Dpy+y^V%_=Wk=>aV`T4dw zcbV3k(#i-SZw}Z5&FoJ&-XT{$Y>+~ls|7`UdO!|v;6NJJl0Efp2(4=3hdC92uk6Ms z2?MJxHV$82Gqq8&t}Pl2t%%}eZ&%jUePGXO8u^q`jy21XTPvIM^i+Lg-&MQX$7#Ap zH_;XiD0rGD(LuD;f_!OSEVbY+SLj|HiS4&sPQt{?jF}ga7-fhCm8Q)_F2oA+)>hMv zYVpBx)=gF~WbDL&Y?81utNJsg$5}?}!PcZ`>TegA==dtkDI-t4U)djhIqhQbFy+x? zJ?S|rD&D$7L23`8FXPHu5f2fEdE_7&Tk0TO< zR$#QtNY)vI%ks4#jt_YvdWRKq@BlIx&|m2Zz6fFhh|5$ngXtxZcODPe5(+C_>L1HX zY&N4zg4Y1DX@JA;_3*Y!o(mFAA;9~%A8F1-(W{)_J{2KtBVTc!d{yjiIlb>{HSiU) zQQmv)t!1}bZ|@)uP2(%^A{h`ReQ6F|g;o1>ig&ps0e5O^?=fR_8ybJ@lsX}Ux;+L7uwqc)6ULz|%9+f#@dbXZ8BFL#g1@xAEKbD`XTZI88LFYaovv@GWP zICYdQi?+C<-^`~KG@_(sG$xVawzvApy#~W^{4(%cmD{6T{ob+u5%3$@EQ7E3sxK!2 z9Az%0B~A1U0w^e5OY%WXdd!@N@!b<^HIs$=P_Db^%*EVN*(>ROWw{UBL8ae3Ktd;b z-e4$o*JL7PN=L;ccx=I*AR`tAOJa&D`r+==M7js&NRhd2%oqky+dd~>!;&hek4ROi zL%vDO_vTF7%q5IN^gEvVPqeM?T0sU%okZP~A0pa{vj@|IwY|D8B6p}Z4uiJh)MZps z8_x^dswa~i{76@OS^*{b#y6d_ji$-&+kY9E5l<}R>Nq|#@OBrE3&Gm)vWyEJy$sdd zLk9ew^E-{LBUP;9_Iz^q+9VlF=7w8+Vxbc#4(E}>WLqC&NXiYEHYd*dtwPTpk+vyQ z_F*eM*qos?v$fK;i_$|p$m;*f zHl$Cfh~YR>0%iW#ZeytT(QR$kH=rkQiruD%pt;x?hfib;$ppnOadzYdfSLS}j7y~D zA`c4A-QnJ|s9kPwFKOUashdcpd7^tBZYS}9M&_%JV9waWUB$t5?z+!75M3PRI<@yR z0MMKdFo$YnmW@7nl6Gzk7;5Q!(*59?`Kd=c(vdwofM2#p*SzV~W#tHJ4TZOng1IrJ zm=TO{P0%KF)7P{F=R8v&64@I&9|_1r*(_j}-QY5oBrm!fS323A7pDvhzBeZQS(py~ zkfobm8;t#>e)?2w{{?#yGfeAR+Z7d*h!y+>)-TM z2?m(VE2bz z*-U*2y{kZ>NsR;%pL zg^l6nnKW`{U0!D0)z9$WiYZ;ECDw`3jhv`ClF`<72KVE5B#miwwp6jQXaQZRQ^TK7 z4nJ88_#Hr)#aR+OvB$Gumk#Cvc8V z+Gg29B+7fbO7J+8zMQ3xa9VBNHLvfX4Hq5Y$ggAi&^+89oIRcOKiG&$on`_8|1`_a z`#^M%b&2F~Y&@horr& zd@4>4q@QYL_fBQ&GjPYrTVLP=MLo2@RV9PhKU5pR3reDQVHb6e9wy)NXMk@RCb@_S zonte1wKxV(^#G?~N$(JgcKemr;i>e;%i()X?RzI=N+W51hKQRIB9@h@_DmCq+di)o z?!z23Ys+B_pX#80AOF<~d|JtoS;x6y$WOlBw<3zkGaac<$*enVVQ4K37N5}VF?R9c zgFg#=ZmvPHUV6OIA;`}K&v<0Ri+1Rhc9y1To5 zGCl*2@O+1I!IGPjoiK<+N-q~V$s}Nki(Rs?(?NTUq`$%Q94+ILm#-F%<#(Fynj?{RZW%k|!$W8q$4@S13GPv+q4FilRvR;O zahq}m_&)1>@f~pw>9G;x7sjsh;|bR1Geho>zMj;M10=wfFDW;M>K%G{uPtc6efxN8 z1T5!sOq*oaU6PU?Fw>Wk7PbIRP(_~p%q0p0C8^5~v`}2~bS>As$_?+mvg4Pk=tJI<2R9qck67;TBw_1CG}?3T`5! zb<`{gX}d%3E>*%K2+6xczNqG8+ z?(q5M$5>5*jGFu&_lxpEZkCFjov(S*=DN_`<*0RI{L_tPza@A5V?O6fzwg3+%}ygv zqV#v3w>1)VFgBm5j1lyIJz6tATq>QI7CIBvN{GlJgorE(pnTnXgz}2y3j$176`QM) zDct7Res8``J(UB8%kEf@MrGX!L!bR<5j9C?nrZ-Fdt!5YF#Sctu~$H~hrH-l4hxk@ z;agszNE*uh)-3puUGJys9bPn_XTpyNCumwMoic_{_L*v`Tl|0}{U)uL>RMm-qWJC? zYh3D`)$}ZtS>lbcJ!LO@KCCfw|UdtKSD4Hpvgc;o(*^n@av{YUgKgP;hY8bRj*x# zTu(Z>&aW?~9Ko7JjcCszt*la1nkF9=6&v7F^uf70=1TQjjpwBix_!Y@jrJU-;mcM+ zo*pCf%okN3nHb3&co|*3;y)z`>w4^vBDy@mI?=g1P(FoRZ*BauuvH3alnsVZZfd4& znGs=ChNiV|V(7U494i63oJrSXT!^*^-?98jwEAwVIv2r&?xigIQMoS6jE!2g0Zg6R z!*k2N_j_2}14wOhy73&7nL;Y?-$S1sIh6~V?b4XFdec(Wd`H3ZkJYu%DK0H~{;LF(Q@G%=<9 z!01CW<#tFc+Ha%RfA^Vd9m)l5Nj3LHb=U1fsfh)!UKwH%p!qVgw_PliVth_qq3i}K zl`eb8x^Z#ld*3;_+;i!6%YPWY7LAoB+vJR=NXj96zFtzpULuOPyY!Y2a7aq<&qn5LZb-n(Ik$IeoG$K2{=q{qsiP6p)?plj#!u;;jWi9R6x!qG8As45245DnI!lv_{Eh0|3v65q4@x&g&N(S~Ylfi% z6mx~DWk%AmxOm{PdEF25O6F#u`*#o164)q2-7|Tu-XD8s=f!rqCgrK)1C@e)+2OVm z*v>UQ8^#*j4RyNP9wTFK5&HaTTKn;Ly;JJl5ALMRrI!BKmnG?(&`yltoKKn{R62fG zSC7(xUI1)&7H~GO6svdf><~|j#tOJ{c-K}`K2vTUm3)BGZg>=QF*t3N!JhMF?>Yw1 z@}WX|p9gXa*X|O(B;H@KJI%Y(v$dsGxM=zGJc(oU!qsTYM_tG{=1`HWu(v5?K-0y} z`K?~-1WWnSccqq66j$|@cHT>mjkZ97Em1B(eMV-uo~a7r%_BIB=kC}ME9K#1(_sA+ zqL92|iW#Tta`uIzu}ReBwW>ch{{5EW(>jk1@x}wSrIW7#J@B|lXFJ`2FoYb(w`kbV zl?ZyHDHgB_RKIUU7a1+{Ul>94@S$7<4q+D#1XG;cW21Fby69$!h#Q^IfI~&R(A*7h zm?VOvo}3aSF%tnbBeJbploG&$mPLP&XNFaG5J zQ1y<{kucHLaBSPQlZkC76HRQ}w(W@~>^Ku^V%wZdY}?k?dG5XMTHpWfUe#6moU>~m zly7e@yom#ey^_Fk?~*R!=)J+;4`BQ70H&Vd&=|+%+-qmqw~kyvR?Q|3?^DKvMh6)V zKlGKG3G2(oLuP{*%CXNPg)92TO(OiSIRZUgpyNUQ68HUGkQ-JV5mr2DwYV%EZXdte z6pZU1=dC)Mj$CQZ<3D`}S)ATPe%_PkT3ETC1M@S;?q^m@0v}hbk9NP{ z&-tv|4(%?&BM2@!iU(T5|Fk!;Sh!R$J;(RfL(bb7i8-72Yfb|O!#88smk#uow4dC^ z$X`J0i?S=a^J+G)&zKv=R}E_0-691%UX*}V(k(lEIurK*VPM*-lJoPcr-q#P<7QQ+*2Ef1<`c*13kfA73Y z1;aknW}98dh!Hij^-P6=zC2RUPnj%29Y&6}ILs^uo6FaHgzcZ%Cf6+lQ&;GscNSx| z;l>TMf@uo##r6wmNP=krsxuD@J?i^HjV>+~;Bae?g!gve-BsaZdrPa&(dFAW#;kZX z1XrlYUZEx`IfrZcbV-^$lq<}qU)HMuO+L~%S&dajE7BSo=e>z0yY_g0qngz3b#^(G zW^ZlN9t6v~?`+?|qaVrbj5h%94+Q^>Nb|+?ln>f0_in5Kk3@SUB^7#Vm655>IMukU z5Y&^;SanGgIE4Dy_%@)EO2YrW!J67FktV>}QO|K9yfoyLJp0%Cwb79-rEOTe5dK@bXxX{ zT(&$|t5XOrsx%&TpPzQL1-132>xJHT9uGVtU7g#+UHtX?`?GpWr^EA74p&DHbwq=i z9%Y;&ry*V*nYG>96pnqI<<4#BurB?;=QRgZ2}-Ld7cSy_qSqi7m#XpVgSuY9I0)DvY(#0_@yCUca*X-yzQKJ*_s?rjdW?*)Q(r zJ_$V>?bxixcq~*dez$uJ-zu;Czrtzi=v_Ph5Ln*BhveB!CG^B&AKv=M z$9*^sJ0RHas!8tJh#Nns^CDnw`KS+^{@lgq$r0TSSnu?~gBWrz$k(3sQ1kYYlcRDp zn-)kAiPB3=Mxc5}icAwoj71nK^-g@IS^2;i@vc4KTKMoTni}c_U&PtYo0U0RQfJ0~> z%hPHE{efFU11)BV-~^6+mPToR(0&B$QctvAxvUZs65!nQr|mMI>;l#F&zBqU-plT* zpIh{qM(wgfzFG%tV#Guf3&8h?$NOJ`hI*&Wu@7&&J$$p*5|~*uh{Fxi`0wCZatL;ID%|iUlhpF?|8GcGGdTWQ--A>eijCY4IW*#&qp7}#}zkHa`$Q$X$ z2+0<}>Um!|@2(C3FIJ$baeDlc)O3kkfB6qR#7xVV+b0Sb(g%T~6*zU;sb99kh@Nrp z?S(Yg%a^haKIczB9=@tya$%Purqj5Y^>`W`+QV7xX3ln`@X&P;hdGuF(OJzom(w2) zMlBRFeflFT2+-vJw(VC%=eF3tv@dkycwfdeLoC|*@?JQzSG74h8#ExJ5*@w0SbTUl z8}`ikkz7Hm>X%~Y#igG=085NsO?>+Y()i)Bj6Tk`UTV!^&5ymqJ3VNh*qYBaiXX2T z!6&^+-_2()%T}B_yHaNyj9xh-vv>6D-k0Rfu%jsnXmVgXiW~ajc~)|hx=L1FFm+ID zXIYh#Pr?w$id3_Le8ooGIXU2#kVz-)*Ro%+Uh`8gfsad=4|WMSPL52yW)TiN>_D=& z`z94wzRjL!UnwxQ&)NFDWU)oRaans;B=1fu-S1^XFi$04h zqX+oH3zvCR(9YUFk3pAk@D^pIukd1jF3|fPjXvs3GMC4EwE6tE_Wl=R6ELL;X`uOf zHTO+J*W=7;+TgV?$&>yuZtPtw?RQ<#v6#;JH?lDrP!n2(R$-tDDhR6CbiKT_sB>;- zaA?+@IGp@v4ye>@b_g}x=ECvxr)AbJ_5o)yZ2n#UBx)b6@M(IONz_2a#y(@Nve7_0 zz=DT`R*lp@+w@IGMzium!rs%~JmrKl1)uekOeE>HggdmqpMZ8;d;e`o1L_Uz$IF z)9P=z?Jr1^fF=)5SpDQ}Zhpq5 z)j+Z*csYLgaY=|RR;+*ea57BvIO~&fy)RR>`!Sa2xBW{+67)53uMC!t6G36K3Fb?= zL|iSjw`}tF%5tE8N`9=Rl%g?#OgptdDypiB;PIQLg4j584Yh}`Af{Wh&u>X#F(~)E zs0Gj@LFy`Gtj6wqmn0aJa$A!_O>jG}eQd{4BD!YCZuD^+eUO4Gm0zP=%J&gv(J`5W>U36O2_^q#& zQ18!5a)o)0y&T9nZvE#Fmyq{D32^W1Uz9TAegLX+IED%d2oA*uU30AaBiKmmR$LZ^ z!fh?Ss>YPCKwr70HVo4X2!5~pSzwh_gB$LCS-aI2TwXr z$~E|&%=j(| zd`4go`F$}>h1a;`XIH*W%Ri@{zIWapFK_B^RL(FSZ>eYj47-Z)%nr7|d6}$@^&)sR z&Qwc39hu4zz`a-Zyn0{RvpTr;ZZ4|b))<^Nir#E~o@?3X)(iz;==hj6M`|6Kff)2q>HCk)GlSeXlTeT=K8TZRFn2U{4bI!|C8b=>$ z%6%5d;`Avzss1;Q%=t!DtJN?myQpOM27fQx`A+~aiiU@5r?nnix$r=9>86u2-9-SQ zUt^YmbiUb@U#jquzbUsU@UK?jB>cB_yDxI*qaA}@^T{I$lg*l-`S@mB>)}R@7{;8) zMc5BZaZcqqXDBn8@iCUj*x}kqnuY<%3D7suLqE=g)*k}rn*?|*@BP-_2ntfFc#jB` zkzC(0x|MyWd5BEtwsW|h4!8P#`!w5*o9A%RKG3>p7Bq}*M{%vz6LM8>c8TJxHVPnZ zR`asE-(GdfPPW0~cDrP8LZVM;DE$-zd+p82YqvJ5`sb!S(q-sab_i{>`fcgq(E2BY zwd>O3(M*3Kaqe@Hfhw}{Vp@mnuzseO_1Dq?DA2sRKLp)}5HHS=0hz>muOub7n4E^;v|gbc(1bbVGK5f=jRaScR^#E8 zR`!kdZxFvjePtk5F|D!~Z|C-g-RwsHeOk?rz^(-N0>@XZz2}qhdDLDq)0eRA(>Tm| z_Bj(H&0%BB)q77@Q%*2ecPs1tKu+wogJcN8$fU6LF>iy`Ect8hw4#Alm=f?$#Ox{M z;IZ*(WLsA4i&VpUp1T8Mp5=|mb5$)ymy{gYb^Yz`B7?En2AJOVb8!QaMzX4b+jMEBEk<2_EQ5JzU$ zI3st(M&4#8=+dK3irIrr?ECUVTv%`@ ztfzlufw?;Sc$6J-unRicB7{9T5F>?aK1!ia&T<%@(<&w(m)%DZ-}j+^uE7(Gc2S`Z z=E_Q?c!WX#^UOwRf!;#%c44uo|s8|c^_FFv&J5z98JOb%KjGl#%Z;2nPBJfy~Y-ZVy{dG`m|X6)`Tn zyJJGPdqj!<6i^ff9T$P7&`I2T=?;0MR^rD(O**VCMJCZ&n*m7*fkbg^3;t`AVc$+9v676ynB3T`~~W z5aKMjCvP^9%ejsf_sW0>5&jvSx_J4{(mZ+!T}wjdhyKSv6SI)Su;yw0M~9}emy-2+ z`XdN6wH9a)I-FFbfZkBpWf4sP5!|h5Fu2&{JH_<8rkXj<`|JE{21Bbi)c^9SW zzqZn4Z0TknERc_6%5F}jR{$ehr^1qJTg zkz`;jf+D!z>f~tBPlPAtMe z4L$A9Zb%cNo$3|!NMK3z{H@S~)>YA|5qF+N3EPI^B<5_rV{k6@Q{<4Q%{(1-j1y6! zfhqqML!^&UR%iw27#B*502CD+31fIN}3Q694KK z($z15#uCzCYWm`OUm~%oKjs4mRte7V;T@+me0BP^-A0eF7j))d!5ICTcJ@zo-2;$Dxn5n-%Z~odn(Y8;sPj%soOA?y0 zh;QbJgW-l{BNtpl(mK)!Ux&M!@(WE(c+D=Rw$8xxTz$j{>twSyHR*}~Ivk6ZCanmx z=cw|SO&X?6`$dRa{o8q#WMprSP!j$;XzE_kMfzVZBm7i;{Gg96S^>a+4AYIDF=vQ3YTE7y&}TlEG-O_=(RxB=yPB)O&*@WJDxrBk0Uc zPS~)6&1-GCs^Nu5CGFCa0SA1%UIfh8rq{7Upufi_Ecat(^+;Cw6Fxrsi z^0kJD&(k1&$y;vOIY3j#0p%kThSO!s9sNb(!YJ+cFV%mJzEmJlc~}pCg>nyD4VnX< z3ARGaj=@er(2X`65WE4IM3w$B1RaEixH$|t>7;M^+Qn3rL3qlBq}Sc|{%GxY(WJ5& z7&3_B*w^-Ei{m@mr@Gp$c;N4W?FAShgs1e!TavBdE$9zG_2SJma@L3XfCt#pPR1y6 z9kbjB@PmU$A8w7KljKV9E$+$a?Ajfizr->L^ao#ak<4QPx^FQ z-=AcZm(qpdo?=A4i8OZ9GH>(gy0XzQ&F^-p8P?g1+&nufwGQsdN@wG~4@ZlRIyX$e z+wG8VnzJq$y_M7;yHlu1sU3)B=MiImA3j#ckbN|D0}BgC64swu2@51&5VnkF6Fcxj zf3slGR>s3nC}DBH|5yK;b)lX@lL)b73T(E=qZ^`T^6;!EyBcIR6xy#}AN<~I#}}oV z5Btt!#t6^_mHAY5c{=Dz2#oP8V4UKCP%G@UMS?ZO{nECQ24_X~=C)5u-H`v#aTmQ5 zLomdT;r;?}0g$k2S7u;dE^MbCOMs*`*Q0)FoOue=SV$^m9D__ei1OM;EW4|6u zsZ-rTi$_|f+lX!~{Byx>6HHvJll}$6#JaR=N{p;q3UMpZI9IBTrJ}|mOX2VL@$xo| z|Csneu8#!Y7gmf*ba|~G^#JXv`p))P(&)P3*SYjkE6zfDMM0N@JY+RL2C_j!A}>H0 zAts?Yq?F;OqNJ1jNGu5~9cH=!etn0g*NO5=@iC=9(^Zv@*OM!OD-Ak=mO@A3!44P3 z6=|)OaTuBZxkFF4*M@xyvJb(pDJ2|_RwSGX;cI?R4Rq)kVS81-S zD+=~EDZD?fWeWJk3BGXKfU+6RI~rXH>gtGfGQB`|yy_y7!MVeYFWxQn63!8%Epqp+ z4UGq1aEa~L{s4B4T;PzgHUI+)8(Nz5*!2Ix+6`pT>FmrlAf{?bg>K5;3_>?r?5(!DgrLz8#gtKD<`=q|Pd2UJ5+?;s z=^-O?0cO8mfy{WYypLv^f3gw_E|_4|PvMw?`pXZ?j_oS?uV`dFT87lc3Tq$$ z)a`=?{@ywDKN`9R2F7070U`cgl&AH>@LNFtr(DhFjcw00wAza>G5rU@;9uRo#&pwb2`$jzT@uzfDBKQx&rNUaF7rZW#OX-(W9x`Y?1+Vv(aGw}M9mGphhs zNMtyF9P#@-8xk>IwlbZcH6Va>KH*Q0cise6KuG{>L8?pm7K>x$Bnc$UWXG&LH?$4; z4AQkC1Y=!OhE-}cc=5bk3v1P%q83N!GzP^>E^Y0T`6aFF;0bJsYsPYxZkU2j(VKf# z-<9Fhr+N$$0PMb+7OSk14-vT=PO{v4dh;Jl#NX+9=@LYK%}1|hloI|}+qJ$6rdopF z7_}Wm3?%;<>9WKYoLYc|y97&(-am`;zrkQw`3Knh`eP<2zbYYK@uZFH$AzmkM<`B^3o?iz-o}MJ zLfk=%c`*umxP+f=F+|5^3x%I68KiE-wvpa0Rc=CYy*x?!8ICiU7cmZ8FR_Bggz;(m zdXr&n!_}w*H~tj4{=yuKIZ*`bOkB2p)n6S5MpFh0NO-xD0O-9fHY+E#r**D}+>aVV zbAGP}$fa$H%nT#+Q4NuBp%Byu_PizkE}n_}o}#wiQRFta^RiQJlGIcon6p+lq02g4 zdZyVl*jB6knuNDvU<73RVVw z-T-X9G6hZS2S#Z^W5tqTo6b+?%<~$LO9gA)T8U7_2;g~KsI%7`VsWUPQg7T0vowKH zWrPYkk}LlGBL0t>9&RrQW{yPA^{~#pS?W(T1Qk<#Xtu7AyH=kBWN|D!{Q1kAwTA-} zK#|lJV((dB!{KZ_k7kq+KXdp3#OCMrUG4Z0n*S$SP_2NNuU6ifq2Qd-uLx z#HcVd)vAua&-m`=7+B?g5a7AFBY?tA<7WIb)70MPFgGXgrFDa!&I^yy@!GB~ntks3eQ+Ge3zaE3MgMvqmc^I- zxBuH3hIa336MfhI5chF;cTs%Mct%wZ;Rf5-gL4ECfzB?`%sPTFWk9}Qxx!o0&=7;S z!sf!rhWYo{KXt}I%{C-CY!k9St>og_W!s~#Ro{`1iN-!_G8%_D0=KJ_pv<1hW3VQ(X;rCrlgMXe;)x9B5(A;_CpsqW z4O&7r!@wWGK(d8$^4oFLxKaz98E{*{KC)idSP??tmTzBtElcmDAI|a`bOD(ZoF?Xu zdX@jO8F(>Ojibx=pC$3cfy9k(Kz2f`2(287{Xif)$pD%M8jthmTy{A9{FlNu49)HuTfAw?+C5}qM6#W54) zKj$|C6I{&0uHa;xngd4UmV1Q5#;cTwV(+jgJ)1~`>eFR;Uhc8we7E~&#vuJcZ=o>} zA0CsREfSVYQEG*IcGFKSEMW(rSmeEZVjh8qLdb33KQ>=gZeY7e zx;IMHgH`t2_+e5DwqlZKN~tc@eSD7BjfeKy!*Xlz;j{>`cETOg0rmUH*NvK?T8v<W9lD$*v)8$lb$4wjcAq*nnWaKQAM-X^iF)(*k_rXk>bDA>u_R{UE>+lYkiVYDfL}(0&mGJ5eft30#@vZTvU>r zjRfJ#5KDfCM@JsKmbPZe6F1b({bp<4caSMC<>A=0)>vq#5d<)HJ2~d}#c!%PjMn+R zGuMDs;l0fK2zv&VZy0d3*>=%I4f1Iew*Zz>NAAjTXgd24@x9Fso>%E9;PL28QO3taxcwjs$^0saXm(~bhYeJ&X!bJc|R#Y5 zUGWeeYa?IX7zSiv+16@>iYhCmi)LbM4b}KWU#Mgc66}>c%Od>}4qW3#>iduqHyP~7 zpyL>@yj@7=?Lvp=m66I`VZlHLEu>&#?}BLzLkLQ)v@=d#d~|(Y6rc>Be_910QM~N- zIa;3Ez30iTFx$Wq;QQTj)+tg!qu&3Ww~q@JL(y*vUF3U^HCju2!%#wxvuP(xij_&m z6J?{hqW16avbT~p(dlfzb46ql230flFb*Z*j$F|{c217^yB-aN))@n*WuehU0FxC z`5>txQb>g9rTn3^6O-p!Q2tY9oKb?plcV{zJ$E&f93#LwT+Y^dLAB2l!<_#nu_@;! zVt#wdN8t${k4%xUGJU6Ab*wuT{m8q7nJH{w)-BP6ryGQ-`dsd!D^ARKVYcvKpdIAV z2?Nd&vQo+z@7twqVxkVI6WD4~BNiN@gY9_H?!BBTy+@;dA7!7Z5pE7SD@hmoS&ug2 z{5cJ1)%v|olq$(jHd8l1q!4X2_%l)ut^b&G=ZKUs{iign%y^{qb}eT*zOnMM73|6f ziFa=UP^-wg<76t8$#oIY@>8EoGv;)61quhibKbk07^J;JPAAE}W95fQVKVa)Cum|z zAV~@$M+C(89n`-F`?F(vE>_vlRP!TQ72X}=3{GdYm|GPPs*AB|na}JYFrpTEoXrCw z;lN4>R02T|t(m}QeL_W_|!+* zlxzZL;-LB0b0#Q56-8p{sCWHny)dFP+~_1nQ+G#;IHS+~&9glUUw7nWO8vnldHH^1Lz(Gra}l)r6O%5V{d_~{!rz$q>6?x` zB;O@CqcV2i8ynMs=d2c@2s-Q4){lK$9XP%j)w5B{z5+R2B~t> zi_1s55dJY6suns#xtz}!Uxud`_MJ;}4>R!b^GhoUfH-i3*PB05%oiqca7v6sCAr~V z(Ko}13215~;1Ftqbr>I`GIb{-AqU}^OZkv>hl)}o0d6P?rHJQNHMujWhp75W{jEx2 zLcV8Xi-Yi?o~|3I-KUYxG(5P*0rt@*i-?a)gvJn}>rAKp?#9S{516BwRaWV@~CJJA;RSQOw3STozfkhOe` zpQyClFkEzQn0s!79*|3P|0GSdBqb{3>?sd4GLwz%5_ zuNIFhuSE9E8i)X>K`)2rE#-;$F8}d5dI;!A(9PmxJ8$=xH|DBCcEqD&U10Bc7($>UYtL*AE56RZ8FX+L7p;S(e#k zu^0aw$P?%tL-D{$H_L)YEhQ@I#n@z)i2oEYcrvBVe1Aya3;~9xBCPiL% z`3TH!IX+Go63lVx!Lwe}gmpZY)N{POrQCkwM@QhB36o;)22f2GFTZR2eC29Q3}|vN zRkUA|cnTbmwqh|B^@gh(6O;L}r-^x0h-6ijYw0Xqx>m!9qRNfM2-gqlf?d$Af{_U351>v*H|XEJ1F?k>NpvQ>_ebK26Hpb(J|OOV z5|wEoN+iH(M`g4WWr44xcDcsCs3i?Dt-yI*z@yVnl!hH^65L{H`^N|}#E&1G`zpDZ^ zY5#l@10Ltpq&f!uQ5__w(h0!!qRkxA>r_`DVrm^~;ol{|ABf1SL}2Xz^a}N)w|b3H zM{r6!G&hL&aksumcasGkP>Ae;V-_SW=l|VQ2SS9+Ty_ocqUmxau`gMExX>V#uKX^` zc5D-sD&;%6eHIY35Sb}`;;1PdJm{HemO0I9TZOCm_u6e z>++=b6+-NTfeog=708U;NamC+=o2YP?>pl{f-&S8F-;<#S;k0ZH4Hr%jzu|N_oqVL zc&bciA|AISQ{K``d1nsl>YW__zEY&ZxuE4y5fDQNK=9(aA|7cfb%kBdY+;KOQ3Qa8 zYVjdyi3U>9TtEsywV{c7|85MRSCTRSKW4v#c!y3&sUIr?J*|*_Xo+uR$0Sh^{2M44 zd`7e~+Y<(mobgRGn`9!vkEjL}=LiJ+V)K@apoSj{1AoM_DA>(MMz(v^%Lef^xN zjWYHao!a7R>}1{u&x*x};8NZw1eA*C;k{yL^bBfY2fgf!-Lg0a$TO2x&J#Iuz1Cc% zdUBE|e6D$HWg2JcWSo*F4I)E*E8x$Iy!FihDM3Q@Yd^woLK(P32^vZ^2gDFEC} z9z=n|ihfknenKsiP+#FC9gLItsc1#ZF3G&p$)QR>`U?kvN-W6BPj*z-k}k~_Qr?dG z;%jh$yxrCyVLjyq>A`$INUK*|3iSb29QY2qE$Y!8+3c*^=mRJ})(qWj-Q|@Q>FMvP zzWigrffIg-PE8~Vspk2ba}r6x*^#j!+?wd1^=zMvM=FWKqGVl2S|14I3aRqXEE$Rr z^eRL`*i>!y1V@fDtia0^AtYN@cJD;KFqY?KAXcz+?-f?0*agW9lyV*{x{M!tBoz8S zKn4)nUlgp;&(VnBqHLiW89>7co=Q8u*#GiI=uok}BFK`qi|5_i301JXdrpG%934nT zr;xd^#q6${=>)+Ly1rhQA#7|I0D&}1Nb;gS%SC^4UT_y=?>22*Hjl9(`ku z0{tJ|!vXanRZ2KONg90a0^p(0&W?^blZ>zfGv>d-o;`Zcm(|h&kb-3Dnn1+;Hd1u5 z0P;w)Ff;`Wym*3}O~qz3_dmJ!Xuz%xKk*S%e<$GMv$Hmr^W2X)mqT0>#`oJu5c^&P zeKbqRhWEV`6kk8~ z`3#TZg9Yi647y;PWk7k)J$}vxA(P-GJYHt^-{~!?g{~Zu;(PUwDEJ5n-M6ix6AxduG|dgVL1l6aDE4vtE;R6zfcjylGuVcl+X;$bICXAC*20-p0%_Twwm6GKQZ z%ex{+zBIlDlD+Hl62aXBiW)Ju;GR)CEnd|*$Wh4gChV!~!z&f#$w}db*g-grpn%(VctdJjIkrz9SwSdRz&XlTw;DfW(9%uOg0Fq>`mtL0@6bt#rC z7Y1EnEfMr^6mSegOer~p5{;h*c8FzmJ4{N`H7Wf>kbQ7a+6?M(e-Ka#78ieJ!8jBb za~(E{ET!`e3AV&F2tASzXC{hP#dDkE-a`gUN{8+gCW{^n;ub;+jW-z?oGH6JcIRNb3)YU?NdW)$Ldi=n+b{`$I8;qjhe`2&3vs=a()WrMSuJ zEtLqS_wY`pU(UN-#2@L~e)L30(^r^29sy7wLHb{rF;*A?wEk}-&5Ttd5v(aiJ)fni z+ozsYtsqA-3QzUbe2d_5EjXo;L3$<0@hax=>0HuFYhDnyDK6;KP96=W2)bOculWH4 z*plkDH;gt7>O)xhzwmuD|GCP1MxFRz=j@a@RuN@(m48~Ki9r)KM$sc;mwj~r0TG|j zs2$fXdYa{0L`d;@^?~2W-+4jEytyQaWw3jCKVY6_2f~bAFynWH+1;u4pG}nt@-eX! z{iB9z?tDAp$sl=9{bIhMX&UA7W{f(g(QL55;2wt=pp+cBs2IKov)ddas^0N*rf{=> zU6TkCH%OS{25=irf0CXX>b2qhZA9-~bwAxA4~Q?WIy{+^h*^2=Lt?zrxM~ix+!FrD zL4Xrfgd%*{prQ`KTYjG#_{d%~3!x+*82moSpyfF*lC+DeA}_^Da?Ku=a!~J}vBxKA zCLYj0c9=x&cEJN={9lD8EMUJyx9l*)DM}vkzrhM(AnYsRvm68tO}P~fX21z}#)5%Z>ymM?nUoPdct;VR z%(05z5hR0UW9*_rwwet^SF#N2jjE6obJ2G-KnQBUA9hQqKK5pcch+YEw6s@S&1X+d zsIgz%J*_D;t$b+0xZr@=wU#qg@I2fHagZz_S-cV+z20Ip!3Jj#P>wBR4BaRZ#$rSgf76weG8xUel@pz83nGzA?8+%^G{4Ns&;>%%$o>|8 zV$uXc9#yI617HO{nBGSiYA{;8pti4%o97iP%m!mAV#Zd@r5)dM=q~IsDV%8}fx$4H z2V_Qb&LaQMI=^5*lWptCFx z#yWXcUJ{-#PdT1g(A2N=U?}!%ZP_3Ko`w6hDxt4cb^DAl8bf$XY%T0qktbROQ|u0> zGR7GoG1&>BTlwJ4VP0$fkn`&dnnsW$(Sjh@5w}9k^hCruuo$0XdGZn+vLO1Ov;A7v z9x<3wEIyDbLWN=KKHsnd9BA$h;=3s5CtR*bGYqu5s4v#N&}M%`$aQMZeN@)x3)beI3u_VrkVGorGr zUZGc@X&L2)c<=*w0+8$0(PlqY>-_z-A1NIz%himKAO&kQlh#noS;5@J12GTWJ1W+w zBmvkEfTvul@!(%~tyiC#aZ?A|;jXqBjm4fvg;0XuaDsr1FMfab$oO3v&y>8ycf-w=_v+8I7q9gBlc#j$2C`)J+jhLUa_ zmw)%6^Z*j?!WJW%zpR#L8Umcl$Sv$z4|{1N8B;9q=NMu@=qDI`Y&2OUNd#af1RbHC z@97uQ;}u0t>k-W^MMS)E1mkv&NY+?g1_|;Q;{F4c=R0H(MtYT}C%CVclvcmzglMY_MFrsd#V%NUC@axYO122c|K zzQ=K96v}#vzF!63C2gT|5Ld^di#A|{hzm) z6%aeg5+KtX7&5qcP=f7pPXjxXf(n5~od1XK#8Q}%l;W;n&<&4UjD!vw&bO5GQM|Z1 zWcmrS9?gtWC;~1~{!$Tfg*O{*mvap$|7cvCtPzBf(0NSVl%4VxZXgh9S-`?6nXuAQ zC4fi`QUm697Lx7we%RXX49sz9Ni|pjd{)JPccpPdh&!0S3FT`F5RHC!z60I;w>0=~ z_NNF~Q)zn^SimJM;ea|*H;tD}`WT@Is4oyySZkjOHaoerS^>8#5d`ecUrBpqNRG+N zW9%d>2k2UDBSBKK>lJo5x~C`MZVB2p?~7BRjVgJ?$m$K;N;cd0)oQ5X=lMMQWWyZj z{!M1mg^e+e{V(wg9F5!w@>YLO%` zag>t zLCePB4P8afSSkCaGXAtQ4>^D+^lVv2WlwUOnC9@ouajga7smI;1EX35dQ{=T+}NrO z5vhDLd$CjYx``f>a5Gd(nrd!@K0gC8!1T6?!_O<#DQAcUbknfnIZ6nK;2kDwY)(>$NA3lG$aHtRqCS_$up&|(D;TY$aFRWnjr!D^&1-+=L4<=fEN24%8_W2mdGsUxj(TW4|%ZxFiSNS%`jN+#L?Oz8EJ_B!}5&(bC zeg8gY=~2o*I2`P9sF+Yh-+-VZ*+gNXljFG7dR~FVzeSAfu&W_6{TP=Jc48dWk$0}# zb_^4(fKW`0JV%7e4oJD0?^hY9OAh8zw=4S;@B2Ue16THR;5?5LWC;;Zt1Tv$Q9#=t=);-9>gmdPgTOfgjp8T_Ki z2w;HMBUg}Pz5NQEN)(-{ciRdXoi^T7!@#n{o{cZN*?3IX8HRBs52TDzZ71){t7NdY z@~eHc%??35;sX@rIH?L3zQe5iko{r?q&Y8a|VlLa=*{Ru3Y7C=gjK7&ec)c^lTNEkF)|s|T z!}c*m8ah)w`==X8ro!03{z>-yWiI+NXnqVl0{}8iHqIr7lBvFsJ_GeW1hgcHAB^Rd z0n@Dt&2MEFnlmElV0fSh;3E+h9RJZ>HvHOSi}^R*6FR%FY=un5N9TW6^+93?bk0qD ze@N(CZuW2;VScK7#pR zkPFq)D*gXs3&~Pj0!~HviUj-k88|Tp>dSN7!z1QMh z-M|XQ6W+6?O#O%rdbvilR?BeR;#>OScTuO5i7lJ?*cv*_Alc&#!+@*zuV$Uklb@j= zCK&1Pl>`4oT}N?*07F{2k&Oo8KDjxindwP%dap$QHPCqJC>~M)GT`^RHh;I}iC}sE zwZIQl)dj!D1xLXa&#J`A51r$F}r-4 zMjZ_ElB#ZlKX3}I>))k$!TQ{!Ja*ZfM2Gl?YWwH+bnH#Ped(rW@xW+y?jO zLxv3XKh;LiP=B!{FhFL#SVsbcc&83y0~b(W>`YHFnjP+=tduU=WUTg;epKZ*8Y}i( zw&8SntyWRFRF9}~wOMBz%$xqaY;3}4dVop1aX$$v*R3~PPAWNl7FMZp0Kp2qJFo}|4DBH)rI zfNZs&A$&}IfaF0OJDJ~tQV4;3aS7qq zna%-b%%phf`b~SHEEh3kmRDItuBc&!>=?f1UvhV(Bl^67#&FH6(_&8meNdXD@TONo zV=V&#&-x!lVMHr_)9XuBBRl9?yhcYy&(U|mN5xqiWv0Vu1H8^i`)eQ z>g^s;8g>1F_9#)HbtQS~*P?T^pc_8Q-k*A80(4`6(E_-TT~mdIu#EFodzE}?>CuX~ zYGtk)3~KilEjIN{W+&zLA3?yenpv)DaFF*3Pn~$tLpa-ACnYcDVxoAsi4ree zLww9)oPF5^ItO=quNq5JJMz!B!;ZO1&ytz~u5jfed1sOd>ocP`>*Pf=4de)Fm<+OoTv z_b(02vrjwAIe+AZcX7X=Tn}`5jtyK#Jvx>S1A87_ z!!{b*wr!`eZQHhOtFdj{wyh>mA3?VC4SYB!A93J>$Y6YM2f(AIY4Qs|hzliyL5Zh26-w@Ya5ZBI2B?$39tB&+8CZG7#5e30c zWAzwy=!L367t`V8z*Q@LXP1cycJg# zXHjuw=~mJe$G1a%tm)CO*lYhm4ZSwjLGpFR7_2E6sP^pP%CRqUYCH={FnbJpOkdHx z(RmH5A@6T4DGcIxiB^CVK^sJBps`7stWjTMS?l$KuGPb5QRRp26IXs%PdGd!xt(U1 z$5>9mfiD8Cb04kLjX5AqA8cGoWb-h=6OMLH+szuP&`|mO>o@we(E%W~=9=*YtmmhW^2=lQQ)(=L7$*&V(tRP*nfm`K?mGFkG|G;r@ zAj!6*nT5HWFL#gGAs-KRCYQ+RKMP#+tM;?8SfVigG)A9B;H}Y>*{2rS{E%McGdC;B z8u^QAoy#8^2doYNzWpZNgGZYgD)7aWnzn*|R(SNK8u70?4LgYTM9W8TA148i$jlT6 zLM&SPyZ?=OkxCu7FuT|nbeT$7c-E!Qi2M3kyBvZdu~i99SyXR00bS!V)%14($b2OB ze`td#m`PLO&?AlYTJu6&6(3)UU$eE1xD-O}vCnp4L{6EQ{VqU@xnOAoI%zFR5q;daGH1pV z@UHX-0=T!AQ+8+KTeP6(spq=$ioN6laTiH)HcdFU6nSdA$h?z$JCYtHIM&ft1bLf+ z95O6u7hBv07_c@0ji`>6!|b5psY37ZzAFIyPSAr*M8n^Bg(&lGMH>uj+q=2O7zVXL zsveY!J`A1uYY^R5{Evy!Lb0W(>V~YSu*%W=EMddRFXlu)W`+@7zsS{@xFbR>gy*w> zW8RvEc_DVJQ%{aW@bTkz0??PbB6Za}%k?Bt^G9%-ZxF;6i1bxg9q*I5mdX$!^`XwF zGn#lx+JdI869f#uu<|QL|NIvww7?ggSl4Oji8J_)Y{0QDDBw%4i4MH;xLoBCeryb; z92iKsmm6xlRVHS2kU3Q*e&3qexS*)(1xvF`J5Bn8c%SO+9wYjCLJ+s}|8D_U3V=ai zwh~6GXClB=jNaD1+N-Gy+dSLwwMQaPIDj!ByJI6IVB7R4t#3K@1LMo-0uxZI8-t=j z&C74UZfs~WjAI4;BVuw8odtYv9XKle;APopKclm245#6}&>Gh-X=LjmW)v&su%Z*> z`U2E;dI}~f=#R`F;|9Qz>C*DqDjDl|31}-$g#4TN8wpW``yChwd~fB=I;Ct}BIPjt zS+3DlPDFRucyCr`ms(kw&f#jP1Rj{pFO6$8x+|FIbXo$=OA-!vy@0$C-^ddLAT8EYm2HW~zo>N| z3q>jpd??xHKg#+_?v2QB1pKo+GdNS0hgW@kcN(%59Y>kPlUynRATgUHQ0lLVaX(&R zI0RqS4L&Vr=YL$s6SoHl`y+Fr6QR1%e5m4_zB@K5j#|qbVGJ1ZY!hDJCg@_eBStZ4 zcpW1r@PpVVf^l_v(&@jqlo9Oj5O4oAXFJC(lH$l6AKP1*RkrooV?y3N*=&7Iq%dC@ z_%P+w47!VN*?CUF1JnRv(F_S)m!1KGRpz5ETgW_sbr8KETfQLjLq@}A-rS3?kD2lJ zpJG}*2}(_;tFq0`WB;_EygdYmts@pY{|%=n)b2W7vrPN*gs(26r@pe$fH!sDoH%Z& zhY-t15%X;?qPes~7NNqv2|Ie9HfjY)sX$X8rRl3;xl+XM%T{W(&%w7${GY-m&d!M6w5=)jZHoYV$H{#GGn=%A-1mvpK(MmRX+E3Ax)Wj23)& z=m^D&SYM(qoOE@2%luUw)||SiL7K?pd01%=<`RBJa`E^9WC|FUDDdSByvf`UWwya! zP)4jA4n_KO-t?_7{Hr)+URH)kaQZ5qTHjkHq(~1zfVAcD+aXmBzJH~js3EjL3Py1ejrZC5t_4{b?1Z1U=DHR=8bY=J;_=7L$^ zs7$A)!O+mKx6fEfIJCfx1HDkv6!YMZC;R?-`J(E&)`XzsLZrne`l@rSrmEu8uw4mY z1%}ZbJAU>ZUwWq?Z! zd=U8Oa2x%fN=~Gx-gD$k)mV3fA%VJP6w=;WRLbl#m0)kA>~r8)(SE>{TAQU~u=kME z@4xR1_6-fL6jgE(OHdwPv;06(aHCO6B}1SZW&(GM)X){+Z1phW^1&-q7imH^V5hgL z`;07|PR2ZK4^{9Zb%-a@Jkb6RrX)N`+Br zg1E?l&tqGZO`1Cv3d;adwFjMDTCL_=Q&X#x9)#!~&40Sr(0}}Wh%*A9)FlZ4;ZDkm zmoI9DQsmWH&+UXq@5kB<@$}-3Hlsk|-^maw&_!ms(`ZEoTKy~4k$PpD2nN29m37wz z6L|cy?s1k^ABE--y+?P{-QH_@+v@$o%|O49{c|rMucLJ-7jnjBK&D0Al`?R%nBdd_ z857QK_x|A7xRw6^e+Y2|4#MDJ$O17U?`Lv1=c)d~;OBRCRLEZ_`LZ_99MIhd7pDUU z9MK{B<2FL}Rhh7)4)d^qydq&$#Vr!uN8!(JHa$fDit&w;e7#)ag?4vIeTmT~y=*(; z+v|BRn19d-t5+uDI?Mf$u~ZtvB=n7l-@j%ldACZyE1Yz9#ZS9O9>zSq0k!8tWYAa< zMXsLG)7bIpNZ0rkqRJuXyHSZQFVOmArb9DbIa^m7lz*VpkX`td^@?B;9w8b-Oil`S z6B$g3rpDS8VB$fCJ(y2x1XdFlxJVzoLT>){AM|GcE6DjJpQQBE;imz>Zb_ty8uzr3k#!b=21j>A%w9OoMAry_Z@ujoW|&el^J@u|c6AhyOr--O8&jbWDBY z{_&JrCi8}LYM=snmH!vy)1I%-yLDRYtzS28lp>hSd4_-`Os_t}x2dSjjJ`Xh17E54 zd(=_oAyO*K?r&`AF{Fsrw*i}EJ>89UF-6Hu*bb0mE94kyyhJ{tAKY};!NT;^T?!GA z%k(nHa84>UHD6d*0#8xF!6#)j8*lqwYh~6U8`ZSkOWtq6UmkxZzZN}u8BpT+tr3nf zdV}O#y}RZM=>+uEA>Zj8re6Q25q%05P?k#g6A#v!f!T%*_#8-bhC4wVlR=;o%1?sE zl&Nk>cOU{Z`QNE2PvM~!GOM=C!_csuI*XaUgwhG9DApwuW3>Es2wI082IbJ5>_{wv zh0Z!0JTu!Y+P8pp?pNMOc6rK;&Su0MVqDMjrcuIDv&upbiO=*SRe5Vdcx@MH%WkM@ zs7!WCpk&h?{(?W(5-fsI%p>4jom-llwDq6!gKaW0$k4s4Jv?NGZL6Gcx{f z;|<^`202Gkc)(TD3~Zh`R-Wz+XQZlGmvoR!zW}l?5l*t%K3p9wJebmg&asW{VC6{D z#D5rPm%I;(8EI8gjMuZJpPT?0LE&T<;ok{tZc(A>ZmZ1XGK@k3FOE?}o@!L5D=n*j z3{uVT(}yqLc(K%}Y-iQM6gR~v{$rY+`4ez6d-Aj$R3^fXV*jCTEim1*)ZgI$X>a_b zK$pwKj!pt1z*!TxX7zZP*#!leg#EsRn!Pe7Lwa+gzoidAK%GdFeGx1yoc+1#IdNVl{sh zk_L+|y)}<<(#2u#gv?|@266b>1ik*H5>s9s+=EdJ>^}BYUA*%C!;sC(?3^TF(o+Xm zXf^3~E~$_)6WOL0_P&gSYWQ&!HG?Fj+m2Ens=6=5(QXg@sU@Yk==UqQw|#N>#%DUe zcaO#3$p4EDFe-Jp7ZkA6TsB}(tAiA>NG<=E4nJb$#u3+lf^@ynUsRpCXyBzJG`Pbu@Xwnf+cRM zAqw$nD{bVOa8YHZO#d@9j)*{Ptx`icW5vwDyhVUQIL>XkYOpkoc5prSU8(Hk)6CUG zGumQIv>}P2#1^$j_M$Y6J(OWA?&y6TovTRqV9w? zC8DF>=9ctBh5R0^9IB~nxiH=exm1FbYw8rjbfClcZ|g!LMcQ-#_CRo=>i+McyplzC|26>hGbT#!Y?Tlf3+~{G z`KodFuH7?#T}Vo2V?e zOgOm@1)70E3w*O}2I^|zp=oRkjx}zK>95JE))L4$up|D$2;Q6&95A>LGugc{ z*(M{kc|s+%ppq_5nrs|{v|Bl?BWsWwX61=_5cs&sipb>lH^?2V;X}zKD9_Yj8Z_gM zfGWqHB-ed)8bRbEZ9xok5iNg26jMJ)@0fX=4PNGM)Wm2kQsk|DOnX-FezNWy_JFm@ zVLu+;dg3QIuQ((RaP>sl0h;*T3yt(gM>$y(xtbtmmhdR39ZH8wFT8d}kh1`sE%~BW z;QI1gJ=#|8f9C&CGG)(vzJfU*(@NLFB>ZH5Bl=U@Aig#?U75rC304MSA06K{{VQXR zN1hM?)AjmmZqGt$XaiOdq=b{p!rx?9qifD%%v<^F;XxterIqHx$_s9 zeo-Hvd7F3L98|1fG{)Bs22*pZ?4BO@CDy?;ze;IwT%F-zf9d{=_&mId(r36GJGNMW zO(e0I--F!zwWoF1YKHd2%%P?oDy-;FyEE%~BUh0L8G7UF(ezf{D5NRXb?19{j{`~( zU>~dG`-fCp+4g3Cz_ksEIR7H6$c^UPq|OFr_`rbH#oAnp7yK_5Vn4Dl5?I+kXJ+AM z?uN|6Eh0lNcy~+XOh8|ETf2XoPJ!3A93!REM2Iu>D}6j9AOC(q8e$jWm`Owj?QRgD zNnJDDHct$AT+{G=e36sP)Z1F+knV3rAH#aqiG@JO;5-=t@($0N^-+hWyYwBa#$laD zWy}BtQ38;b$cy*L-L$m<+vB-Mf}3++eLt=+ncsZJhsW3=2y*aiamKH7F(28WwHFX|W!{zM1;+LOZCjq4YvMD~*t-SP1+%4I?89#f(EQ5)Z<#Bxit&`xOj8*F-?H z=fj1s+w(x-6#7dFnppQEgMl|2Qi^EPlq`D&+;Jo|nPR9OLJgiN$HZ@U{5)-q9S6LN zORpL1xTdg`>c!~HFfJqAsWz{53G*hy(lAF}bwyU+EOduSb-AWORdf<#jQbD1+ z6jLEX-k?wWkHFbY*9bd0-u}E!&ifdu!LhH~*!^mH;0ds4v_@)iQ8h=P&%_x8Iyopb zXtdbgehOp;Jn4quU?7`%hl_;dFHX$B{cm3j03Bi9Q59bW!Ru8y4u*u+6mbF*V8imHWV zYOioM+#1$RL2}ck_&?QaMYSbg59(oPL`yspVEoPrD}`}Ce7g%Y(}q-qn}w4UX`RxN zeH~ukdd<1Ez5ZL?93mUIya)%wFdn;&@C^mibL2dMy>Eo=YPIw2#^_%noJ#b#0 zyDfad#IwMc1M)}#jM>A7Kg2-bYt~e=ajU7CFai&3gWZJJ(~Vth(eH(LAGM)`!$s)e z@L8Tf$5;@3%-ANRyCdRUX>cHglYGSD*i#E5!PM25Q?*&}nYFV-0=xXSNtp#HxH-|< zv9pI+s67ny>!4XSttygzi&f{MUh&Qe!m>_am_^ea=~82MuX=gV{Z|jNOQ`0DdMrZD zi*3&*gM>1#Gfl)G8GDIcd_$aL$}ldY^|_F*kW%(Sq`KJ8R>9KBX=Yjo<=%YPQUOtc zH=0Jp%LzV|YTI&*gzD8jL2*vHphjP<{}&k{{x34Jtzw@jhcvLHH_j|3Ba=I4h)ib@ zy;y_NA%=}GitrXfJI3;4j3+b5IBMY+>JWhy9p4l6P75{_)WK1DX1GV97Mi6Nyc5yX z;CUY?MxX3q>SxsymC%jmzyP`s(o!VKR^IZt#zW>h*C_ezot~1=@{yceJR&6Yg%5ekm z`~H5b%LZXv5GhmvQrEXB$vYTYMfI+;Kq)EJFabrenLp`a9w$$G@oNtvPGVaI%i1rU zZ1A#M^(a&u0r4Jd3P|jlxLJA3 zexc+=e}h+S9u+u5|Y{w zQns!TqO5^W#>upCI~`T<{8=)XRMP4r`tQ%xYT$(jNFKq68u( zrr0ad<=tLluGwoO4$H3YNeZIGt;CV0yL*`m`Y>*IASNiBJ!=%63A^#Q`% z2X8Hr!WJ&rx0^9OY~)UXLSGz?Qst2rVtTuNTRQq5BVK!O)8q1N$hVikp>sxxC$_<% zX1o{bI^h0*Y#*#Lm;(f?l73u|6W(dbXyDS)t6x&hyRz;JqS?9-=uROe|LigHUKqPc zG5CYR4yB}-ZW$wg@jiB^_G4t{Uhi=Mk}>3BN)mcf=$$_u%L{aBvXG3IFfQ8krkK@R zP-E6Xht#9x+hLyn$`Yct9Juc7mbRwk5-*G6OL%X=dNmIG4Ps7R9bL71P7xxwId^(; z7!knODtR!1Zmep*t+hwlOFHb*pdjkRwf~iLlRS^`@uBXPiaA1in0q}0la)g}wZ8Bn z9KUEm>-IvUo}{MM#uAb_%55|!DR=6tej}pGEvUJ(ZKr#t&dG?UKW$z-EIUltF1fMO zU6!Y{m$^3?rmxOQ7_x9a;|s$pjcj&3JN_Ai+QTQ#-qVVQzNxQWvaQJrM(?3AAU3+CA4_NKH4X$@)viK%5O*a*Mbch6BF1UUOVjVO(v zha(7&Zti=3E4lIU0g_0RRE@l^4o^r`GitRkkB6P!CYL_l%VAdv#L7(vaKFru29hj!XoO^k?5=U&LPOZGqS( ztnmF(bM+(JlXERoL%BJfBDi_6V1mcOfJ!|-BK3`6y@3r8{;$lYKSHE}V8pdbIjyI~ zf7ujhM_0OP^1n6=yg2WN&atKZjH8QA0SaRlc}ODJZ7G8{wNBL46c`jC z3TJsdxrqCnv1+R4Frz?pml!9E=(#Kvf_HgAyN7~s&nK(46*~Cz6zbxi!pkk)gO^u@ z-2(R?WtSmY4^p3bKeiq6%v6a~K4Tyhs|aJ=2TnB@+%orb`cI}4yErQ6BKxA(IS&Z=#hW65E*QTS*$c+RhGP-gvbaZbKw@aVGY0j`w$Sd2 z;pE8}XFUc??n#P9(lN-SLjA4OwrS16kNG6cy4u1wnrPjHlC5v{ev&ovr%Ad=e>gke ziJS{bFDq^gjrhSYuDL4h+s)d6lQhDyOo7_Q#Ua-`<2G7tw?#EolO@Q^UkLWGsVFD?4bqN#%FA zprBcGYQ~B{dmm%Uhl;hzi_)%(a0hfR4}DthkKp%W+~>!pFJ!=%V`ec2h1egfhzM=} zi#Y-^24e~bDOi^^5q1<1MF6K*y!A%ip}P3TuQ9OJ1=aKs8P81QnT2TPRxTuTBbJ+6 z*fSB@@^Dswm|$U~=d|LK5xBMQSk1FXQ8kPW^}a>Wukb2nAtTl3Fc!__A1TFB$_~Wy z@344SKJvM3l{hWyOqLc(_ZNWTK1K_Qdac-q&;6GK&lD1LvQ|64p~z?h-=-1@S#}WG zEhN07=N8;8I((sr5UdVCSiA5{Jz8WhFmXpXcz>DAh#GZR1foC0M+MwxPswzBF=KV` zr(oWThNG8vtCgGyPj7y>$P6*Rzq;KuTl0R^Z{VansfT4%kV-bMmQc+Lus9fgV~V{r z8RGWSdUp0LZYcw^$n05v1Z&z!q%ho|L0(eDM?EDi~l*B_7 zB&2r}H=3qw(AWie)F{XsSzUajn66yt;K5anEawl411MdqI+4F(C?@|!s$|#EQL)kG zhBWU-xAD`M@aLGia%D@Apq-Tubh%Hc^&rIz)(l^a`?VD&IV}aK{fOwyq-DMn3Duvo z>wtWd{>c7iu-(uiGoN9^i$=+}#D(DT!)#NmZFd87E~OE3*|9GeE@r=SY_t>2_4}qw zpIS-e%3pK4ZWp%&yE4_5&rnjeQF5N))wgh))6Z%$a<+AM|+nQ6K2^K(+UQK8*o^oXtX!^qz4$BVN3h zLx*>K^_3TiN!q2JW$^zC{co~v!_qcMJe=f z2gnXj^5Im5FU7lBA~Lv=?La&~S_0_3Yp#T6BIyzdjQ9EttFCYdR)>iaSfXMGLQj@z z(0AP}I4`jozxpxEZ_3f;mYKN=;(p*6tQoyV1C&n#_1ZjS^?Q-rByb3FlmBN)86Yjt zHr$tPZ^?@fG(i~_^rI6#xK6Y~GczIrY4y4E~ZGSzY+Eq{b8R|!>*o21y$;cNr++$)lf1fUc-i z-ZWSEiIfcLlHee#;Fb6+)t1`SJCS~MBtiyaYiEPAWMPI|!!AKf;@MrI%ST%>vck%W zoX=TQhBX!6Kj^G`bJHaNq1G-Ket7p$Jtlc7lr!yL4Z#fCI;RFvMzS;LAY9Kx*!f>U z=|7iMTjU#!Ns^ksr1OePk}nq`{WTZ7VB{T|W5fq6WQ4Fdn$LA*VFzkukFW0VR1^)j zAuqmdZs?;N%r3VY`bpSO-u~D3jtuD7n>4S^)CkJG%ypEv$CI-b)!Q!cikqCJa!HGI z+du7z2Vq`t@@&d8kDYLqqMLIj-r@G(wPrWBCUlE;Z&VMuSA-rMWN_3a@E!Lju}7f; zwKNF^`iC^MEut(RcVhI(oT_3EpTS;F^LglWjbMwD52uvgaNP_!o4POFxE`z7V1kk* z#k~L=X9WZeQ589h_n7UNZQ!36ra-3E_!pE64=hx7XQq8`#_N4VcW2|dzELm1ELZtv8c0%CERxW6#KyvySgIH9M`QNQ!y2`D0}nZ|G`>T&09{!!1uwx7S5 zJGDH~w#b|`@BTyKxjX;3iSr!}3Tw1WEOb7Kq$~8@uNmNRl{=FBVt`3Bp(^@-?1>M< z2*7{tLT;f{(e%0zYePWN+DS(DgS=0u#&z}*@pTSa4r+9TyeR+Z&V{nlIgh*%=J^fY zX2{~ky47ntCMv|LF5gNT`=2L&1O$>qpn@PdOTq%eAr92%P8b?C7iM`7sh=hF6-@tX z*uGc172H!>pd$FLKdP<}U?A1zdyte`fFv_TW@n|-R`^flZ?tsM(lALt;2Dh+`e1`F zKGa^pMC4Uwd@5kVah2EZygDJio2Qh#7pttl^S3e> z#$qg}+6d|1gpT-2xNTUvrla_>C?5~`>xa1Tpad38Q<*$U|T{A^1j@W$jD%xbA zs%kYUd$a|T8~9-*Vnzt1uL4S^k5t5Zk-P9~tQm$EpKfUVA86G+XD=Bpz&C+7zvZmX zz0Q0>Z_wldZ7Z$qU!j-efnH_^aKv6#Z|yIL1<3s(UoPjF-)0l!}^r8I@okg5qJ-jl-v0STwG5nX%9Gh;RpYSqlSXO$oL zaF|E`IA}}AZj&gXkrQOO3A7V_kANTN>J~g&ChM*~U+yTjI|cmmajK~|@~O-S*(iTR zAG&l@RPh2J4J0@4iuu(nwY(wsee5y>iq4L*h?2C9KAMB3bfoWFYgV8=J z<(cP0Vss4~&NefqAdL@szj03NKDou&EiBnm158<|QHP|1zh|U6s4>M~R^!n*Wt!;% zg34%@!w564oJH*_g$jZ_l|`-0e~=yUwE6_DLo(e=fpUus)Y&)*LVZ{X)>fpaNMI`k z5_BN6w5zBSZx>tv-%=b<- zS4%xXOw$7*n)PtNX@b@8vP?{S*z|{#)5Cj~7*mm&HR70@SpFM~pdxJ~CM#)ag-?r_ zF8evU4tx51Kw3|`#a3iLOKDL8Bm4H;3PP_iA+s*&916T7MResX_&R@_@l1Dfz5a{C zsVF+ciy1OPDrHDpe@L~Zfopivtr-m zk}i(F$p=dqG41t84JmNNxDq9VP^>)7+bg)S3-?K7DxbZOL6s&B5iaeLOhcBsuW^bZ zw-}Z43&x}VlA161r7J5dkr|Ls8ngy6V~w(YGg6X6uzvQDHpwDb*&z#{0$)f(8d8?2 zGj<0b>v*SUiDMu2;`1WD^y>ER3MA4?@O1BGgQds%o?`*wBOiDEIe;pwlYI3_TVO%Z zaY8ZFW60K@`EtMJx*=ATn5da?mlk?Dj{h`d-8OrC&N$==C9pDp^n_g`kP-R%H#Lbv ziCH%o*jpH%O$1nq#jw+_rUj~rYTEEj$*3agQnzm4dce9uw1oS2PAfxx8G`Z|e994Y z5$Ol0Yk2;Zv<_B<2F*NVJVg0B%L{?>mOGAbd&GmZvr7j&O?l-$KawMh%Z9CLq56a&{&v>Cy)zdKT%W#Nqf0U+as;{uH6)@x6W&TLAipASx;Zf#rT=T=oJUV{Jx3UY;F2N9#LgValKhDzw5nX{>dw1 zU3%=z>cR9UA`LDsVSlK@O#Rc7;eGH`e^EsJflx3vJsxMb*xUKye9v;tImFH& zqQ$KHN&~pV&4eI9S9N!~ZnBsr8k!lgxz_Rvy zI?qyqKwIrX?s)K!kQlOR2m*IuVpSjl*AVZ7A9LUL^;Qt2wTgs$JYetWX$D?vkZ!t# zkEo%P*354cT`tB^S6zQAlG*>uCqa!kLK@(EM}9|qF+K3h$|><>CrvPbn&4J_3j=CT zLvDZuIeU~uUp_)V>x4}EG*c(0KJd#QRj`3hJHyAbI|Mh)=R{9>jsM0WZUREMWh*Zo`7sVL_*)B1ClV zv6|qo$!$DX=(76$#g&|g)=c^NBi4+zHhWhF`-4HU0Wzu*Diw&98DkN3uWuB3~9?^16 zz%Vd?n}LZ+*fp$X{G$b7sxROV+gc{gq+}FO?B!&a4fO@=t6shIE47&rbpSj}iX4cq z;`*OgXKC7LeyJqjrkgL*S%S^9a=PLWJ$7I^qvb>PGY!~pJ9SdR0P z#RvBv^~1UzrbQvP1f6qXUcKKZKN`#UBO-C+CX#rAKzj+hn8X0ikM`~w=X@qP<$HlC zIw#`W;{#i$i;%mVcu>fDA0-?mxoWo0$A_`>wbq5wWcpuDb^zw#v-@<*_=AKxM9Lt;OC?uC^YlNwIU5c&-skEYTAwhqdM6X z`6s+7E=50lZw2OCzrs~NBJ}Sdh3;j+OfRht&T>%(nZUVaQV(BN6LPLhRGA_#{N+7A zZKIW8ttCppIfSb4Z-qyU{(IZE$x$NXUl7nu4f3E5QPg4{VH~r+Sq0A*0g> z12I`O!!FT7KGGK4Os!IjfTr(h3+R4mqm#GgKA~D;ZvE3}fzYnvB4uJkM+$cf8If}0 zaS&s5CBBCnfyw3a`~-$%#uGooc{W0R1lL(){yd603{p2lm5ZD2Pg8g-FcluD$6gB{p4ayv>*xt3@piv+CU>xbT?o+}|<%=~ul#S_(Z_z>3 zLP)?&LO}U|Cr7(b!3nb~F`mSZ)<=Ry3WuivqL-(N4%@T{uAEhP#mIu4_ z<`p>Pze9}Lyvu9wTt5jUc;*sIz?oiqm4@Q8kDVdy#jr^adx%Jr$(^Q*J8jQAm+!Sg zbQ#ErH12Vn-I*mPYpk97o2deTo$Vy_yvbcr`PwPOC`KvPsJ;vy3!8%FUhIQf`q{fdoPX>!m&+`)WumXg_!cZScqbFVe?}nuu#5f&4rjCYweP zP#7Jny6?_#zqH?)t_}o-&oK$1;MZGXIp^}sh&w)Y|0fz*|5KaD-JPcHW(9mFVfBD! zCU2J9S(N(uJfyb#F>rsIaf#lD>pzYvy8M}f3;YLDjUcM41Qnl|C6u%QMD`MfSu2jRDqer=Qof$4+}0xGnvqsdc=s{+aV_j{-gssHMs`VgZl~1q zfmqQLegX6M?#3pd#Bvn_blq+nY!A$pUZSdP?jW=+JuY{kd}&=Ua0c~ z3h}$oH-lfrUFRel&sNKWejNVI^(oKCa}wax*c3^GX}W3+q@tfJ2A<6=W^&MMB|u`Z zIMFsqc~!NwB+A5t=-r`h7j?A2h8h?eg%P*T&j%HjP(e`N`0)t$xgkayPs{I)L5!Vh zIMn>W5hN5ZE5ycy&hzY99}Pm~Z^0W9J%VhMwBtF0haDnQ?JE4H+RGg*!2Kn`Ah(`K z*MplgNJ%{WNC4x9RL5l>BBl-wAt#pP%lK$k0`cMcHRAd>QKUPeEA(g7|VGI@m`rI}H}LPN0FOHdAb10)1r#3KsSEW`PMJe#09 z(k|fLZir`53hiB2nD&=X1hJZO{zS-mO5~Al!V)u0sNL8i+7E#byJE@>`8;xehWZyD zN)!?9@8ra{mmf)BOeSrRzAKGO%KQ-(e@|NK%FI*(vt-05tb!

v5nn(TiKjJ-lsR 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/tuthub_32.png b/src/main/resources/images/tuthub_32.png index 29810cf1fd938e8568946ad28ee0c678564804b2..33e479d37ca626887d72ea2cdcc6b6f428f9e08b 100644 GIT binary patch literal 56148 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 diff --git a/src/main/resources/view/CommandBox.fxml b/src/main/resources/view/CommandBox.fxml index 09f6d6fe9e4..639ed065f17 100644 --- a/src/main/resources/view/CommandBox.fxml +++ b/src/main/resources/view/CommandBox.fxml @@ -3,7 +3,7 @@ - + diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 8fe80606b9b..c68b68004ac 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -82,39 +82,47 @@ } .split-pane { - -fx-border-radius: 1; + -fx-border-radius: 10; -fx-border-width: 1; -fx-background-color: derive(#1d1d1d, 20%); } .list-view { -fx-background-insets: 0; - -fx-padding: 0; - -fx-background-radius: 5; + -fx-padding: 3px; -fx-background-color: transparent; -fx-control-inner-background: transparent; + -fx-border-radius: 8; + -fx-background-radius: 8; } .list-cell { -fx-label-padding: 0 0 0 0; -fx-graphic-text-gap : 0; - -fx-padding: 0 0 0 0; + -fx-padding: 2px ; -fx-background-color: transparent; + -fx-border-radius: 8; + -fx-background-radius: 8; } .list-cell:filled { -fx-background-color: #ffffff; -fx-border-color: derive(#DBC4B2, 20%); + -fx-border-radius: 8; + -fx-background-radius: 8; } .list-cell:filled:selected { -fx-background-color: #B1C5C3; - -fx-border-color: derive(#DBC4B2, 20%); + -fx-border-color: #3e7b91; + -fx-border-radius: 8; + -fx-background-radius: 8; } .list-cell:filled:selected #cardPane { - -fx-border-color: #3e7b91; -fx-border-width: 1; + -fx-border-radius: 8; + -fx-background-radius: 8; } .list-cell .label { @@ -123,7 +131,8 @@ .cell_big_label { -fx-font-family: "Georgia"; - -fx-font-size: 25px; + -fx-font-size: 23px; + -fx-padding: 0 0 0 5; } .cell_module_label { @@ -153,9 +162,15 @@ -fx-border-top-width: 1px; } -.tutor-list-pane { - -fx-background-color: derive(#DBC4B2, 30%); - -fx-border-color: derive(#DBC4B2, 30%); +.list-pane { + -fx-background-color: derive(#DBC4B2, 50%); + -fx-background-radius: 8; + -fx-border-top-width: 1px; +} + +.details-pane { + -fx-background-color: #D7DEDD; + -fx-background-radius: 8; -fx-border-top-width: 1px; } @@ -163,15 +178,28 @@ -fx-background-color: derive(#C9998B, 30%); } +.command-pane { + -fx-background-color: #F4E9E3; + -fx-border-color: #DBC4B2; + -fx-border-radius: 10; +} + +.command-bar { + -fx-background-color: #F4E9E3; +} + .result-display { - -fx-background-color: transparent; -fx-font-family: "Georgia"; -fx-font-size: 13pt; -fx-text-fill: black; + -fx-border-color: #DBC4B2; + -fx-border-radius: 10; } .result-display .label { -fx-text-fill: black !important; + -fx-border-color: #DBC4B2; + -fx-border-radius: 10; } .status-bar .label { @@ -330,9 +358,13 @@ -fx-padding: 8 1 8 1; } +.image-view { + -fx-background-color: #F4E9E3; +} + #cardPane { - -fx-background-color: transparent; - -fx-border-width: 0; + -fx-background-radius: 5; + -fx-border-width: 3; } #commandTypeLabel { @@ -341,9 +373,8 @@ } #commandTextField { - -fx-background-color: #DBC4B2; + -fx-background-color: transparent; -fx-background-insets: 0; - -fx-border-color: #DBC4B2; -fx-border-insets: 0; -fx-border-width: 1; -fx-font-family: "Georgia"; @@ -357,8 +388,8 @@ } #resultDisplay .content { - -fx-background-color: #DBC4B2; - -fx-border-color: #DBC4B2; + -fx-background-radius: 0 0 10 10; + -fx-background-color: #F4E9E3; } #tags { diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index e626d283412..e25b02c4266 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -1,19 +1,14 @@ - - - - - - - - - - - + + + + + + + - + @@ -26,48 +21,61 @@ - -

- + + + - - + + - - + - + - + + + + + + - - - - - - + + + + + + + + + - - + + + + + + - + - + + + + - + - + - + - + diff --git a/src/main/resources/view/ResultDisplay.fxml b/src/main/resources/view/ResultDisplay.fxml index 58d5ad3dc56..8d2ad8747e5 100644 --- a/src/main/resources/view/ResultDisplay.fxml +++ b/src/main/resources/view/ResultDisplay.fxml @@ -3,7 +3,7 @@ -