From adcc122345ebd857b6caa660c6816561c8894851 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 2 Mar 2023 12:28:20 +0800 Subject: [PATCH 001/420] change theme --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index bbcc99c1e7..b032784127 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,5 @@ +theme: minima + # Duke {Give product intro here} From e0f7d7a1b3f1fa4fda5cc946b8e765386c42a7b7 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 2 Mar 2023 12:29:40 +0800 Subject: [PATCH 002/420] change theme 2 --- docs/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index b032784127..57f6f51a75 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,3 @@ -theme: minima - # Duke {Give product intro here} @@ -8,3 +6,8 @@ Useful links: * [User Guide](UserGuide.md) * [Developer Guide](DeveloperGuide.md) * [About Us](AboutUs.md) + + +#Build settings +markdown: kramdown +theme: minima From 9da5f002637a876e3e14dad2d34770909d028aaf Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 2 Mar 2023 12:50:01 +0800 Subject: [PATCH 003/420] update gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 2873e189e1..a534411bd4 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,9 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT + +# ignore class files +*.class + +#ignore formatter +*.xml From d6f306b0f3b102b1266d22c9ac13ca0ebf3f51d0 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Thu, 2 Mar 2023 12:50:32 +0800 Subject: [PATCH 004/420] modify aboutus --- docs/AboutUs.md | 14 +++++++------- docs/team/thomasjiralerspong.md | 6 ++++++ 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 docs/team/thomasjiralerspong.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..76147f56ad 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +Display | Name | Github Profile | Portfolio +--------|:-------------------:|:--------------:|:---------: +![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md) +![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/team/thomasjiralerspong.md b/docs/team/thomasjiralerspong.md new file mode 100644 index 0000000000..736157107d --- /dev/null +++ b/docs/team/thomasjiralerspong.md @@ -0,0 +1,6 @@ +# Thomas Jiralerspong - Project Portfolio Page + +## Overview +Exchange student from McGill University + +### Summary of Contributions From 57db44dda6c63e9fc0a56881d89e991eb28dfd43 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 2 Mar 2023 12:59:32 +0800 Subject: [PATCH 005/420] Add prince to AboutUs.md --- docs/AboutUs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..4179864183 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +| Display | Name | Github Profile | Portfolio | +| --------------------------------------------------- | :--------------------------: | :-----------------------------------: | :------------------------------------------------------: | +| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](https://www.linkedin.com/in/prince-pereira/) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | From 2c59e94c7e11d8f7474daec6be5b9cc7f97e97b5 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 2 Mar 2023 14:14:19 +0800 Subject: [PATCH 006/420] Update AboutUs doc --- .gitignore | 2 ++ docs/AboutUs.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2873e189e1..98cd22ff56 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT + +*.class diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..f921063bd7 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](myphoto) | John Doe | [Github](https://github.com/Ryujikjs) | [Portfolio](https://www.linkedin.com/in/ryuji-kow-224894227/) ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) From 9fdef44da0912907077e63c05c3a86744fffa877 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 2 Mar 2023 14:41:53 +0800 Subject: [PATCH 007/420] updated PrincePereira.md for portfolio --- docs/AboutUs.md | 15 +++++++-------- docs/team/PrincePereira.md | 7 +++++++ docs/team/johndoe.md | 6 ------ 3 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 docs/team/PrincePereira.md delete mode 100644 docs/team/johndoe.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 88c0438e24..5fa429a363 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,9 @@ # About us -| Display | Name | Github Profile | Portfolio | -|-----------------------------------------------------|:----------------------------:| :-----------------------------------: |:------------------------------------------------------------:| -| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](https://www.linkedin.com/in/prince-pereira/) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) |[Portfolio](https://www.linkedin.com/in/ryuji-kow-224894227/) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | - +| Display | Name | Github Profile | Portfolio | +| --------------------------------------------------- | :--------------------------: | :-----------------------------------: | :-----------------------------------------------------------: | +| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](https://www.linkedin.com/in/ryuji-kow-224894227/) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | diff --git a/docs/team/PrincePereira.md b/docs/team/PrincePereira.md new file mode 100644 index 0000000000..47ad57a79f --- /dev/null +++ b/docs/team/PrincePereira.md @@ -0,0 +1,7 @@ +# Prince Pereira - Project Portfolio Page + +## Overview + +Hi Im Prince Pereira, an Aspiring Computer Engineer from National University Of Singapore, and these are my contributions + +### Summary of Contributions diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md deleted file mode 100644 index ab75b391b8..0000000000 --- a/docs/team/johndoe.md +++ /dev/null @@ -1,6 +0,0 @@ -# John Doe - Project Portfolio Page - -## Overview - - -### Summary of Contributions From e76bc5f1589d95f1337c6cd7bca28a52a2d4c33a Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Thu, 2 Mar 2023 14:47:35 +0800 Subject: [PATCH 008/420] update aboutus Reynold --- docs/AboutUs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..053f17fd7b 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us -Display | Name | Github Profile | Portfolio ---------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +Display | Name | Github Profile | Portfolio +--------|:-----------------:|:---------------------------------------:|:---------: +![](https://via.placeholder.com/100.png?text=Photo) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) +![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) From 74f4097c0cc97386e42ebba3222e881bd7749b97 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 2 Mar 2023 15:09:48 +0800 Subject: [PATCH 009/420] update aboutus --- docs/AboutUs.md | 14 +++++++------- docs/team/RyujiKow.md | 7 +++++++ 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 docs/team/RyujiKow.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 4f843b5caa..cc4cdde9c4 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,10 @@ # About us -| Display | Name | Github Profile | Portfolio | -|-----------------------------------------------------|:----------------------------:|:---------------------------------------:|:-------------------------------------------------------------:| -| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](https://www.linkedin.com/in/ryuji-kow-224894227/) | -| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| Display | Name | Github Profile | Portfolio | +|-----------------------------------------------------|:----------------------------:|:---------------------------------------:|:---------------------------------------:| +| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | +| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | diff --git a/docs/team/RyujiKow.md b/docs/team/RyujiKow.md new file mode 100644 index 0000000000..1ac6a867f4 --- /dev/null +++ b/docs/team/RyujiKow.md @@ -0,0 +1,7 @@ +# Ryuji Kow - Project Portfolio Page + +## Overview + +Hi I'm Ryuji Kow, an Aspiring Computer Engineer from National University Of Singapore, and these are my contributions + +### Summary of Contributions From 650c1eccd39ea4e6a675b1f6925ab991da7fcff3 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 2 Mar 2023 16:43:24 +0800 Subject: [PATCH 010/420] update about us --- .gitignore | 1 + docs/AboutUs.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2873e189e1..26a47327be 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT +.vscode/settings.json \ No newline at end of file diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..2269de64de 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) From eee87e3004b875ddb7b0b163edc725230f9d53ff Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 2 Mar 2023 16:59:06 +0800 Subject: [PATCH 011/420] updated AboutUs --- docs/AboutUs.md | 15 +++++++-------- docs/team/KeaneChan.md | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e9bdf635ee..e16709fb40 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,9 @@ # About us -| Display | Name | Github Profile | Portfolio | -|-----------------------------------------------------|:----------------------------:|:---------------------------------------:|:---------------------------------------:| -| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | -| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Keane Chan | [Github](https://github.com/typingpanda)| [Portfolio](docs/team/KeaneChan.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | - +| Display | Name | Github Profile | Portfolio | +| --------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | +| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | +| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | +| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/KeaneChan.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | diff --git a/docs/team/KeaneChan.md b/docs/team/KeaneChan.md index ca314808bf..75c44d8a60 100644 --- a/docs/team/KeaneChan.md +++ b/docs/team/KeaneChan.md @@ -2,6 +2,6 @@ ## Overview -Hi Im Prince Pereira, an Aspiring Mechanical Engineer from National University Of Singapore, and these are my contributions +Hi Im Keane Chan, an Aspiring Mechanical Engineer from National University Of Singapore, and these are my contributions ### Summary of Contributions \ No newline at end of file From 1848d9cac5349ec0f2883a9d4b7bccb32595ba37 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong <48162623+superkaiba@users.noreply.github.com> Date: Thu, 2 Mar 2023 17:14:37 +0800 Subject: [PATCH 012/420] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e200491c62..2443dfb141 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ | Display | Name | Github Profile | Portfolio | | --------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | -| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md)| +| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](/team/thomasjiralerspong.md)| | ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | | ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | | ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | From f5383cc7fd21c18adb95ae95ef0b69fced94ed43 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong <48162623+superkaiba@users.noreply.github.com> Date: Thu, 2 Mar 2023 17:15:00 +0800 Subject: [PATCH 013/420] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 2443dfb141..e200491c62 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ | Display | Name | Github Profile | Portfolio | | --------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | -| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](/team/thomasjiralerspong.md)| +| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md)| | ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | | ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | | ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | From c5a1779452a71138076620575ba5c4901573f1a0 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:00:14 +0800 Subject: [PATCH 014/420] Create _config.yml --- docs/_config.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000000..29076b1495 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,3 @@ +#Build Settings + +theme: minima From e8d0f7515c1a4173f1b009d679df9d12f7828ee5 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:01:53 +0800 Subject: [PATCH 015/420] Update README.md --- docs/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index 57f6f51a75..bbcc99c1e7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,8 +6,3 @@ Useful links: * [User Guide](UserGuide.md) * [Developer Guide](DeveloperGuide.md) * [About Us](AboutUs.md) - - -#Build settings -markdown: kramdown -theme: minima From 73fcc9ba128581106c74e787b3812dbf3cb44bbd Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:03:48 +0800 Subject: [PATCH 016/420] Remove Don Roe --- docs/AboutUs.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e200491c62..b1b55a056c 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -7,5 +7,4 @@ | ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | | ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | | ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/KeaneChan.md) | -| ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) | From c91f023b0ff868b9db9ab138f61543a0fbc86ccf Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:46:44 +0800 Subject: [PATCH 017/420] change portfolio photo and update branch --- docs/AboutUs.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index b1b55a056c..332a8a50b8 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,9 @@ # About us -| Display | Name | Github Profile | Portfolio | -| --------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | -| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md)| -| ![](NoPhoto) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | -| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | -| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/KeaneChan.md) | - +| Display | Name | Github Profile | Portfolio | +| ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :------------------------------------------: | +| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md) | +| ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | +| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | +| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/KeaneChan.md) | From e7d1607251e8cd96b408ea5b146ead7427770ec4 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:55:41 +0800 Subject: [PATCH 018/420] resolve path issue for portfolio --- docs/AboutUs.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 332a8a50b8..4fd81a3e2d 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,8 +2,8 @@ | Display | Name | Github Profile | Portfolio | | ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :------------------------------------------: | -| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](docs/team/thomasjiralerspong.md) | -| ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](docs/team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](docs/team/RyujiKow.md) | -| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](docs/team/reynoldlam.md) | -| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](docs/team/KeaneChan.md) | +| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](team/thomasjiralerspong.md) | +| ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](team/PrincePereira.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | +| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](team/reynoldlam.md) | +| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | From 0c4baa6bee9ee4295fb1f8a4c73367084d5658b8 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:57:01 +0800 Subject: [PATCH 019/420] Fix formatting for About Us --- docs/AboutUs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 4fd81a3e2d..e6be10e8f5 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,7 +1,7 @@ # About us -| Display | Name | Github Profile | Portfolio | -| ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :------------------------------------------: | +| Display | Name | Github Profile | Portfolio | +| ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | | ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](team/thomasjiralerspong.md) | | ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](team/PrincePereira.md) | | ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | From 83378a6957f353c24eb18a401b4802c3ca0e8f74 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 00:53:08 +0800 Subject: [PATCH 020/420] foundation for command and exceptions --- .../java/seedu/{duke/Duke.java => bigpp/BigPP.java} | 4 ++-- src/main/java/seedu/bigpp/command/Command.java | 5 +++++ src/main/java/seedu/bigpp/command/CommandType.java | 5 +++++ .../command/buildercommand/EditNameCommand.java | 12 ++++++++++++ .../bigpp/command/commoncommand/BackCommand.java | 12 ++++++++++++ .../componentcommand/SelectComponentCommand.java | 12 ++++++++++++ .../command/mainmenucommand/EnterViewerCommand.java | 12 ++++++++++++ .../command/viewercommand/ViewerAddCommand.java | 12 ++++++++++++ .../java/seedu/bigpp/exceptions/PPException.java | 9 +++++++++ 9 files changed, 81 insertions(+), 2 deletions(-) rename src/main/java/seedu/{duke/Duke.java => bigpp/BigPP.java} (93%) create mode 100644 src/main/java/seedu/bigpp/command/Command.java create mode 100644 src/main/java/seedu/bigpp/command/CommandType.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java create mode 100644 src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java create mode 100644 src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java create mode 100644 src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java create mode 100644 src/main/java/seedu/bigpp/exceptions/PPException.java diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/bigpp/BigPP.java similarity index 93% rename from src/main/java/seedu/duke/Duke.java rename to src/main/java/seedu/bigpp/BigPP.java index 5c74e68d59..9a6e1ad3c4 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -1,8 +1,8 @@ -package seedu.duke; +package seedu.bigpp; import java.util.Scanner; -public class Duke { +public class BigPP { /** * Main entry-point for the java.duke.Duke application. */ diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java new file mode 100644 index 0000000000..9a3aa21579 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -0,0 +1,5 @@ +package seedu.bigpp.command; + +public abstract class Command { + public abstract void executeCommand(); +} diff --git a/src/main/java/seedu/bigpp/command/CommandType.java b/src/main/java/seedu/bigpp/command/CommandType.java new file mode 100644 index 0000000000..92be425c11 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/CommandType.java @@ -0,0 +1,5 @@ +package seedu.bigpp.command; + +public enum CommandType { + BACK +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java new file mode 100644 index 0000000000..6b02abbf6d --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; + +public class EditNameCommand extends Command { + + @Override + public void executeCommand() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java new file mode 100644 index 0000000000..595b0da225 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.commoncommand; + +import seedu.bigpp.command.Command; + +public class BackCommand extends Command { + + @Override + public void executeCommand() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java b/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java new file mode 100644 index 0000000000..cf21b2ff01 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.componentcommand; + +import seedu.bigpp.command.Command; + +public class SelectComponentCommand extends Command { + + @Override + public void executeCommand() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java new file mode 100644 index 0000000000..2937a14a31 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.mainmenucommand; + +import seedu.bigpp.command.Command; + +public class EnterViewerCommand extends Command { + + @Override + public void executeCommand() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java new file mode 100644 index 0000000000..de832a9474 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; + +public class ViewerAddCommand extends Command { + + @Override + public void executeCommand() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/PPException.java b/src/main/java/seedu/bigpp/exceptions/PPException.java new file mode 100644 index 0000000000..b7a599b6f3 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/PPException.java @@ -0,0 +1,9 @@ +package seedu.bigpp.exceptions; + +public class PPException extends Exception { + + @Override + public String getMessage() { + return super.getMessage(); + } +} From d13d7469b396b29032af5921ad1bc98379345816 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:17:35 +0800 Subject: [PATCH 021/420] add skeleton for PC and PCList --- src/main/java/seedu/bigpp/pc/PC.java | 21 +++++++++++++++++++++ src/main/java/seedu/bigpp/pc/PCList.java | 11 +++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/main/java/seedu/bigpp/pc/PC.java create mode 100644 src/main/java/seedu/bigpp/pc/PCList.java diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java new file mode 100644 index 0000000000..e2c2d44346 --- /dev/null +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -0,0 +1,21 @@ +package seedu.bigpp.pc; + +public class PC { + private String name; + // private CPU cpu; + + public PC(String name) { + this.name = name; + // this.cpu = new CPU(); + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return "PC [category=" + category + ", description=" + description + ", link=" + link + ", name=" + name + + ", price=" + price + ", tag=" + tag + "]"; + } +} diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java new file mode 100644 index 0000000000..181588a54a --- /dev/null +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -0,0 +1,11 @@ +package seedu.bigpp.pc; + +import java.util.ArrayList; + +public class PCList { + private ArrayList pcList; + + public PCList() { + this.pcList = new ArrayList<>(); + } +} From 4f504a77ec7a998aa229864418db4a65ebfbd8d5 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:24:21 +0800 Subject: [PATCH 022/420] add skeleton for CPU class, as a format --- .../java/seedu/bigpp/component/cpu/CPU.java | 49 +++++++++++++++++++ .../seedu/bigpp/component/cpu/CPUList.java | 12 +++++ src/main/java/seedu/bigpp/pc/PC.java | 3 +- 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 src/main/java/seedu/bigpp/component/cpu/CPU.java create mode 100644 src/main/java/seedu/bigpp/component/cpu/CPUList.java diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java new file mode 100644 index 0000000000..60807f5ac3 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -0,0 +1,49 @@ +package seedu.bigpp.component.cpu; + +public class CPU { + private String name; + private String brand; + private String socket; + private String core; + private String clock; + private String price; + + public CPU(String name, String brand, String socket, String core, String clock, String price) { + this.name = name; + this.brand = brand; + this.socket = socket; + this.core = core; + this.clock = clock; + this.price = price; + } + + public String getName() { + return name; + } + + public String getBrand() { + return brand; + } + + public String getSocket() { + return socket; + } + + public String getCore() { + return core; + } + + public String getClock() { + return clock; + } + + public String getPrice() { + return price; + } + + @Override + public String toString() { + return "cpu [brand=" + brand + ", clock=" + clock + ", core=" + core + ", name=" + name + ", price=" + price + + ", socket=" + socket + "]"; + } +} diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java new file mode 100644 index 0000000000..e359113fd5 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -0,0 +1,12 @@ +package seedu.bigpp.component.cpu; + +import java.util.ArrayList; + +public class CPUList { + + private ArrayList cpuList; + + public CPUList() { + this.cpuList = new ArrayList<>(); + } +} diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index e2c2d44346..dbf2d2c38e 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -15,7 +15,6 @@ public String getName() { @Override public String toString() { - return "PC [category=" + category + ", description=" + description + ", link=" + link + ", name=" + name - + ", price=" + price + ", tag=" + tag + "]"; + return "PC [name=" + name + "]"; } } From ae3fe87f3320f1746b0a85b8fafcce67a25a6016 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:33:17 +0800 Subject: [PATCH 023/420] add UI handler and UI state enum --- src/main/java/seedu/bigpp/ui/UI.java | 8 ++++++++ src/main/java/seedu/bigpp/ui/UIState.java | 9 +++++++++ 2 files changed, 17 insertions(+) create mode 100644 src/main/java/seedu/bigpp/ui/UI.java create mode 100644 src/main/java/seedu/bigpp/ui/UIState.java diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java new file mode 100644 index 0000000000..a0bf762e26 --- /dev/null +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -0,0 +1,8 @@ +package seedu.bigpp.ui; + +public class UI { + private static UIState uiState = UIState.MAIN_MENU; + + public UI() { + } +} diff --git a/src/main/java/seedu/bigpp/ui/UIState.java b/src/main/java/seedu/bigpp/ui/UIState.java new file mode 100644 index 0000000000..344700690e --- /dev/null +++ b/src/main/java/seedu/bigpp/ui/UIState.java @@ -0,0 +1,9 @@ +package seedu.bigpp.ui; + +public enum UIState { + MAIN_MENU, + VIEWER, + BUILDER, + TUTORIAL, + COMPONENT, +} From 8eeeaa7a0170dba48d67f0b074799638f8d1c1b1 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:37:12 +0800 Subject: [PATCH 024/420] change code occurances of duke into BigPP --- build.gradle | 4 ++-- src/test/java/seedu/duke/DukeTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index d5e548e85f..bc5bed6ea1 100644 --- a/build.gradle +++ b/build.gradle @@ -29,11 +29,11 @@ test { } application { - mainClass = "seedu.duke.Duke" + mainClass = "seedu.bigpp.Bigpp" } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "bigpp" archiveClassifier = null } diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 2dda5fd651..ade825822a 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -1,10 +1,10 @@ -package seedu.duke; +package seedu.bigpp; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -class DukeTest { +class BigPPTest { @Test public void sampleTest() { assertTrue(true); From b173c13e7205165e3945ed12cfe336083e36e128 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:53:18 +0800 Subject: [PATCH 025/420] add skeleton for storage and userdata --- src/main/java/seedu/bigpp/command/storage/Storage.java | 6 ++++++ userdata/cpu/cpu.txt | 0 userdata/prebuilt/prebuilt.txt | 0 3 files changed, 6 insertions(+) create mode 100644 src/main/java/seedu/bigpp/command/storage/Storage.java create mode 100644 userdata/cpu/cpu.txt create mode 100644 userdata/prebuilt/prebuilt.txt diff --git a/src/main/java/seedu/bigpp/command/storage/Storage.java b/src/main/java/seedu/bigpp/command/storage/Storage.java new file mode 100644 index 0000000000..5e04cdd5fd --- /dev/null +++ b/src/main/java/seedu/bigpp/command/storage/Storage.java @@ -0,0 +1,6 @@ +package seedu.bigpp.command.storage; + +public class Storage { + public static final String FOLDER_PATH = "./userdata"; + public static final String FILE_PATH = "./userdata/bigpp.txt"; +} diff --git a/userdata/cpu/cpu.txt b/userdata/cpu/cpu.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/userdata/prebuilt/prebuilt.txt b/userdata/prebuilt/prebuilt.txt new file mode 100644 index 0000000000..e69de29bb2 From 5f2b39ca14f9d948c1058fa9eb50d3186cce747d Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:56:24 +0800 Subject: [PATCH 026/420] change test file to BigPP --- src/test/java/seedu/{duke/DukeTest.java => bigpp/BigPPTest.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/java/seedu/{duke/DukeTest.java => bigpp/BigPPTest.java} (100%) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/bigpp/BigPPTest.java similarity index 100% rename from src/test/java/seedu/duke/DukeTest.java rename to src/test/java/seedu/bigpp/BigPPTest.java From a9ecb99081b3592659b583de8bb1d1eb3044fab5 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 02:07:15 +0800 Subject: [PATCH 027/420] change build.gradle mainClass to BigPP --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bc5bed6ea1..c53c6afcac 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ test { } application { - mainClass = "seedu.bigpp.Bigpp" + mainClass = "seedu.bigpp.BigPP" } shadowJar { From 713a1ddd5d2f9e7fbc3b8817a8ec675c99536224 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:17:46 +0800 Subject: [PATCH 028/420] make abstract Component class --- .../java/seedu/bigpp/component/Component.java | 33 ++++++++++++++ .../java/seedu/bigpp/component/cpu/CPU.java | 45 +++++++++---------- 2 files changed, 54 insertions(+), 24 deletions(-) create mode 100644 src/main/java/seedu/bigpp/component/Component.java diff --git a/src/main/java/seedu/bigpp/component/Component.java b/src/main/java/seedu/bigpp/component/Component.java new file mode 100644 index 0000000000..209456861a --- /dev/null +++ b/src/main/java/seedu/bigpp/component/Component.java @@ -0,0 +1,33 @@ +package seedu.bigpp.component; + +public abstract class Component { + private String name; + private String brand; + private float price; + + public String getName() { + return this.name; + } + + public String getBrand() { + return this.brand; + } + + public float getPrice() { + return this.price; + } + + public void setName(String name) { + this.name = name; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public void setPrice(float price) { + this.price = price; + } + + public abstract String toString(); +} diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 60807f5ac3..0b0ba7e929 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -1,49 +1,46 @@ package seedu.bigpp.component.cpu; -public class CPU { - private String name; - private String brand; +import seedu.bigpp.component.Component; + +public class CPU extends Component { private String socket; - private String core; - private String clock; - private String price; + private int core; + private float clock; - public CPU(String name, String brand, String socket, String core, String clock, String price) { - this.name = name; - this.brand = brand; + public CPU(String socket, int core, float clock) { this.socket = socket; this.core = core; this.clock = clock; - this.price = price; - } - - public String getName() { - return name; - } - - public String getBrand() { - return brand; } public String getSocket() { return socket; } - public String getCore() { + public int getCore() { return core; } - public String getClock() { + public float getClock() { return clock; } - public String getPrice() { - return price; + public void setSocket(String socket) { + this.socket = socket; + } + + public void setCore(int core) { + this.core = core; + } + + public void setClock(float clock) { + this.clock = clock; } @Override public String toString() { - return "cpu [brand=" + brand + ", clock=" + clock + ", core=" + core + ", name=" + name + ", price=" + price - + ", socket=" + socket + "]"; + return "CPU [socket=" + socket + ", core=" + core + ", clock=" + clock + ", name=" + super.getName() + + ", brand=" + super.getBrand() + ", price=" + super.getPrice() + "]"; } + } From 77cce34e2a3ffc7164db0cd389c0b08f5e6768b9 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sat, 4 Mar 2023 20:01:59 +0800 Subject: [PATCH 029/420] Add method in PcList class to output formatted list and update PC class to support new output format --- src/main/java/seedu/bigpp/pc/PC.java | 31 ++++++++++++++++++++++-- src/main/java/seedu/bigpp/pc/PCList.java | 17 ++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index dbf2d2c38e..26f9197fbb 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -1,20 +1,47 @@ package seedu.bigpp.pc; +import seedu.bigpp.component.cpu.CPU; + public class PC { private String name; // private CPU cpu; + private Boolean isPrebuilt; + + private CPU cpu = null; - public PC(String name) { + public PC(String name, Boolean isPrebuilt) { this.name = name; // this.cpu = new CPU(); + this.isPrebuilt = isPrebuilt; } public String getName() { return name; } + public void setCPU(CPU cpu) { + this.cpu = cpu; + } + + public Float getCost() { + Float totalCost = 0.00F; + if (cpu == null) { + return totalCost; + } + totalCost += cpu.getPrice(); + return totalCost; + } + + public String buildType(Boolean isPrebuilt) { + if (isPrebuilt) { + return "Prebuilt-PC"; + } else { + return "Custom-PC"; + } + } + @Override public String toString() { - return "PC [name=" + name + "]"; + return buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost(); } } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 181588a54a..ae5bde1c7e 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -3,9 +3,20 @@ import java.util.ArrayList; public class PCList { - private ArrayList pcList; + private static ArrayList pcList = new ArrayList<>(); - public PCList() { - this.pcList = new ArrayList<>(); + public static ArrayList getList() { + return pcList; + } + + public static void printPcList() { + if (pcList.size() > 0) { + System.out.println("Here is the list of PC Builds:"); + for (int i = 0; i < pcList.size(); i++) { + System.out.println((i + 1) + "." + pcList.get(i)); + } + } else { + System.out.println("List currently empty!"); + } } } From 4e77b955a926cc6cb358a3a3994242bac85f6514 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 16:14:07 +0800 Subject: [PATCH 030/420] enable navigation through menu system with skeleton code --- .gitignore | 3 - src/main/java/seedu/bigpp/BigPP.java | 35 ++++-- .../java/seedu/bigpp/command/Command.java | 2 +- .../buildercommand/EditNameCommand.java | 4 +- .../command/commoncommand/BackCommand.java | 4 +- .../SelectComponentCommand.java | 4 +- .../command/mainmenucommand/ByeCommand.java | 12 ++ .../mainmenucommand/EnterTutorialCommand.java | 14 +++ .../mainmenucommand/EnterViewerCommand.java | 7 +- .../viewercommand/ViewerAddCommand.java | 4 +- src/main/java/seedu/bigpp/parser/Parser.java | 81 ++++++++++++ src/main/java/seedu/bigpp/ui/UI.java | 115 +++++++++++++++++- 12 files changed, 258 insertions(+), 27 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java create mode 100644 src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java create mode 100644 src/main/java/seedu/bigpp/parser/Parser.java diff --git a/.gitignore b/.gitignore index d11ec91e17..7c42bd3c98 100644 --- a/.gitignore +++ b/.gitignore @@ -15,9 +15,7 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT -<<<<<<< HEAD .vscode/settings.json -======= # ignore class files *.class @@ -25,4 +23,3 @@ text-ui-test/EXPECTED-UNIX.TXT #ignore formatter *.xml ->>>>>>> master diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 9a6e1ad3c4..ed5104acd4 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -1,21 +1,36 @@ package seedu.bigpp; -import java.util.Scanner; +import seedu.bigpp.command.Command; +import seedu.bigpp.command.mainmenucommand.ByeCommand; +import seedu.bigpp.parser.Parser; +import seedu.bigpp.ui.UI; public class BigPP { + /** * Main entry-point for the java.duke.Duke application. */ public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - System.out.println("What is your name?"); + new BigPP().run(); + } - Scanner in = new Scanner(System.in); - System.out.println("Hello " + in.nextLine()); + public void run() { + UI.updateUI(); + runLoopUntilExit(); } + + /** + * Runs the program until the user issues the exit command. + */ + private void runLoopUntilExit() { + Command command; + do { + String userInput = UI.getInput(); + command = new Parser().parseCommand(userInput); + String result = command.executeCommand(); + UI.updateUI(); + UI.showResult(result); + } while (!(command instanceof ByeCommand)); + } + } diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java index 9a3aa21579..f85250f107 100644 --- a/src/main/java/seedu/bigpp/command/Command.java +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -1,5 +1,5 @@ package seedu.bigpp.command; public abstract class Command { - public abstract void executeCommand(); + public abstract String executeCommand(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java index 6b02abbf6d..5fce8d9d2b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java @@ -5,8 +5,8 @@ public class EditNameCommand extends Command { @Override - public void executeCommand() { + public String executeCommand() { // TODO Auto-generated method stub - + return ""; } } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index 595b0da225..2154d5585c 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -5,8 +5,8 @@ public class BackCommand extends Command { @Override - public void executeCommand() { + public String executeCommand() { // TODO Auto-generated method stub - + return ""; } } diff --git a/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java b/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java index cf21b2ff01..41c23cd2e9 100644 --- a/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java @@ -5,8 +5,8 @@ public class SelectComponentCommand extends Command { @Override - public void executeCommand() { + public String executeCommand() { // TODO Auto-generated method stub - + return ""; } } diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java new file mode 100644 index 0000000000..5737bb6d5f --- /dev/null +++ b/src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java @@ -0,0 +1,12 @@ +package seedu.bigpp.command.mainmenucommand; + +import seedu.bigpp.command.Command; + +public class ByeCommand extends Command { + + @Override + public String executeCommand() { + + return "Bye. Hope to see you again soon!"; + } +} diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java new file mode 100644 index 0000000000..c695500b4d --- /dev/null +++ b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java @@ -0,0 +1,14 @@ +package seedu.bigpp.command.mainmenucommand; + +import seedu.bigpp.command.Command; + +import seedu.bigpp.ui.UI; + +public class EnterTutorialCommand extends Command { + + @Override + public String executeCommand() { + UI.setTutorialMode(); + return "Changed to tutorial mode"; + } +} diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java index 2937a14a31..60cd79ad3c 100644 --- a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java +++ b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java @@ -1,12 +1,13 @@ package seedu.bigpp.command.mainmenucommand; import seedu.bigpp.command.Command; +import seedu.bigpp.ui.UI; public class EnterViewerCommand extends Command { @Override - public void executeCommand() { - // TODO Auto-generated method stub - + public String executeCommand() { + UI.setViewerMode(); + return "Changed to viewer mode"; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index de832a9474..bc474dd443 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -5,8 +5,8 @@ public class ViewerAddCommand extends Command { @Override - public void executeCommand() { + public String executeCommand() { // TODO Auto-generated method stub - + return ""; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java new file mode 100644 index 0000000000..2850a34e22 --- /dev/null +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -0,0 +1,81 @@ +package seedu.bigpp.parser; + +import seedu.bigpp.command.Command; +import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; + +import seedu.bigpp.command.mainmenucommand.ByeCommand; +import seedu.bigpp.command.mainmenucommand.EnterViewerCommand; +import seedu.bigpp.command.mainmenucommand.EnterTutorialCommand; + +public class Parser { + + public Command parseCommand(String userInput) { + switch (UI.getUiState()) { + + case MAIN_MENU: + return parseMainMenuCommand(userInput); + + case VIEWER: + return parseViewerCommand(userInput); + + case BUILDER: + return parseBuilderCommand(userInput); + + case TUTORIAL: + return parseTutorialCommand(userInput); + + case COMPONENT: + return parseComponentCommand(userInput); + + default: + return null; + } + } + + private Command parseMainMenuCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + + commandWord = commandWord.toLowerCase(); + + switch (commandWord) { + case "viewer": + return new EnterViewerCommand(); + case "tutorial": + return new EnterTutorialCommand(); + case "exit": + return new ByeCommand(); + default: + return null; + } + } + + private Command parseViewerCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + + commandWord = commandWord.toLowerCase(); + + return null; + } + + private Command parseBuilderCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + + commandWord = commandWord.toLowerCase(); + return null; + } + + private Command parseTutorialCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + + commandWord = commandWord.toLowerCase(); + return null; + } + + private Command parseComponentCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + + commandWord = commandWord.toLowerCase(); + return null; + } +} diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index a0bf762e26..3898cef5eb 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,8 +1,119 @@ package seedu.bigpp.ui; -public class UI { +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public abstract class UI { private static UIState uiState = UIState.MAIN_MENU; - public UI() { + private static final String DIVIDER = "==================================================="; + + private static final String LOGO = "add logo here"; + + private static final Scanner in = new Scanner(System.in); + private static final PrintStream out = System.out; + + public static UIState getUiState() { + return uiState; + } + + public static String getInput() { + return in.nextLine(); + } + + public static void updateUI() { + clearTerminal(); + out.println(DIVIDER); + + switch (uiState) { + case MAIN_MENU: + printMainMenu(); + break; + case VIEWER: + printViewer(); + break; + case BUILDER: + printBuilder(); + break; + case TUTORIAL: + printTutorial(); + break; + case COMPONENT: + printComponent(); + break; + default: + break; + } + + out.println(DIVIDER); + } + + public static void clearTerminal() { + out.println("\033[H\033[2J"); + } + + public static void printMainMenu() { + out.println(LOGO); + out.println("Welcome to BigPP!"); + out.println("What would you like to do?"); + out.println("PC viewer"); + out.println("PC tutorial"); + out.println("exit"); + } + + public static void printViewer() { + out.println("PC viewer"); + out.println("What would you like to do?"); + out.println("View PC"); + out.println("Build PC"); + out.println("exit"); + } + + public static void printBuilder() { + out.println("PC builder"); + out.println("What would you like to do?"); + out.println("Add component"); + out.println("Remove component"); + out.println("View PC"); + out.println("exit"); + } + + public static void printTutorial() { + out.println("PC tutorial"); + out.println("What would you like to do?"); + out.println("View tutorial"); + out.println("exit"); + } + + public static void printComponent() { + out.println("Component"); + out.println("What would you like to do?"); + out.println("View component"); + out.println("exit"); + } + + public static void showResult(String result) { + out.println(result); + } + + public static void setMainMenuMode() { + uiState = UIState.MAIN_MENU; + } + + public static void setViewerMode() { + uiState = UIState.VIEWER; + } + + public static void setBuilderMode() { + uiState = UIState.BUILDER; + } + + public static void setTutorialMode() { + uiState = UIState.TUTORIAL; + } + + public static void setComponentMode() { + uiState = UIState.COMPONENT; } } From fe4a9fe0daa12144a956b80b21e71ebeaddd4ea7 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 16:18:30 +0800 Subject: [PATCH 031/420] fix checkstyle error --- src/main/java/seedu/bigpp/parser/Parser.java | 1 - src/main/java/seedu/bigpp/ui/UI.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 2850a34e22..bd8307318e 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -2,7 +2,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.ui.UI; -import seedu.bigpp.ui.UIState; import seedu.bigpp.command.mainmenucommand.ByeCommand; import seedu.bigpp.command.mainmenucommand.EnterViewerCommand; diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 3898cef5eb..1cde4eaafc 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,6 +1,5 @@ package seedu.bigpp.ui; -import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; From a81e911e13e99fcd6a6fbd896a9013e1819b56c3 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 16:32:24 +0800 Subject: [PATCH 032/420] update text-ui-test --- text-ui-test/EXPECTED.TXT | 27 ++++++++++++++++++--------- text-ui-test/input.txt | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 892cb6cae7..a050d89427 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,9 +1,18 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - -What is your name? -Hello James Gosling + +=================================================== +add logo here +Welcome to BigPP! +What would you like to do? +PC viewer +PC tutorial +exit +=================================================== + +=================================================== +PC viewer +What would you like to do? +View PC +Build PC +exit +=================================================== +Changed to viewer mode diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index f6ec2e9f95..c934fbc214 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1 @@ -James Gosling \ No newline at end of file +viewer \ No newline at end of file From 1ac7088842ce6918096928f85370ec7102431afb Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 23:15:55 +0800 Subject: [PATCH 033/420] add components for each category --- userdata/case/case.json | 24 +++++ userdata/cpu/cpu.json | 124 ++++++++++++++++++++++++++ userdata/cpu/cpu.txt | 0 userdata/cpu_cooler/cpucooler.json | 28 ++++++ userdata/gpu/gpu.json | 28 ++++++ userdata/motherboard/motherboard.json | 76 ++++++++++++++++ userdata/psu/psu.json | 11 +++ userdata/ram/ram.json | 32 +++++++ userdata/storage/storage.json | 28 ++++++ 9 files changed, 351 insertions(+) create mode 100644 userdata/case/case.json create mode 100644 userdata/cpu/cpu.json delete mode 100644 userdata/cpu/cpu.txt create mode 100644 userdata/cpu_cooler/cpucooler.json create mode 100644 userdata/gpu/gpu.json create mode 100644 userdata/motherboard/motherboard.json create mode 100644 userdata/psu/psu.json create mode 100644 userdata/ram/ram.json create mode 100644 userdata/storage/storage.json diff --git a/userdata/case/case.json b/userdata/case/case.json new file mode 100644 index 0000000000..86a02227ec --- /dev/null +++ b/userdata/case/case.json @@ -0,0 +1,24 @@ +{ + "cases": { + "Fractal Design Pop XL Air": { + "brand": "Fractal Design", + "price": 124.98, + "size": "full atx" + }, + "Corsair iCUE 4000X RGB": { + "brand": "Corsair", + "price": 144.99, + "size": "mid atx" + }, + "Cooler Master MasterBox MB311L ARGB": { + "brand": "Cooler Master", + "price": 74.98, + "size": "micro" + }, + "Silverstone SUGO 14": { + "brand": "Silverstone", + "price": 139.36, + "size": "mini" + } + } +} diff --git a/userdata/cpu/cpu.json b/userdata/cpu/cpu.json new file mode 100644 index 0000000000..5d881081f6 --- /dev/null +++ b/userdata/cpu/cpu.json @@ -0,0 +1,124 @@ +{ + "CPUS": { + "Intel Core i3-10100": { + "Price": 99.5, + "Cores": 4, + "Threads": 8, + "Base Clock": 3.6, + "Boost Clock": 4.3, + "TDP": 65, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i5-10600K": { + "Price": 182.47, + "Cores": 6, + "Threads": 12, + "Base Clock": 4.1, + "Boost Clock": 4.8, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i7-10700K": { + "Price": 269.95, + "Cores": 8, + "Threads": 16, + "Base Clock": 3.8, + "Boost Clock": 5.1, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i3-12100F": { + "Price": 106.93, + "Cores": 4, + "Threads": 8, + "Base Clock": 3.3, + "Boost Clock": 4.3, + "TDP": 58, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "Intel Core i5-12600K": { + "Price": 213.82, + "Cores": 10, + "Threads": 20, + "Base Clock": 3.7, + "Boost Clock": 4.9, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "Intel Core i7-12700K": { + "Price": 312.88, + "Cores": 12, + "Threads": 24, + "Base Clock": 3.6, + "Boost Clock": 5.0, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "AMD Ryzen 3 3200G": { + "Price": 97.5, + "Cores": 4, + "Threads": 4, + "Base Clock": 3.6, + "Boost Clock": 4.0, + "TDP": 65, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 5 5600X": { + "Price": 156.64, + "Cores": 6, + "Threads": 12, + "Base Clock": 3.7, + "Boost Clock": 4.6, + "TDP": 65, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 7 5800X": { + "Price": 211.33, + "Cores": 8, + "Threads": 16, + "Base Clock": 3.8, + "Boost Clock": 4.7, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 5 7600X": { + "Price": 240.86, + "Cores": 6, + "Threads": 12, + "Base Clock": 4.7, + "Boost Clock": 5.3, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM5" + }, + "AMD Ryzen 7 7700X": { + "Price": 341.29, + "Cores": 8, + "Threads": 16, + "Base Clock": 4.5, + "Boost Clock": 5.4, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM5" + }, + "AMD Ryzen 9 7950X": { + "Price": 589.0, + "Cores": 16, + "Threads": 32, + "Base Clock": 4.5, + "Boost Clock": 5.7, + "TDP": 170, + "Brand": "AMD", + "Socket": "AM5" + } + } +} diff --git a/userdata/cpu/cpu.txt b/userdata/cpu/cpu.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/userdata/cpu_cooler/cpucooler.json b/userdata/cpu_cooler/cpucooler.json new file mode 100644 index 0000000000..f1a1cadaa9 --- /dev/null +++ b/userdata/cpu_cooler/cpucooler.json @@ -0,0 +1,28 @@ +{ + "CPU_COOLERS": { + "Thermalright AXP90-X36": { + "RPM": 2700, + "Noise": 22.4, + "price": 22.9, + "brand": "Thermalright" + }, + "Noctua NH-L9i": { + "RPM": 2500, + "Noise": 23.6, + "price": 44.95, + "brand": "Noctua" + }, + "NZXT T120 RGB": { + "RPM": 1800, + "Noise": 27.5, + "price": 59.9, + "brand": "NZXT" + }, + "Cooler Master MASTERLIQUID ML120L RGB V2": { + "RPM": 1800, + "Noise": 27, + "price": 86.78, + "brand": "Cooler Master" + } + } +} diff --git a/userdata/gpu/gpu.json b/userdata/gpu/gpu.json new file mode 100644 index 0000000000..57bc02eaf8 --- /dev/null +++ b/userdata/gpu/gpu.json @@ -0,0 +1,28 @@ +{ + "GPUS": { + "Gigabyte GAMING OC RTX3050": { + "brand": "Gigabyte", + "price": 309.99, + "power": 300, + "size": "mini" + }, + "MSI GeForce RTX 3060 Gaming X12G": { + "brand": "MSI", + "price": 379.99, + "power": 400, + "size": "micro" + }, + "Asus TUF GAMING OC RTX3070 Ti": { + "brand": "Asus", + "price": 786.99, + "power": 500, + "size": "atx" + }, + "MSI GAMING Z TRIO RTX3080": { + "brand": "MSI", + "price": 934.06, + "power": 500, + "size": "atx" + } + } +} diff --git a/userdata/motherboard/motherboard.json b/userdata/motherboard/motherboard.json new file mode 100644 index 0000000000..5d3c5d0126 --- /dev/null +++ b/userdata/motherboard/motherboard.json @@ -0,0 +1,76 @@ +{ + "motherboards": { + "Asus Prime Z590-P WiFi": { + "price": 121.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "LGA1200" + }, + "MSI MAG Z690 TOMAHAWK WIFI DDR4": { + "price": 239.99, + "brand": "MSI", + "formfactor": "ATX", + "socket": "LGA1700" + }, + "Asus TUF GAMING X570-PLUS (WI-FI)": { + "price": 209.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "AM4" + }, + "Gigabyte B650 AORUS ELITE AX": { + "price": 219.99, + "brand": "Gigabyte", + "formfactor": "ATX", + "socket": "AM5" + }, + "Asus TUF GAMING B560M-PLUS WIFI": { + "price": 149.99, + "brand": "Asus", + "formfactor": "Micro", + "socket": "LGA1200" + }, + "ASRock B760M Steel Legend WiFi": { + "price": 139.99, + "brand": "ASRock", + "formfactor": "Micro", + "socket": "LGA1700" + }, + "MSI B550M PRO-VDH WIFI": { + "price": 119.99, + "brand": "MSI", + "formfactor": "Micro", + "socket": "AM4" + }, + "Gigabyte B650M DS3H": { + "price": 149.99, + "brand": "Gigabyte", + "formfactor": "Micro", + "socket": "AM5" + }, + "MSI MPG B560I GAMING EDGE WIFI": { + "price": 149.99, + "brand": "MSI", + "formfactor": "Mini", + "socket": "LGA1200" + }, + "Asus ROG STRIX B760-I GAMING WIFI": { + "price": 219.99, + "brand": "Asus", + "formfactor": "Mini", + "socket": "LGA1700" + }, + "ASRock B550M-ITX/ac": { + "price": 119.99, + "brand": "ASRock", + "formfactor": "Mini", + "socket": "AM4" + }, + "Gigabyte B650I AORUS ULTRA": { + "price": 159.99, + "brand": "Gigabyte", + "formfactor": "Mini", + "socket": "AM5" + } + } +} diff --git a/userdata/psu/psu.json b/userdata/psu/psu.json new file mode 100644 index 0000000000..a4e58ed608 --- /dev/null +++ b/userdata/psu/psu.json @@ -0,0 +1,11 @@ +{ + "PSUS": { + "SeaSonic FOCUS PLUS 850 Gold": { + "brand": "SeaSonic", + "efficiency": "Gold", + "form_factor": "atx", + "power": 850, + "price": 159.94 + } + } +} diff --git a/userdata/ram/ram.json b/userdata/ram/ram.json new file mode 100644 index 0000000000..eb5aded21c --- /dev/null +++ b/userdata/ram/ram.json @@ -0,0 +1,32 @@ +{ + "Ram": { + "Kingston FURY Beast 16 GB": { + "price": 43.98, + "Memory": 8, + "sticks": 2, + "speed": 3200, + "brand": "Kingston" + }, + "G.Skill Ripjaws X 8 GB": { + "price": 22.99, + "Memory": 8, + "sticks": 1, + "speed": 1600, + "brand": "G.Skill" + }, + "Corsair Vengeance RGB Pro 32 GB": { + "price": 104.99, + "Memory": 16, + "sticks": 2, + "speed": 3600, + "brand": "Corsair" + }, + "G.Skill Trident Z RGB 64 GB": { + "price": 164.99, + "Memory": 32, + "sticks": 2, + "speed": 3200, + "brand": "G.Skill" + } + } +} diff --git a/userdata/storage/storage.json b/userdata/storage/storage.json new file mode 100644 index 0000000000..91c6cfc3e4 --- /dev/null +++ b/userdata/storage/storage.json @@ -0,0 +1,28 @@ +{ + "storage": { + "ADATA XPG SPECTRIX S40G RGB": { + "type": "M.2 SSD", + "size": 512, + "price": 54.99, + "brand": "ADATA" + }, + "Seagate BarraCuda": { + "type": "HDD", + "size": 1024, + "price": 95.0, + "brand": "Seagate" + }, + "Samsung 980 Pro": { + "type": "M.2 SSD", + "size": 2048, + "price": 159.99, + "brand": "Samsung" + }, + "Western Digital Blue": { + "type": "SATA SSD", + "size": 4096, + "price": 229.96, + "brand": "Western Digital" + } + } +} From 336125df0f3b65b512298e5d2b8476c47b0d26f8 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 23:23:57 +0800 Subject: [PATCH 034/420] Revert "add components for each category" This reverts commit 1ac7088842ce6918096928f85370ec7102431afb. --- userdata/case/case.json | 24 ----- userdata/cpu/cpu.json | 124 -------------------------- userdata/cpu/cpu.txt | 0 userdata/cpu_cooler/cpucooler.json | 28 ------ userdata/gpu/gpu.json | 28 ------ userdata/motherboard/motherboard.json | 76 ---------------- userdata/psu/psu.json | 11 --- userdata/ram/ram.json | 32 ------- userdata/storage/storage.json | 28 ------ 9 files changed, 351 deletions(-) delete mode 100644 userdata/case/case.json delete mode 100644 userdata/cpu/cpu.json create mode 100644 userdata/cpu/cpu.txt delete mode 100644 userdata/cpu_cooler/cpucooler.json delete mode 100644 userdata/gpu/gpu.json delete mode 100644 userdata/motherboard/motherboard.json delete mode 100644 userdata/psu/psu.json delete mode 100644 userdata/ram/ram.json delete mode 100644 userdata/storage/storage.json diff --git a/userdata/case/case.json b/userdata/case/case.json deleted file mode 100644 index 86a02227ec..0000000000 --- a/userdata/case/case.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "cases": { - "Fractal Design Pop XL Air": { - "brand": "Fractal Design", - "price": 124.98, - "size": "full atx" - }, - "Corsair iCUE 4000X RGB": { - "brand": "Corsair", - "price": 144.99, - "size": "mid atx" - }, - "Cooler Master MasterBox MB311L ARGB": { - "brand": "Cooler Master", - "price": 74.98, - "size": "micro" - }, - "Silverstone SUGO 14": { - "brand": "Silverstone", - "price": 139.36, - "size": "mini" - } - } -} diff --git a/userdata/cpu/cpu.json b/userdata/cpu/cpu.json deleted file mode 100644 index 5d881081f6..0000000000 --- a/userdata/cpu/cpu.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "CPUS": { - "Intel Core i3-10100": { - "Price": 99.5, - "Cores": 4, - "Threads": 8, - "Base Clock": 3.6, - "Boost Clock": 4.3, - "TDP": 65, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i5-10600K": { - "Price": 182.47, - "Cores": 6, - "Threads": 12, - "Base Clock": 4.1, - "Boost Clock": 4.8, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i7-10700K": { - "Price": 269.95, - "Cores": 8, - "Threads": 16, - "Base Clock": 3.8, - "Boost Clock": 5.1, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i3-12100F": { - "Price": 106.93, - "Cores": 4, - "Threads": 8, - "Base Clock": 3.3, - "Boost Clock": 4.3, - "TDP": 58, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "Intel Core i5-12600K": { - "Price": 213.82, - "Cores": 10, - "Threads": 20, - "Base Clock": 3.7, - "Boost Clock": 4.9, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "Intel Core i7-12700K": { - "Price": 312.88, - "Cores": 12, - "Threads": 24, - "Base Clock": 3.6, - "Boost Clock": 5.0, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "AMD Ryzen 3 3200G": { - "Price": 97.5, - "Cores": 4, - "Threads": 4, - "Base Clock": 3.6, - "Boost Clock": 4.0, - "TDP": 65, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 5 5600X": { - "Price": 156.64, - "Cores": 6, - "Threads": 12, - "Base Clock": 3.7, - "Boost Clock": 4.6, - "TDP": 65, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 7 5800X": { - "Price": 211.33, - "Cores": 8, - "Threads": 16, - "Base Clock": 3.8, - "Boost Clock": 4.7, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 5 7600X": { - "Price": 240.86, - "Cores": 6, - "Threads": 12, - "Base Clock": 4.7, - "Boost Clock": 5.3, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM5" - }, - "AMD Ryzen 7 7700X": { - "Price": 341.29, - "Cores": 8, - "Threads": 16, - "Base Clock": 4.5, - "Boost Clock": 5.4, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM5" - }, - "AMD Ryzen 9 7950X": { - "Price": 589.0, - "Cores": 16, - "Threads": 32, - "Base Clock": 4.5, - "Boost Clock": 5.7, - "TDP": 170, - "Brand": "AMD", - "Socket": "AM5" - } - } -} diff --git a/userdata/cpu/cpu.txt b/userdata/cpu/cpu.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/userdata/cpu_cooler/cpucooler.json b/userdata/cpu_cooler/cpucooler.json deleted file mode 100644 index f1a1cadaa9..0000000000 --- a/userdata/cpu_cooler/cpucooler.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "CPU_COOLERS": { - "Thermalright AXP90-X36": { - "RPM": 2700, - "Noise": 22.4, - "price": 22.9, - "brand": "Thermalright" - }, - "Noctua NH-L9i": { - "RPM": 2500, - "Noise": 23.6, - "price": 44.95, - "brand": "Noctua" - }, - "NZXT T120 RGB": { - "RPM": 1800, - "Noise": 27.5, - "price": 59.9, - "brand": "NZXT" - }, - "Cooler Master MASTERLIQUID ML120L RGB V2": { - "RPM": 1800, - "Noise": 27, - "price": 86.78, - "brand": "Cooler Master" - } - } -} diff --git a/userdata/gpu/gpu.json b/userdata/gpu/gpu.json deleted file mode 100644 index 57bc02eaf8..0000000000 --- a/userdata/gpu/gpu.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "GPUS": { - "Gigabyte GAMING OC RTX3050": { - "brand": "Gigabyte", - "price": 309.99, - "power": 300, - "size": "mini" - }, - "MSI GeForce RTX 3060 Gaming X12G": { - "brand": "MSI", - "price": 379.99, - "power": 400, - "size": "micro" - }, - "Asus TUF GAMING OC RTX3070 Ti": { - "brand": "Asus", - "price": 786.99, - "power": 500, - "size": "atx" - }, - "MSI GAMING Z TRIO RTX3080": { - "brand": "MSI", - "price": 934.06, - "power": 500, - "size": "atx" - } - } -} diff --git a/userdata/motherboard/motherboard.json b/userdata/motherboard/motherboard.json deleted file mode 100644 index 5d3c5d0126..0000000000 --- a/userdata/motherboard/motherboard.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "motherboards": { - "Asus Prime Z590-P WiFi": { - "price": 121.99, - "brand": "Asus", - "formfactor": "ATX", - "socket": "LGA1200" - }, - "MSI MAG Z690 TOMAHAWK WIFI DDR4": { - "price": 239.99, - "brand": "MSI", - "formfactor": "ATX", - "socket": "LGA1700" - }, - "Asus TUF GAMING X570-PLUS (WI-FI)": { - "price": 209.99, - "brand": "Asus", - "formfactor": "ATX", - "socket": "AM4" - }, - "Gigabyte B650 AORUS ELITE AX": { - "price": 219.99, - "brand": "Gigabyte", - "formfactor": "ATX", - "socket": "AM5" - }, - "Asus TUF GAMING B560M-PLUS WIFI": { - "price": 149.99, - "brand": "Asus", - "formfactor": "Micro", - "socket": "LGA1200" - }, - "ASRock B760M Steel Legend WiFi": { - "price": 139.99, - "brand": "ASRock", - "formfactor": "Micro", - "socket": "LGA1700" - }, - "MSI B550M PRO-VDH WIFI": { - "price": 119.99, - "brand": "MSI", - "formfactor": "Micro", - "socket": "AM4" - }, - "Gigabyte B650M DS3H": { - "price": 149.99, - "brand": "Gigabyte", - "formfactor": "Micro", - "socket": "AM5" - }, - "MSI MPG B560I GAMING EDGE WIFI": { - "price": 149.99, - "brand": "MSI", - "formfactor": "Mini", - "socket": "LGA1200" - }, - "Asus ROG STRIX B760-I GAMING WIFI": { - "price": 219.99, - "brand": "Asus", - "formfactor": "Mini", - "socket": "LGA1700" - }, - "ASRock B550M-ITX/ac": { - "price": 119.99, - "brand": "ASRock", - "formfactor": "Mini", - "socket": "AM4" - }, - "Gigabyte B650I AORUS ULTRA": { - "price": 159.99, - "brand": "Gigabyte", - "formfactor": "Mini", - "socket": "AM5" - } - } -} diff --git a/userdata/psu/psu.json b/userdata/psu/psu.json deleted file mode 100644 index a4e58ed608..0000000000 --- a/userdata/psu/psu.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "PSUS": { - "SeaSonic FOCUS PLUS 850 Gold": { - "brand": "SeaSonic", - "efficiency": "Gold", - "form_factor": "atx", - "power": 850, - "price": 159.94 - } - } -} diff --git a/userdata/ram/ram.json b/userdata/ram/ram.json deleted file mode 100644 index eb5aded21c..0000000000 --- a/userdata/ram/ram.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "Ram": { - "Kingston FURY Beast 16 GB": { - "price": 43.98, - "Memory": 8, - "sticks": 2, - "speed": 3200, - "brand": "Kingston" - }, - "G.Skill Ripjaws X 8 GB": { - "price": 22.99, - "Memory": 8, - "sticks": 1, - "speed": 1600, - "brand": "G.Skill" - }, - "Corsair Vengeance RGB Pro 32 GB": { - "price": 104.99, - "Memory": 16, - "sticks": 2, - "speed": 3600, - "brand": "Corsair" - }, - "G.Skill Trident Z RGB 64 GB": { - "price": 164.99, - "Memory": 32, - "sticks": 2, - "speed": 3200, - "brand": "G.Skill" - } - } -} diff --git a/userdata/storage/storage.json b/userdata/storage/storage.json deleted file mode 100644 index 91c6cfc3e4..0000000000 --- a/userdata/storage/storage.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "storage": { - "ADATA XPG SPECTRIX S40G RGB": { - "type": "M.2 SSD", - "size": 512, - "price": 54.99, - "brand": "ADATA" - }, - "Seagate BarraCuda": { - "type": "HDD", - "size": 1024, - "price": 95.0, - "brand": "Seagate" - }, - "Samsung 980 Pro": { - "type": "M.2 SSD", - "size": 2048, - "price": 159.99, - "brand": "Samsung" - }, - "Western Digital Blue": { - "type": "SATA SSD", - "size": 4096, - "price": 229.96, - "brand": "Western Digital" - } - } -} From 58c4fa6a28b5fbcd22d9967d6b1ae30e2373f8e4 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 5 Mar 2023 23:25:26 +0800 Subject: [PATCH 035/420] add components for each category --- userdata/case/case.json | 24 +++++ userdata/cpu/cpu.json | 124 ++++++++++++++++++++++++++ userdata/cpu_cooler/cpucooler.json | 28 ++++++ userdata/gpu/gpu.json | 28 ++++++ userdata/motherboard/motherboard.json | 76 ++++++++++++++++ userdata/psu/psu.json | 11 +++ userdata/ram/ram.json | 32 +++++++ userdata/storage/storage.json | 28 ++++++ 8 files changed, 351 insertions(+) create mode 100644 userdata/case/case.json create mode 100644 userdata/cpu/cpu.json create mode 100644 userdata/cpu_cooler/cpucooler.json create mode 100644 userdata/gpu/gpu.json create mode 100644 userdata/motherboard/motherboard.json create mode 100644 userdata/psu/psu.json create mode 100644 userdata/ram/ram.json create mode 100644 userdata/storage/storage.json diff --git a/userdata/case/case.json b/userdata/case/case.json new file mode 100644 index 0000000000..86a02227ec --- /dev/null +++ b/userdata/case/case.json @@ -0,0 +1,24 @@ +{ + "cases": { + "Fractal Design Pop XL Air": { + "brand": "Fractal Design", + "price": 124.98, + "size": "full atx" + }, + "Corsair iCUE 4000X RGB": { + "brand": "Corsair", + "price": 144.99, + "size": "mid atx" + }, + "Cooler Master MasterBox MB311L ARGB": { + "brand": "Cooler Master", + "price": 74.98, + "size": "micro" + }, + "Silverstone SUGO 14": { + "brand": "Silverstone", + "price": 139.36, + "size": "mini" + } + } +} diff --git a/userdata/cpu/cpu.json b/userdata/cpu/cpu.json new file mode 100644 index 0000000000..5d881081f6 --- /dev/null +++ b/userdata/cpu/cpu.json @@ -0,0 +1,124 @@ +{ + "CPUS": { + "Intel Core i3-10100": { + "Price": 99.5, + "Cores": 4, + "Threads": 8, + "Base Clock": 3.6, + "Boost Clock": 4.3, + "TDP": 65, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i5-10600K": { + "Price": 182.47, + "Cores": 6, + "Threads": 12, + "Base Clock": 4.1, + "Boost Clock": 4.8, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i7-10700K": { + "Price": 269.95, + "Cores": 8, + "Threads": 16, + "Base Clock": 3.8, + "Boost Clock": 5.1, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1200" + }, + "Intel Core i3-12100F": { + "Price": 106.93, + "Cores": 4, + "Threads": 8, + "Base Clock": 3.3, + "Boost Clock": 4.3, + "TDP": 58, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "Intel Core i5-12600K": { + "Price": 213.82, + "Cores": 10, + "Threads": 20, + "Base Clock": 3.7, + "Boost Clock": 4.9, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "Intel Core i7-12700K": { + "Price": 312.88, + "Cores": 12, + "Threads": 24, + "Base Clock": 3.6, + "Boost Clock": 5.0, + "TDP": 125, + "Brand": "Intel", + "Socket": "LGA1700" + }, + "AMD Ryzen 3 3200G": { + "Price": 97.5, + "Cores": 4, + "Threads": 4, + "Base Clock": 3.6, + "Boost Clock": 4.0, + "TDP": 65, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 5 5600X": { + "Price": 156.64, + "Cores": 6, + "Threads": 12, + "Base Clock": 3.7, + "Boost Clock": 4.6, + "TDP": 65, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 7 5800X": { + "Price": 211.33, + "Cores": 8, + "Threads": 16, + "Base Clock": 3.8, + "Boost Clock": 4.7, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM4" + }, + "AMD Ryzen 5 7600X": { + "Price": 240.86, + "Cores": 6, + "Threads": 12, + "Base Clock": 4.7, + "Boost Clock": 5.3, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM5" + }, + "AMD Ryzen 7 7700X": { + "Price": 341.29, + "Cores": 8, + "Threads": 16, + "Base Clock": 4.5, + "Boost Clock": 5.4, + "TDP": 105, + "Brand": "AMD", + "Socket": "AM5" + }, + "AMD Ryzen 9 7950X": { + "Price": 589.0, + "Cores": 16, + "Threads": 32, + "Base Clock": 4.5, + "Boost Clock": 5.7, + "TDP": 170, + "Brand": "AMD", + "Socket": "AM5" + } + } +} diff --git a/userdata/cpu_cooler/cpucooler.json b/userdata/cpu_cooler/cpucooler.json new file mode 100644 index 0000000000..f1a1cadaa9 --- /dev/null +++ b/userdata/cpu_cooler/cpucooler.json @@ -0,0 +1,28 @@ +{ + "CPU_COOLERS": { + "Thermalright AXP90-X36": { + "RPM": 2700, + "Noise": 22.4, + "price": 22.9, + "brand": "Thermalright" + }, + "Noctua NH-L9i": { + "RPM": 2500, + "Noise": 23.6, + "price": 44.95, + "brand": "Noctua" + }, + "NZXT T120 RGB": { + "RPM": 1800, + "Noise": 27.5, + "price": 59.9, + "brand": "NZXT" + }, + "Cooler Master MASTERLIQUID ML120L RGB V2": { + "RPM": 1800, + "Noise": 27, + "price": 86.78, + "brand": "Cooler Master" + } + } +} diff --git a/userdata/gpu/gpu.json b/userdata/gpu/gpu.json new file mode 100644 index 0000000000..57bc02eaf8 --- /dev/null +++ b/userdata/gpu/gpu.json @@ -0,0 +1,28 @@ +{ + "GPUS": { + "Gigabyte GAMING OC RTX3050": { + "brand": "Gigabyte", + "price": 309.99, + "power": 300, + "size": "mini" + }, + "MSI GeForce RTX 3060 Gaming X12G": { + "brand": "MSI", + "price": 379.99, + "power": 400, + "size": "micro" + }, + "Asus TUF GAMING OC RTX3070 Ti": { + "brand": "Asus", + "price": 786.99, + "power": 500, + "size": "atx" + }, + "MSI GAMING Z TRIO RTX3080": { + "brand": "MSI", + "price": 934.06, + "power": 500, + "size": "atx" + } + } +} diff --git a/userdata/motherboard/motherboard.json b/userdata/motherboard/motherboard.json new file mode 100644 index 0000000000..5d3c5d0126 --- /dev/null +++ b/userdata/motherboard/motherboard.json @@ -0,0 +1,76 @@ +{ + "motherboards": { + "Asus Prime Z590-P WiFi": { + "price": 121.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "LGA1200" + }, + "MSI MAG Z690 TOMAHAWK WIFI DDR4": { + "price": 239.99, + "brand": "MSI", + "formfactor": "ATX", + "socket": "LGA1700" + }, + "Asus TUF GAMING X570-PLUS (WI-FI)": { + "price": 209.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "AM4" + }, + "Gigabyte B650 AORUS ELITE AX": { + "price": 219.99, + "brand": "Gigabyte", + "formfactor": "ATX", + "socket": "AM5" + }, + "Asus TUF GAMING B560M-PLUS WIFI": { + "price": 149.99, + "brand": "Asus", + "formfactor": "Micro", + "socket": "LGA1200" + }, + "ASRock B760M Steel Legend WiFi": { + "price": 139.99, + "brand": "ASRock", + "formfactor": "Micro", + "socket": "LGA1700" + }, + "MSI B550M PRO-VDH WIFI": { + "price": 119.99, + "brand": "MSI", + "formfactor": "Micro", + "socket": "AM4" + }, + "Gigabyte B650M DS3H": { + "price": 149.99, + "brand": "Gigabyte", + "formfactor": "Micro", + "socket": "AM5" + }, + "MSI MPG B560I GAMING EDGE WIFI": { + "price": 149.99, + "brand": "MSI", + "formfactor": "Mini", + "socket": "LGA1200" + }, + "Asus ROG STRIX B760-I GAMING WIFI": { + "price": 219.99, + "brand": "Asus", + "formfactor": "Mini", + "socket": "LGA1700" + }, + "ASRock B550M-ITX/ac": { + "price": 119.99, + "brand": "ASRock", + "formfactor": "Mini", + "socket": "AM4" + }, + "Gigabyte B650I AORUS ULTRA": { + "price": 159.99, + "brand": "Gigabyte", + "formfactor": "Mini", + "socket": "AM5" + } + } +} diff --git a/userdata/psu/psu.json b/userdata/psu/psu.json new file mode 100644 index 0000000000..a4e58ed608 --- /dev/null +++ b/userdata/psu/psu.json @@ -0,0 +1,11 @@ +{ + "PSUS": { + "SeaSonic FOCUS PLUS 850 Gold": { + "brand": "SeaSonic", + "efficiency": "Gold", + "form_factor": "atx", + "power": 850, + "price": 159.94 + } + } +} diff --git a/userdata/ram/ram.json b/userdata/ram/ram.json new file mode 100644 index 0000000000..eb5aded21c --- /dev/null +++ b/userdata/ram/ram.json @@ -0,0 +1,32 @@ +{ + "Ram": { + "Kingston FURY Beast 16 GB": { + "price": 43.98, + "Memory": 8, + "sticks": 2, + "speed": 3200, + "brand": "Kingston" + }, + "G.Skill Ripjaws X 8 GB": { + "price": 22.99, + "Memory": 8, + "sticks": 1, + "speed": 1600, + "brand": "G.Skill" + }, + "Corsair Vengeance RGB Pro 32 GB": { + "price": 104.99, + "Memory": 16, + "sticks": 2, + "speed": 3600, + "brand": "Corsair" + }, + "G.Skill Trident Z RGB 64 GB": { + "price": 164.99, + "Memory": 32, + "sticks": 2, + "speed": 3200, + "brand": "G.Skill" + } + } +} diff --git a/userdata/storage/storage.json b/userdata/storage/storage.json new file mode 100644 index 0000000000..91c6cfc3e4 --- /dev/null +++ b/userdata/storage/storage.json @@ -0,0 +1,28 @@ +{ + "storage": { + "ADATA XPG SPECTRIX S40G RGB": { + "type": "M.2 SSD", + "size": 512, + "price": 54.99, + "brand": "ADATA" + }, + "Seagate BarraCuda": { + "type": "HDD", + "size": 1024, + "price": 95.0, + "brand": "Seagate" + }, + "Samsung 980 Pro": { + "type": "M.2 SSD", + "size": 2048, + "price": 159.99, + "brand": "Samsung" + }, + "Western Digital Blue": { + "type": "SATA SSD", + "size": 4096, + "price": 229.96, + "brand": "Western Digital" + } + } +} From c7b2d55abe36961287436bdf1420ca30ca154c68 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 6 Mar 2023 23:48:20 +0800 Subject: [PATCH 036/420] add backcommand in main menu and pc viewer --- .../command/commoncommand/BackCommand.java | 26 ++++++++++++++++--- src/main/java/seedu/bigpp/parser/Parser.java | 10 ++++++- src/main/java/seedu/bigpp/ui/UI.java | 12 +++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index 2154d5585c..35408ce735 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -1,12 +1,32 @@ package seedu.bigpp.command.commoncommand; - import seedu.bigpp.command.Command; +import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; public class BackCommand extends Command { @Override public String executeCommand() { - // TODO Auto-generated method stub - return ""; + int previousStateIndex = UI.visitedMenus.size() - 2; + UIState previousState = UI.visitedMenus.get(previousStateIndex); + UI.visitedMenus.remove(previousStateIndex + 1); + UI.visitedMenus.remove(previousStateIndex); + switch (previousState) { + case MAIN_MENU: + UI.setMainMenuMode(); + break; + case VIEWER: + UI.setViewerMode(); + break; + case BUILDER: + UI.setBuilderMode(); + break; + case TUTORIAL: + UI.setTutorialMode(); + break; + default: + break; + } + return "returned to previous menu"; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index bd8307318e..d0fac32b2c 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,6 +1,7 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.mainmenucommand.ByeCommand; @@ -42,6 +43,8 @@ private Command parseMainMenuCommand(String userInput) { return new EnterViewerCommand(); case "tutorial": return new EnterTutorialCommand(); + case "back": + return new BackCommand(); case "exit": return new ByeCommand(); default: @@ -54,7 +57,12 @@ private Command parseViewerCommand(String userInput) { commandWord = commandWord.toLowerCase(); - return null; + switch (commandWord) { + case "back": + return new BackCommand(); + default: + return null; + } } private Command parseBuilderCommand(String userInput) { diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 1cde4eaafc..b7ab293c75 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -2,6 +2,7 @@ import java.io.PrintStream; import java.util.Scanner; +import java.util.ArrayList; public abstract class UI { private static UIState uiState = UIState.MAIN_MENU; @@ -13,6 +14,8 @@ public abstract class UI { private static final Scanner in = new Scanner(System.in); private static final PrintStream out = System.out; + public static ArrayList visitedMenus = new ArrayList(); + public static UIState getUiState() { return uiState; } @@ -27,18 +30,23 @@ public static void updateUI() { switch (uiState) { case MAIN_MENU: + visitedMenus.add(UIState.MAIN_MENU); printMainMenu(); break; case VIEWER: + visitedMenus.add(UIState.VIEWER); printViewer(); break; case BUILDER: + visitedMenus.add(UIState.BUILDER); printBuilder(); break; case TUTORIAL: + visitedMenus.add(UIState.TUTORIAL); printTutorial(); break; case COMPONENT: + visitedMenus.add(UIState.COMPONENT); printComponent(); break; default: @@ -66,6 +74,7 @@ public static void printViewer() { out.println("What would you like to do?"); out.println("View PC"); out.println("Build PC"); + out.println("back"); out.println("exit"); } @@ -75,6 +84,7 @@ public static void printBuilder() { out.println("Add component"); out.println("Remove component"); out.println("View PC"); + out.println("back"); out.println("exit"); } @@ -82,6 +92,7 @@ public static void printTutorial() { out.println("PC tutorial"); out.println("What would you like to do?"); out.println("View tutorial"); + out.println("back"); out.println("exit"); } @@ -89,6 +100,7 @@ public static void printComponent() { out.println("Component"); out.println("What would you like to do?"); out.println("View component"); + out.println("back"); out.println("exit"); } From 59190ef2fa6b995696774c902d509790161fd6a2 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 10:12:09 +0800 Subject: [PATCH 037/420] improve on backcommand feature used Stack instead of Arraylist and removed bug where wrong command would push duplicates into the visitedMenusStack. --- src/main/java/seedu/bigpp/BigPP.java | 1 + .../command/commoncommand/BackCommand.java | 8 ++++---- src/main/java/seedu/bigpp/ui/UI.java | 17 ++++++++++------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index ed5104acd4..150a47aed7 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -16,6 +16,7 @@ public static void main(String[] args) { public void run() { UI.updateUI(); + UI.instantiateVisitedMenusStack(); runLoopUntilExit(); } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index 35408ce735..a413e257dc 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -1,4 +1,5 @@ package seedu.bigpp.command.commoncommand; + import seedu.bigpp.command.Command; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; @@ -7,10 +8,9 @@ public class BackCommand extends Command { @Override public String executeCommand() { - int previousStateIndex = UI.visitedMenus.size() - 2; - UIState previousState = UI.visitedMenus.get(previousStateIndex); - UI.visitedMenus.remove(previousStateIndex + 1); - UI.visitedMenus.remove(previousStateIndex); + UI.visitedMenusStack.pop(); + UIState previousState = UI.visitedMenusStack.peek(); + UI.visitedMenusStack.pop(); switch (previousState) { case MAIN_MENU: UI.setMainMenuMode(); diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index b7ab293c75..5dd69c2cf3 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -2,7 +2,7 @@ import java.io.PrintStream; import java.util.Scanner; -import java.util.ArrayList; +import java.util.Stack; public abstract class UI { private static UIState uiState = UIState.MAIN_MENU; @@ -14,7 +14,11 @@ public abstract class UI { private static final Scanner in = new Scanner(System.in); private static final PrintStream out = System.out; - public static ArrayList visitedMenus = new ArrayList(); + public static Stack visitedMenusStack = new Stack(); + + public static void instantiateVisitedMenusStack() { + visitedMenusStack.push(UIState.MAIN_MENU); + } public static UIState getUiState() { return uiState; @@ -30,23 +34,18 @@ public static void updateUI() { switch (uiState) { case MAIN_MENU: - visitedMenus.add(UIState.MAIN_MENU); printMainMenu(); break; case VIEWER: - visitedMenus.add(UIState.VIEWER); printViewer(); break; case BUILDER: - visitedMenus.add(UIState.BUILDER); printBuilder(); break; case TUTORIAL: - visitedMenus.add(UIState.TUTORIAL); printTutorial(); break; case COMPONENT: - visitedMenus.add(UIState.COMPONENT); printComponent(); break; default: @@ -113,18 +112,22 @@ public static void setMainMenuMode() { } public static void setViewerMode() { + visitedMenusStack.push(UIState.VIEWER); uiState = UIState.VIEWER; } public static void setBuilderMode() { + visitedMenusStack.push(UIState.BUILDER); uiState = UIState.BUILDER; } public static void setTutorialMode() { + visitedMenusStack.push(UIState.TUTORIAL); uiState = UIState.TUTORIAL; } public static void setComponentMode() { + visitedMenusStack.push(UIState.COMPONENT); uiState = UIState.COMPONENT; } } From db9cabe8544f77cfbebfa01ed8b1e1c3e3f34b73 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 10:30:50 +0800 Subject: [PATCH 038/420] changed method name to initializeVisitedMenusStack --- src/main/java/seedu/bigpp/BigPP.java | 2 +- src/main/java/seedu/bigpp/parser/Parser.java | 14 ++++++-------- src/main/java/seedu/bigpp/ui/UI.java | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 150a47aed7..cb507eff38 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -16,7 +16,7 @@ public static void main(String[] args) { public void run() { UI.updateUI(); - UI.instantiateVisitedMenusStack(); + UI.initializeVisitedMenusStack(); runLoopUntilExit(); } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d0fac32b2c..612e045689 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -11,6 +11,10 @@ public class Parser { public Command parseCommand(String userInput) { + if (userInput.equals("back")) { + return new BackCommand(); + } + switch (UI.getUiState()) { case MAIN_MENU: @@ -43,8 +47,6 @@ private Command parseMainMenuCommand(String userInput) { return new EnterViewerCommand(); case "tutorial": return new EnterTutorialCommand(); - case "back": - return new BackCommand(); case "exit": return new ByeCommand(); default: @@ -57,12 +59,8 @@ private Command parseViewerCommand(String userInput) { commandWord = commandWord.toLowerCase(); - switch (commandWord) { - case "back": - return new BackCommand(); - default: - return null; - } + return null; + } private Command parseBuilderCommand(String userInput) { diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 5dd69c2cf3..3415e2231d 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -16,7 +16,7 @@ public abstract class UI { public static Stack visitedMenusStack = new Stack(); - public static void instantiateVisitedMenusStack() { + public static void initializeVisitedMenusStack() { visitedMenusStack.push(UIState.MAIN_MENU); } From d59413714d05804bc5b70d8fcc9254355003256a Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 10:39:21 +0800 Subject: [PATCH 039/420] add startingMainMenu to be without back option and mainMenu to have back option --- src/main/java/seedu/bigpp/ui/UI.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 3415e2231d..f4598e7c8c 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -34,7 +34,11 @@ public static void updateUI() { switch (uiState) { case MAIN_MENU: - printMainMenu(); + if (isStartingMainMenu()) { + printStartingMainMenu(); + } else { + printMainMenu(); + } break; case VIEWER: printViewer(); @@ -55,16 +59,30 @@ public static void updateUI() { out.println(DIVIDER); } + private static boolean isStartingMainMenu() { + return visitedMenusStack.size() == 1; + } + public static void clearTerminal() { out.println("\033[H\033[2J"); } + public static void printStartingMainMenu() { + out.println(LOGO); + out.println("Welcome to BigPP!"); + out.println("What would you like to do?"); + out.println("PC viewer"); + out.println("PC tutorial"); + out.println("exit"); + } + public static void printMainMenu() { out.println(LOGO); out.println("Welcome to BigPP!"); out.println("What would you like to do?"); out.println("PC viewer"); out.println("PC tutorial"); + out.println("back"); out.println("exit"); } @@ -108,6 +126,7 @@ public static void showResult(String result) { } public static void setMainMenuMode() { + visitedMenusStack.push(UIState.MAIN_MENU); uiState = UIState.MAIN_MENU; } From a5ed44c5922ea7e15d4e5896c50e78dc3f3ca8e9 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 14:48:29 +0800 Subject: [PATCH 040/420] remove starting main menu. there will only be 1 main menu --- src/main/java/seedu/bigpp/ui/UI.java | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index f4598e7c8c..8a986a4e55 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -34,11 +34,7 @@ public static void updateUI() { switch (uiState) { case MAIN_MENU: - if (isStartingMainMenu()) { - printStartingMainMenu(); - } else { - printMainMenu(); - } + printMainMenu(); break; case VIEWER: printViewer(); @@ -59,30 +55,16 @@ public static void updateUI() { out.println(DIVIDER); } - private static boolean isStartingMainMenu() { - return visitedMenusStack.size() == 1; - } - public static void clearTerminal() { out.println("\033[H\033[2J"); } - public static void printStartingMainMenu() { - out.println(LOGO); - out.println("Welcome to BigPP!"); - out.println("What would you like to do?"); - out.println("PC viewer"); - out.println("PC tutorial"); - out.println("exit"); - } - public static void printMainMenu() { out.println(LOGO); out.println("Welcome to BigPP!"); out.println("What would you like to do?"); out.println("PC viewer"); out.println("PC tutorial"); - out.println("back"); out.println("exit"); } From 066826b49533a764f2cdd42390bc66eb5311dad6 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 7 Mar 2023 17:03:37 +0800 Subject: [PATCH 041/420] Add method to print all components in pc --- src/main/java/seedu/bigpp/pc/PC.java | 8 ++++++-- src/main/java/seedu/bigpp/pc/PCList.java | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 26f9197fbb..648f98719f 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -34,11 +34,15 @@ public Float getCost() { public String buildType(Boolean isPrebuilt) { if (isPrebuilt) { - return "Prebuilt-PC"; + return "Prebuilt-PC:"; } else { - return "Custom-PC"; + return "Custom-PC:"; } } + public void printComponents() { + System.out.println(cpu); + //print other components when classes are created for individual components + } @Override public String toString() { diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index ae5bde1c7e..1ab291fcdd 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,5 +1,7 @@ package seedu.bigpp.pc; +import seedu.bigpp.ui.UI; + import java.util.ArrayList; public class PCList { @@ -10,6 +12,7 @@ public static ArrayList getList() { } public static void printPcList() { + if (pcList.size() > 0) { System.out.println("Here is the list of PC Builds:"); for (int i = 0; i < pcList.size(); i++) { From 8f6a42235bc8bb9018327b2f9c781a84d74c4718 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 7 Mar 2023 17:18:23 +0800 Subject: [PATCH 042/420] print pc list when in pcviewer menu --- src/main/java/seedu/bigpp/ui/UI.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 1cde4eaafc..79faf20a84 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,5 +1,7 @@ package seedu.bigpp.ui; +import seedu.bigpp.pc.PCList; + import java.io.PrintStream; import java.util.Scanner; @@ -63,6 +65,7 @@ public static void printMainMenu() { public static void printViewer() { out.println("PC viewer"); + PCList.printPcList(); out.println("What would you like to do?"); out.println("View PC"); out.println("Build PC"); From 73e6e0909dc357b9e48e159beb814ab7d811a69c Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 7 Mar 2023 17:20:43 +0800 Subject: [PATCH 043/420] Create ViewerAddCommand to add pc of a given name to the list of pc --- src/main/java/seedu/bigpp/command/Command.java | 10 ++++++++++ .../bigpp/command/viewercommand/ViewerAddCommand.java | 11 +++++++++-- src/main/java/seedu/bigpp/parser/Parser.java | 11 +++++++++-- src/main/java/seedu/bigpp/pc/PCList.java | 6 +++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java index f85250f107..2c4818b943 100644 --- a/src/main/java/seedu/bigpp/command/Command.java +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -1,5 +1,15 @@ package seedu.bigpp.command; public abstract class Command { + + private String arguments; public abstract String executeCommand(); + + public void setArguments(String arguments) { + this.arguments = arguments; + } + + public String getArguments() { + return arguments; + } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index bc474dd443..53eccaa0a9 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -1,12 +1,19 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; public class ViewerAddCommand extends Command { + public ViewerAddCommand(String arguments) { + super.setArguments(arguments); + } @Override public String executeCommand() { - // TODO Auto-generated method stub - return ""; + String name = super.getArguments(); + PC pc = new PC(name); + PCList.addPC(pc); + return "I have created the PC with the following name: " + name; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index bd8307318e..6957e18685 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -7,6 +7,8 @@ import seedu.bigpp.command.mainmenucommand.EnterViewerCommand; import seedu.bigpp.command.mainmenucommand.EnterTutorialCommand; +import seedu.bigpp.command.viewercommand.ViewerAddCommand; + public class Parser { public Command parseCommand(String userInput) { @@ -51,10 +53,15 @@ private Command parseMainMenuCommand(String userInput) { private Command parseViewerCommand(String userInput) { String commandWord = userInput.split(" ")[0]; + String arguments = userInput.split(" ")[1]; commandWord = commandWord.toLowerCase(); - - return null; + switch (commandWord) { + case "add": + return new ViewerAddCommand(arguments); + default: + return null; + } } private Command parseBuilderCommand(String userInput) { diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 181588a54a..98c27e1d9b 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -3,9 +3,9 @@ import java.util.ArrayList; public class PCList { - private ArrayList pcList; + private static ArrayList pcList = new ArrayList<>(); - public PCList() { - this.pcList = new ArrayList<>(); + public static void addPC (PC pc) { + pcList.add(pc); } } From 9c29ff197d7b8c7403811923988f6b6697e4c7f5 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 7 Mar 2023 17:25:45 +0800 Subject: [PATCH 044/420] Delete unused import --- src/main/java/seedu/bigpp/pc/PCList.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 1ab291fcdd..704ddcf374 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,7 +1,5 @@ package seedu.bigpp.pc; -import seedu.bigpp.ui.UI; - import java.util.ArrayList; public class PCList { From cbed1b9acaa32d1590898d66bb9b80df2e193af5 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 7 Mar 2023 18:25:55 +0800 Subject: [PATCH 045/420] Format code to deal with build error --- src/main/java/seedu/bigpp/pc/PC.java | 1 + src/main/java/seedu/bigpp/pc/PCList.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 648f98719f..d7cbfdcad2 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -39,6 +39,7 @@ public String buildType(Boolean isPrebuilt) { return "Custom-PC:"; } } + public void printComponents() { System.out.println(cpu); //print other components when classes are created for individual components diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 704ddcf374..ae5bde1c7e 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -10,7 +10,6 @@ public static ArrayList getList() { } public static void printPcList() { - if (pcList.size() > 0) { System.out.println("Here is the list of PC Builds:"); for (int i = 0; i < pcList.size(); i++) { From 9f2f0c8a1a72bd07eeeaa3fdfe80dcee52fc83c5 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 7 Mar 2023 18:52:18 +0800 Subject: [PATCH 046/420] Use PrintStream instead of System.out.println --- src/main/java/seedu/bigpp/pc/PC.java | 6 ++++-- src/main/java/seedu/bigpp/pc/PCList.java | 11 ++++++----- src/main/java/seedu/bigpp/ui/UI.java | 2 +- text-ui-test/EXPECTED.TXT | 1 + 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index d7cbfdcad2..0eb6b48194 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -2,6 +2,8 @@ import seedu.bigpp.component.cpu.CPU; +import java.io.PrintStream; + public class PC { private String name; // private CPU cpu; @@ -40,8 +42,8 @@ public String buildType(Boolean isPrebuilt) { } } - public void printComponents() { - System.out.println(cpu); + public void printComponents(PrintStream out) { + out.println(cpu); //print other components when classes are created for individual components } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index ae5bde1c7e..217d2ec7b8 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,22 +1,23 @@ package seedu.bigpp.pc; +import java.io.PrintStream; import java.util.ArrayList; -public class PCList { +public abstract class PCList { private static ArrayList pcList = new ArrayList<>(); public static ArrayList getList() { return pcList; } - public static void printPcList() { + public static void printPcList(PrintStream out) { if (pcList.size() > 0) { - System.out.println("Here is the list of PC Builds:"); + out.println("Here is the list of PC Builds:"); for (int i = 0; i < pcList.size(); i++) { - System.out.println((i + 1) + "." + pcList.get(i)); + out.println((i + 1) + "." + pcList.get(i)); } } else { - System.out.println("List currently empty!"); + out.println("List currently empty!"); } } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 79faf20a84..3c27c71675 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -65,7 +65,7 @@ public static void printMainMenu() { public static void printViewer() { out.println("PC viewer"); - PCList.printPcList(); + PCList.printPcList(out); out.println("What would you like to do?"); out.println("View PC"); out.println("Build PC"); diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index a050d89427..89fba358e1 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -10,6 +10,7 @@ exit  =================================================== PC viewer +List currently empty! What would you like to do? View PC Build PC From daf6b3385bac2b685b99ba2b333544f1f1478f41 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:03:05 +0800 Subject: [PATCH 047/420] change backcommand implementation --- src/main/java/seedu/bigpp/BigPP.java | 1 - .../command/commoncommand/BackCommand.java | 30 +++++++++---------- src/main/java/seedu/bigpp/parser/Parser.java | 1 + src/main/java/seedu/bigpp/ui/UI.java | 13 -------- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index cb507eff38..ed5104acd4 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -16,7 +16,6 @@ public static void main(String[] args) { public void run() { UI.updateUI(); - UI.initializeVisitedMenusStack(); runLoopUntilExit(); } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index a413e257dc..f3382b51c9 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -1,32 +1,30 @@ package seedu.bigpp.command.commoncommand; import seedu.bigpp.command.Command; + import seedu.bigpp.ui.UI; -import seedu.bigpp.ui.UIState; public class BackCommand extends Command { @Override public String executeCommand() { - UI.visitedMenusStack.pop(); - UIState previousState = UI.visitedMenusStack.peek(); - UI.visitedMenusStack.pop(); - switch (previousState) { + switch (UI.getUiState()) { case MAIN_MENU: - UI.setMainMenuMode(); - break; + return "cannot go back from main menu"; case VIEWER: - UI.setViewerMode(); - break; + UI.setMainMenuMode(); + return "returned to main menu"; case BUILDER: - UI.setBuilderMode(); - break; + UI.setViewerMode(); + return "returned to viewer"; case TUTORIAL: - UI.setTutorialMode(); - break; + UI.setMainMenuMode(); + return "returned to main menu"; + case COMPONENT: + UI.setBuilderMode(); + return "returned to builder"; default: - break; + return ""; } - return "returned to previous menu"; } -} +} \ No newline at end of file diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 612e045689..7ae83f2e24 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -11,6 +11,7 @@ public class Parser { public Command parseCommand(String userInput) { + if (userInput.equals("back")) { return new BackCommand(); } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 8a986a4e55..dfec041c72 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -2,8 +2,6 @@ import java.io.PrintStream; import java.util.Scanner; -import java.util.Stack; - public abstract class UI { private static UIState uiState = UIState.MAIN_MENU; @@ -14,12 +12,6 @@ public abstract class UI { private static final Scanner in = new Scanner(System.in); private static final PrintStream out = System.out; - public static Stack visitedMenusStack = new Stack(); - - public static void initializeVisitedMenusStack() { - visitedMenusStack.push(UIState.MAIN_MENU); - } - public static UIState getUiState() { return uiState; } @@ -108,27 +100,22 @@ public static void showResult(String result) { } public static void setMainMenuMode() { - visitedMenusStack.push(UIState.MAIN_MENU); uiState = UIState.MAIN_MENU; } public static void setViewerMode() { - visitedMenusStack.push(UIState.VIEWER); uiState = UIState.VIEWER; } public static void setBuilderMode() { - visitedMenusStack.push(UIState.BUILDER); uiState = UIState.BUILDER; } public static void setTutorialMode() { - visitedMenusStack.push(UIState.TUTORIAL); uiState = UIState.TUTORIAL; } public static void setComponentMode() { - visitedMenusStack.push(UIState.COMPONENT); uiState = UIState.COMPONENT; } } From 2188f5966edab194a4deed87c495ef044621b7e4 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:05:09 +0800 Subject: [PATCH 048/420] fix checkstyle issue --- .../java/seedu/bigpp/command/commoncommand/BackCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index f3382b51c9..ea2c875e5d 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -27,4 +27,4 @@ public String executeCommand() { return ""; } } -} \ No newline at end of file +} From 1c3359e953b1bc7914b66aae01cc24ea3c152480 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:18:18 +0800 Subject: [PATCH 049/420] change expectedtxt --- text-ui-test/EXPECTED.TXT | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index a050d89427..1b7db5c7ec 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,4 @@ - +←[H←[2J =================================================== add logo here Welcome to BigPP! @@ -7,12 +7,14 @@ PC viewer PC tutorial exit =================================================== - +viewer +←[H←[2J =================================================== PC viewer What would you like to do? View PC Build PC +back exit =================================================== -Changed to viewer mode +Changed to viewer mode \ No newline at end of file From d86c1f26fdb57b078cd10cd3df1c77c22536b717 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:20:13 +0800 Subject: [PATCH 050/420] change expectedtxt --- text-ui-test/EXPECTED.TXT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 1b7db5c7ec..fc28ae4d40 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -17,4 +17,4 @@ Build PC back exit =================================================== -Changed to viewer mode \ No newline at end of file +Changed to viewer mode From dff95ab3979df9a641bbf5f65ac84d446d8b9957 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:22:48 +0800 Subject: [PATCH 051/420] change expectedtxt --- text-ui-test/EXPECTED.TXT | 1 - 1 file changed, 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index fc28ae4d40..846684212c 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -7,7 +7,6 @@ PC viewer PC tutorial exit =================================================== -viewer ←[H←[2J =================================================== PC viewer From 78c369c9eee361ef985ef09b0882bd0b2ba3d6d9 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 19:30:59 +0800 Subject: [PATCH 052/420] fix expectedtxt --- text-ui-test/EXPECTED.TXT | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 846684212c..73def1635e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,4 @@ -←[H←[2J + =================================================== add logo here Welcome to BigPP! @@ -7,7 +7,7 @@ PC viewer PC tutorial exit =================================================== -←[H←[2J + =================================================== PC viewer What would you like to do? @@ -16,4 +16,4 @@ Build PC back exit =================================================== -Changed to viewer mode +Changed to viewer mode \ No newline at end of file From 764cef4e12675ad8fd35477434b3a08cb995760c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 22:10:15 +0800 Subject: [PATCH 053/420] change expectedtxt --- text-ui-test/EXPECTED.TXT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 73def1635e..d5d2a4c90e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -16,4 +16,4 @@ Build PC back exit =================================================== -Changed to viewer mode \ No newline at end of file +Changed to viewer mode From f8dc71f12b1666c04f7c0aea6bd54665ab43f5c8 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 23:24:27 +0800 Subject: [PATCH 054/420] Add menu class --- .../java/seedu/bigpp/menu/BuilderMenu.java | 16 +++++ .../java/seedu/bigpp/menu/ComponentMenu.java | 14 ++++ src/main/java/seedu/bigpp/menu/MainMenu.java | 16 +++++ src/main/java/seedu/bigpp/menu/Menu.java | 5 ++ .../java/seedu/bigpp/menu/PCViewerMenu.java | 17 +++++ .../java/seedu/bigpp/menu/TutorialMenu.java | 14 ++++ src/main/java/seedu/bigpp/ui/UI.java | 71 ++++--------------- 7 files changed, 96 insertions(+), 57 deletions(-) create mode 100644 src/main/java/seedu/bigpp/menu/BuilderMenu.java create mode 100644 src/main/java/seedu/bigpp/menu/ComponentMenu.java create mode 100644 src/main/java/seedu/bigpp/menu/MainMenu.java create mode 100644 src/main/java/seedu/bigpp/menu/Menu.java create mode 100644 src/main/java/seedu/bigpp/menu/PCViewerMenu.java create mode 100644 src/main/java/seedu/bigpp/menu/TutorialMenu.java diff --git a/src/main/java/seedu/bigpp/menu/BuilderMenu.java b/src/main/java/seedu/bigpp/menu/BuilderMenu.java new file mode 100644 index 0000000000..42d4feddd5 --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/BuilderMenu.java @@ -0,0 +1,16 @@ +package seedu.bigpp.menu; + +import static seedu.bigpp.ui.UI.out; + +public class BuilderMenu { + + public static void printMenu() { + out.println("PC builder"); + out.println("What would you like to do?"); + out.println("Add component"); + out.println("Remove component"); + out.println("View PC"); + out.println("back"); + out.println("exit"); + } +} diff --git a/src/main/java/seedu/bigpp/menu/ComponentMenu.java b/src/main/java/seedu/bigpp/menu/ComponentMenu.java new file mode 100644 index 0000000000..b7e237c16c --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/ComponentMenu.java @@ -0,0 +1,14 @@ +package seedu.bigpp.menu; + +import static seedu.bigpp.ui.UI.out; + +public class ComponentMenu { + + public static void printMenu() { + out.println("Component"); + out.println("What would you like to do?"); + out.println("View component"); + out.println("back"); + out.println("exit"); + } +} diff --git a/src/main/java/seedu/bigpp/menu/MainMenu.java b/src/main/java/seedu/bigpp/menu/MainMenu.java new file mode 100644 index 0000000000..255eaeac36 --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/MainMenu.java @@ -0,0 +1,16 @@ +package seedu.bigpp.menu; + +import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.LOGO; + +public class MainMenu extends Menu { + + public static void printMenu() { + out.println(LOGO); + out.println("Welcome to BigPP!"); + out.println("What would you like to do?"); + out.println("PC viewer"); + out.println("PC tutorial"); + out.println("exit"); + } +} diff --git a/src/main/java/seedu/bigpp/menu/Menu.java b/src/main/java/seedu/bigpp/menu/Menu.java new file mode 100644 index 0000000000..deec468b4b --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/Menu.java @@ -0,0 +1,5 @@ +package seedu.bigpp.menu; + +public abstract class Menu { + +} diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java new file mode 100644 index 0000000000..5abff27166 --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -0,0 +1,17 @@ +package seedu.bigpp.menu; + +import static seedu.bigpp.ui.UI.out; +import seedu.bigpp.pc.PCList; + +public class PCViewerMenu extends Menu { + + public static void printMenu() { + out.println("PC viewer"); + PCList.printPcList(out); + out.println("What would you like to do?"); + out.println("View PC"); + out.println("Build PC"); + out.println("back"); + out.println("exit"); + } +} diff --git a/src/main/java/seedu/bigpp/menu/TutorialMenu.java b/src/main/java/seedu/bigpp/menu/TutorialMenu.java new file mode 100644 index 0000000000..34203582d8 --- /dev/null +++ b/src/main/java/seedu/bigpp/menu/TutorialMenu.java @@ -0,0 +1,14 @@ +package seedu.bigpp.menu; + +import static seedu.bigpp.ui.UI.out; + +public class TutorialMenu { + + public static void printMenu() { + out.println("PC tutorial"); + out.println("What would you like to do?"); + out.println("View tutorial"); + out.println("back"); + out.println("exit"); + } +} diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 3855f259dc..93775726e0 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,18 +1,20 @@ package seedu.bigpp.ui; -import seedu.bigpp.pc.PCList; - +import seedu.bigpp.menu.MainMenu; +import seedu.bigpp.menu.PCViewerMenu; +import seedu.bigpp.menu.TutorialMenu; +import seedu.bigpp.menu.ComponentMenu; +import seedu.bigpp.menu.BuilderMenu; import java.io.PrintStream; import java.util.Scanner; public abstract class UI { + private static UIState uiState = UIState.MAIN_MENU; - private static final String DIVIDER = "==================================================="; - - private static final String LOGO = "add logo here"; - private static final Scanner in = new Scanner(System.in); - private static final PrintStream out = System.out; + + public static final String LOGO = "add logo here"; + public static final PrintStream out = System.out; public static UIState getUiState() { return uiState; @@ -28,19 +30,19 @@ public static void updateUI() { switch (uiState) { case MAIN_MENU: - printMainMenu(); + MainMenu.printMenu(); break; case VIEWER: - printViewer(); + PCViewerMenu.printMenu(); break; case BUILDER: - printBuilder(); + BuilderMenu.printMenu(); break; case TUTORIAL: - printTutorial(); + TutorialMenu.printMenu(); break; case COMPONENT: - printComponent(); + ComponentMenu.printMenu(); break; default: break; @@ -53,51 +55,6 @@ public static void clearTerminal() { out.println("\033[H\033[2J"); } - public static void printMainMenu() { - out.println(LOGO); - out.println("Welcome to BigPP!"); - out.println("What would you like to do?"); - out.println("PC viewer"); - out.println("PC tutorial"); - out.println("exit"); - } - - public static void printViewer() { - out.println("PC viewer"); - PCList.printPcList(out); - out.println("What would you like to do?"); - out.println("View PC"); - out.println("Build PC"); - out.println("back"); - out.println("exit"); - } - - public static void printBuilder() { - out.println("PC builder"); - out.println("What would you like to do?"); - out.println("Add component"); - out.println("Remove component"); - out.println("View PC"); - out.println("back"); - out.println("exit"); - } - - public static void printTutorial() { - out.println("PC tutorial"); - out.println("What would you like to do?"); - out.println("View tutorial"); - out.println("back"); - out.println("exit"); - } - - public static void printComponent() { - out.println("Component"); - out.println("What would you like to do?"); - out.println("View component"); - out.println("back"); - out.println("exit"); - } - public static void showResult(String result) { out.println(result); } From 92dabfcd020676eec48af415c0253006230474e2 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 23:28:46 +0800 Subject: [PATCH 055/420] fix test error by changing expectedtxt --- text-ui-test/EXPECTED.TXT | 1 - 1 file changed, 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index ae6903bff1..d5d2a4c90e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -10,7 +10,6 @@ exit  =================================================== PC viewer -List currently empty! What would you like to do? View PC Build PC From 31758d5ddabcca9ee9ee040ddbc4d8264b106574 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 7 Mar 2023 23:34:32 +0800 Subject: [PATCH 056/420] Change expectedtxt --- text-ui-test/EXPECTED.TXT | 1 + 1 file changed, 1 insertion(+) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index d5d2a4c90e..ae6903bff1 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -10,6 +10,7 @@ exit  =================================================== PC viewer +List currently empty! What would you like to do? View PC Build PC From 5e524f4d48d58fb0ed3609ebf1c3cd92ebd7f7ba Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 8 Mar 2023 00:17:28 +0800 Subject: [PATCH 057/420] Reformat code --- src/main/java/seedu/bigpp/command/Command.java | 1 + .../bigpp/command/viewercommand/ViewerAddCommand.java | 1 + src/main/java/seedu/bigpp/parser/Parser.java | 8 ++++---- src/main/java/seedu/bigpp/pc/PCList.java | 2 +- src/main/java/seedu/bigpp/ui/UI.java | 1 + 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java index 2c4818b943..46dd5346f8 100644 --- a/src/main/java/seedu/bigpp/command/Command.java +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -3,6 +3,7 @@ public abstract class Command { private String arguments; + public abstract String executeCommand(); public void setArguments(String arguments) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 51507a2e6d..dcbd5141fb 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -9,6 +9,7 @@ public class ViewerAddCommand extends Command { public ViewerAddCommand(String arguments) { super.setArguments(arguments); } + @Override public String executeCommand() { String name = super.getArguments(); diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 4ba2656f72..4538b18fbd 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -63,10 +63,10 @@ private Command parseViewerCommand(String userInput) { commandWord = commandWord.toLowerCase(); switch (commandWord) { - case "add": - return new ViewerAddCommand(arguments); - default: - return null; + case "add": + return new ViewerAddCommand(arguments); + default: + return null; } } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 8efd8ee9b2..03e0373aa8 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -10,7 +10,7 @@ public static ArrayList getList() { return pcList; } - public static void addPC (PC pc) { + public static void addPC(PC pc) { pcList.add(pc); } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 3855f259dc..084579c0b4 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -4,6 +4,7 @@ import java.io.PrintStream; import java.util.Scanner; + public abstract class UI { private static UIState uiState = UIState.MAIN_MENU; From 90b52a24f7bdc400f6435828b398ecf0f2cea6c5 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 8 Mar 2023 00:22:29 +0800 Subject: [PATCH 058/420] fix checkstyle errors --- .../java/seedu/bigpp/menu/BuilderMenu.java | 16 ++++++++-------- .../java/seedu/bigpp/menu/ComponentMenu.java | 12 ++++++------ src/main/java/seedu/bigpp/menu/MainMenu.java | 14 +++++++------- .../java/seedu/bigpp/menu/PCViewerMenu.java | 18 +++++++++--------- .../java/seedu/bigpp/menu/TutorialMenu.java | 12 ++++++------ src/main/java/seedu/bigpp/ui/UI.java | 14 ++++++++------ 6 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/main/java/seedu/bigpp/menu/BuilderMenu.java b/src/main/java/seedu/bigpp/menu/BuilderMenu.java index 42d4feddd5..be36b61b3d 100644 --- a/src/main/java/seedu/bigpp/menu/BuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/BuilderMenu.java @@ -1,16 +1,16 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.OUT; public class BuilderMenu { public static void printMenu() { - out.println("PC builder"); - out.println("What would you like to do?"); - out.println("Add component"); - out.println("Remove component"); - out.println("View PC"); - out.println("back"); - out.println("exit"); + OUT.println("PC builder"); + OUT.println("What would you like to do?"); + OUT.println("Add component"); + OUT.println("Remove component"); + OUT.println("View PC"); + OUT.println("back"); + OUT.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/menu/ComponentMenu.java b/src/main/java/seedu/bigpp/menu/ComponentMenu.java index b7e237c16c..508ae5fee4 100644 --- a/src/main/java/seedu/bigpp/menu/ComponentMenu.java +++ b/src/main/java/seedu/bigpp/menu/ComponentMenu.java @@ -1,14 +1,14 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.OUT; public class ComponentMenu { public static void printMenu() { - out.println("Component"); - out.println("What would you like to do?"); - out.println("View component"); - out.println("back"); - out.println("exit"); + OUT.println("Component"); + OUT.println("What would you like to do?"); + OUT.println("View component"); + OUT.println("back"); + OUT.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/menu/MainMenu.java b/src/main/java/seedu/bigpp/menu/MainMenu.java index 255eaeac36..aedb98edb7 100644 --- a/src/main/java/seedu/bigpp/menu/MainMenu.java +++ b/src/main/java/seedu/bigpp/menu/MainMenu.java @@ -1,16 +1,16 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.OUT; import static seedu.bigpp.ui.UI.LOGO; public class MainMenu extends Menu { public static void printMenu() { - out.println(LOGO); - out.println("Welcome to BigPP!"); - out.println("What would you like to do?"); - out.println("PC viewer"); - out.println("PC tutorial"); - out.println("exit"); + OUT.println(LOGO); + OUT.println("Welcome to BigPP!"); + OUT.println("What would you like to do?"); + OUT.println("PC viewer"); + OUT.println("PC tutorial"); + OUT.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 5abff27166..ced275cda2 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -1,17 +1,17 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.OUT; import seedu.bigpp.pc.PCList; public class PCViewerMenu extends Menu { - + public static void printMenu() { - out.println("PC viewer"); - PCList.printPcList(out); - out.println("What would you like to do?"); - out.println("View PC"); - out.println("Build PC"); - out.println("back"); - out.println("exit"); + OUT.println("PC viewer"); + PCList.printPcList(OUT); + OUT.println("What would you like to do?"); + OUT.println("View PC"); + OUT.println("Build PC"); + OUT.println("back"); + OUT.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/menu/TutorialMenu.java b/src/main/java/seedu/bigpp/menu/TutorialMenu.java index 34203582d8..ffa7a2c41f 100644 --- a/src/main/java/seedu/bigpp/menu/TutorialMenu.java +++ b/src/main/java/seedu/bigpp/menu/TutorialMenu.java @@ -1,14 +1,14 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; +import static seedu.bigpp.ui.UI.OUT; public class TutorialMenu { public static void printMenu() { - out.println("PC tutorial"); - out.println("What would you like to do?"); - out.println("View tutorial"); - out.println("back"); - out.println("exit"); + OUT.println("PC tutorial"); + OUT.println("What would you like to do?"); + OUT.println("View tutorial"); + OUT.println("back"); + OUT.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 93775726e0..3e0df49706 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -7,14 +7,16 @@ import seedu.bigpp.menu.BuilderMenu; import java.io.PrintStream; import java.util.Scanner; + public abstract class UI { + public static final PrintStream OUT = System.out; + public static final String LOGO = "add logo here"; + private static UIState uiState = UIState.MAIN_MENU; private static final String DIVIDER = "==================================================="; private static final Scanner in = new Scanner(System.in); - public static final String LOGO = "add logo here"; - public static final PrintStream out = System.out; public static UIState getUiState() { return uiState; @@ -26,7 +28,7 @@ public static String getInput() { public static void updateUI() { clearTerminal(); - out.println(DIVIDER); + OUT.println(DIVIDER); switch (uiState) { case MAIN_MENU: @@ -48,15 +50,15 @@ public static void updateUI() { break; } - out.println(DIVIDER); + OUT.println(DIVIDER); } public static void clearTerminal() { - out.println("\033[H\033[2J"); + OUT.println("\033[H\033[2J"); } public static void showResult(String result) { - out.println(result); + OUT.println(result); } public static void setMainMenuMode() { From ac0da6d495781b4c091976e983a7d41ff128e906 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 8 Mar 2023 01:52:39 +0800 Subject: [PATCH 059/420] Change the print statement after creating pc --- .../seedu/bigpp/command/viewercommand/ViewerAddCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index dcbd5141fb..22192c21e2 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -15,6 +15,6 @@ public String executeCommand() { String name = super.getArguments(); PC pc = new PC(name, false); PCList.addPC(pc); - return "I have created the PC with the following name: " + name; + return "Custom PC: [ " + name + " ] has been created"; } } From 50ab4d8a396e3dc8641368e26e5e782010939055 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 8 Mar 2023 02:36:39 +0800 Subject: [PATCH 060/420] Resolve #13 Create ViewerDeleteCommand to delete PC from the PC list --- .../viewercommand/ViewerAddCommand.java | 5 ++++ .../viewercommand/ViewerDeleteCommand.java | 29 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 ++ src/main/java/seedu/bigpp/pc/PC.java | 4 +++ src/main/java/seedu/bigpp/pc/PCList.java | 14 +++++++++ 5 files changed, 55 insertions(+) create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 22192c21e2..1e2ea0e695 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -10,6 +10,11 @@ public ViewerAddCommand(String arguments) { super.setArguments(arguments); } + /** + * Add new PC of a given name to the PC list + * + * @return the name of the PC created + */ @Override public String executeCommand() { String name = super.getArguments(); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java new file mode 100644 index 0000000000..9a8916e004 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -0,0 +1,29 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; + +public class ViewerDeleteCommand extends Command { + + public ViewerDeleteCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * Delete a PC of a given index from the PC list + * + * @return if the index is a Prebuilt PC, inform the user that the PC of that index cannot be deleted + * @return the name of the PC deleted + */ + @Override + public String executeCommand() { + int index = Integer.parseInt(super.getArguments()) - 1; + PC pc = (PCList.getList()).get(index); + if (pc.getIsPreBuilt()) { + return "Unable to delete Prebuilt PC"; + } + PCList.deletePC(index); + return "Custom PC: [ " + pc.getName() + " ] has been deleted"; + } +} \ No newline at end of file diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 4538b18fbd..61c7f24f79 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.BackCommand; +import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.mainmenucommand.ByeCommand; @@ -65,6 +66,8 @@ private Command parseViewerCommand(String userInput) { switch (commandWord) { case "add": return new ViewerAddCommand(arguments); + case "delete": + return new ViewerDeleteCommand(arguments); default: return null; } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 0eb6b48194..14a21ace14 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -21,6 +21,10 @@ public String getName() { return name; } + public boolean getIsPreBuilt() { + return isPrebuilt; + } + public void setCPU(CPU cpu) { this.cpu = cpu; } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 03e0373aa8..7d2682a079 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -10,10 +10,24 @@ public static ArrayList getList() { return pcList; } + /** + * Add PC to the PC list + * + * @param pc the PC that will be added to the list + */ public static void addPC(PC pc) { pcList.add(pc); } + /** + * Remove PC from the PC list + * + * @param index the position of the PC in the PC list + */ + public static void deletePC(int index) { + pcList.remove(index); + } + public static void printPcList(PrintStream out) { if (pcList.size() > 0) { out.println("Here is the list of PC Builds:"); From 8764e1de9a26970692c56cccdb6c4e23a3427435 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 8 Mar 2023 02:46:40 +0800 Subject: [PATCH 061/420] Resolve code format --- .../seedu/bigpp/command/viewercommand/ViewerAddCommand.java | 1 - .../bigpp/command/viewercommand/ViewerDeleteCommand.java | 5 ++--- src/main/java/seedu/bigpp/pc/PCList.java | 2 -- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 1e2ea0e695..a47aed4da4 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -12,7 +12,6 @@ public ViewerAddCommand(String arguments) { /** * Add new PC of a given name to the PC list - * * @return the name of the PC created */ @Override diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 9a8916e004..0073f1dcb7 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -12,9 +12,8 @@ public ViewerDeleteCommand(String arguments) { /** * Delete a PC of a given index from the PC list - * - * @return if the index is a Prebuilt PC, inform the user that the PC of that index cannot be deleted - * @return the name of the PC deleted + * @return if the index is a Prebuilt PC, inform the user that the PC of that index cannot be deleted. Or else, + * print the name of the PC deleted */ @Override public String executeCommand() { diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 7d2682a079..1318944165 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -12,7 +12,6 @@ public static ArrayList getList() { /** * Add PC to the PC list - * * @param pc the PC that will be added to the list */ public static void addPC(PC pc) { @@ -21,7 +20,6 @@ public static void addPC(PC pc) { /** * Remove PC from the PC list - * * @param index the position of the PC in the PC list */ public static void deletePC(int index) { From 65c93d47ff67a1965e5f37f3008ea253d8b1efb9 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 8 Mar 2023 10:38:34 +0800 Subject: [PATCH 062/420] Add new line in ViewerDeleteCommand --- .../seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 0073f1dcb7..584f7ac55e 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -25,4 +25,4 @@ public String executeCommand() { PCList.deletePC(index); return "Custom PC: [ " + pc.getName() + " ] has been deleted"; } -} \ No newline at end of file +} From 8d3b8a2c1a38038880961b917070107fbabf3268 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 8 Mar 2023 14:06:37 +0800 Subject: [PATCH 063/420] Change menu classes to be abstract --- src/main/java/seedu/bigpp/menu/BuilderMenu.java | 2 +- src/main/java/seedu/bigpp/menu/ComponentMenu.java | 2 +- src/main/java/seedu/bigpp/menu/MainMenu.java | 2 +- src/main/java/seedu/bigpp/menu/Menu.java | 2 +- src/main/java/seedu/bigpp/menu/PCViewerMenu.java | 2 +- src/main/java/seedu/bigpp/menu/TutorialMenu.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/menu/BuilderMenu.java b/src/main/java/seedu/bigpp/menu/BuilderMenu.java index be36b61b3d..129250c5b1 100644 --- a/src/main/java/seedu/bigpp/menu/BuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/BuilderMenu.java @@ -2,7 +2,7 @@ import static seedu.bigpp.ui.UI.OUT; -public class BuilderMenu { +public abstract class BuilderMenu extends Menu{ public static void printMenu() { OUT.println("PC builder"); diff --git a/src/main/java/seedu/bigpp/menu/ComponentMenu.java b/src/main/java/seedu/bigpp/menu/ComponentMenu.java index 508ae5fee4..76c6cd1392 100644 --- a/src/main/java/seedu/bigpp/menu/ComponentMenu.java +++ b/src/main/java/seedu/bigpp/menu/ComponentMenu.java @@ -2,7 +2,7 @@ import static seedu.bigpp.ui.UI.OUT; -public class ComponentMenu { +public abstract class ComponentMenu extends Menu { public static void printMenu() { OUT.println("Component"); diff --git a/src/main/java/seedu/bigpp/menu/MainMenu.java b/src/main/java/seedu/bigpp/menu/MainMenu.java index aedb98edb7..e67fac1709 100644 --- a/src/main/java/seedu/bigpp/menu/MainMenu.java +++ b/src/main/java/seedu/bigpp/menu/MainMenu.java @@ -3,7 +3,7 @@ import static seedu.bigpp.ui.UI.OUT; import static seedu.bigpp.ui.UI.LOGO; -public class MainMenu extends Menu { +public abstract class MainMenu extends Menu { public static void printMenu() { OUT.println(LOGO); diff --git a/src/main/java/seedu/bigpp/menu/Menu.java b/src/main/java/seedu/bigpp/menu/Menu.java index deec468b4b..d788149d3e 100644 --- a/src/main/java/seedu/bigpp/menu/Menu.java +++ b/src/main/java/seedu/bigpp/menu/Menu.java @@ -1,5 +1,5 @@ package seedu.bigpp.menu; public abstract class Menu { - + } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index ced275cda2..1e7b7a8917 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -3,7 +3,7 @@ import static seedu.bigpp.ui.UI.OUT; import seedu.bigpp.pc.PCList; -public class PCViewerMenu extends Menu { +public abstract class PCViewerMenu extends Menu { public static void printMenu() { OUT.println("PC viewer"); diff --git a/src/main/java/seedu/bigpp/menu/TutorialMenu.java b/src/main/java/seedu/bigpp/menu/TutorialMenu.java index ffa7a2c41f..cd41f96d58 100644 --- a/src/main/java/seedu/bigpp/menu/TutorialMenu.java +++ b/src/main/java/seedu/bigpp/menu/TutorialMenu.java @@ -2,7 +2,7 @@ import static seedu.bigpp.ui.UI.OUT; -public class TutorialMenu { +public abstract class TutorialMenu extends Menu { public static void printMenu() { OUT.println("PC tutorial"); From 293ee1a6f9b95c5cd461567bf9fc029d22d644ee Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 8 Mar 2023 14:41:17 +0800 Subject: [PATCH 064/420] Change PCList to use OUT to make code consistent --- .../TutorialNextPageCommand.java | 5 ++ .../TutorialPreviousPageCommand.java | 5 ++ .../tutorialcommand/TutorialViewCommand.java | 13 +++++ .../java/seedu/bigpp/menu/PCViewerMenu.java | 2 +- src/main/java/seedu/bigpp/pc/PCList.java | 9 ++-- userdata/tutorial/tutorial.txt | 52 +++++++++++++++++++ 6 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java create mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java create mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java create mode 100644 userdata/tutorial/tutorial.txt diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java new file mode 100644 index 0000000000..5ecde7fd94 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java @@ -0,0 +1,5 @@ +package seedu.bigpp.command.tutorialcommand; + +public class TutorialNextPageCommand { + +} diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java new file mode 100644 index 0000000000..9648fb218e --- /dev/null +++ b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java @@ -0,0 +1,5 @@ +package seedu.bigpp.command.tutorialcommand; + +public class TutorialPreviousPageCommand { + +} diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java new file mode 100644 index 0000000000..6bae0de384 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java @@ -0,0 +1,13 @@ +package seedu.bigpp.command.tutorialcommand; + +import seedu.bigpp.command.Command; + +public class TutorialViewCommand extends Command { + public TutorialViewCommand(String arguments) { + super.setArguments(arguments); + } + + public String executeCommand() { + return ""; + } +} diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 1e7b7a8917..0c0a5307dc 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -7,7 +7,7 @@ public abstract class PCViewerMenu extends Menu { public static void printMenu() { OUT.println("PC viewer"); - PCList.printPcList(OUT); + PCList.printPcList(); OUT.println("What would you like to do?"); OUT.println("View PC"); OUT.println("Build PC"); diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 1318944165..8fe85a5e15 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -2,6 +2,7 @@ import java.io.PrintStream; import java.util.ArrayList; +import static seedu.bigpp.ui.UI.OUT; public abstract class PCList { private static ArrayList pcList = new ArrayList<>(); @@ -26,14 +27,14 @@ public static void deletePC(int index) { pcList.remove(index); } - public static void printPcList(PrintStream out) { + public static void printPcList() { if (pcList.size() > 0) { - out.println("Here is the list of PC Builds:"); + OUT.println("Here is the list of PC Builds:"); for (int i = 0; i < pcList.size(); i++) { - out.println((i + 1) + "." + pcList.get(i)); + OUT.println((i + 1) + "." + pcList.get(i)); } } else { - out.println("List currently empty!"); + OUT.println("List currently empty!"); } } } diff --git a/userdata/tutorial/tutorial.txt b/userdata/tutorial/tutorial.txt new file mode 100644 index 0000000000..991a041f49 --- /dev/null +++ b/userdata/tutorial/tutorial.txt @@ -0,0 +1,52 @@ +1. Determine your budget: This is an important first step in building a custom PC. Make sure to +factor in the cost of all the components you'll need, as well as any peripherals like a monitor +or keyboard. + +2. Choose your CPU: Your CPU will determine the overall performance of your PC. There are two main +brands to choose from - Intel and AMD. Determine which brand suits your needs and then choose a +specific model based on benchmarks, reviews, and price. + +3. Select a compatible motherboard: Once you have chosen your CPU, you'll need to select a +compatible motherboard. Make sure it has the necessary chipset for your CPU, has the right +number of expansion slots, and has enough fan headers to keep your system cool. + +4. Choose your RAM: RAM is important for multitasking and running applications smoothly. Look for +RAM that is compatible with your motherboard and CPU, and choose the amount that meets your +needs. For most users, 16GB of RAM is sufficient. + +5. Pick a storage solution: You have two options for storage - a traditional hard drive or a +faster, more expensive solid-state drive (SSD). An SSD will provide faster boot and load +times, but a traditional hard drive will provide more storage space at a lower cost. +Consider your needs and choose the right storage solution for you. + +6. Choose a graphics card: If you plan on gaming or doing any kind of graphic design work, you'll +need a dedicated graphics card. Make sure it's compatible with your motherboard and has enough +power to handle your needs. Look at benchmarks and reviews to determine the best card for your +budget. + +7. Select a power supply: Your power supply needs to be powerful enough to handle all your +components, but not so powerful that you're wasting money on extra wattage. Choose a +reputable brand and make sure it has enough connectors for all your components. + +8. Choose a case: Your case needs to be big enough to fit all your components and have good airflow +to keep everything cool. Look for a case that has plenty of cable management options to keep your +build looking neat. Consider the aesthetics and make sure it fits with your overall vision for +your PC. + +9. Assemble your PC: Now that you have all your components, it's time to put them together. Start +with the motherboard and CPU, then install the RAM, storage, graphics card, and power supply. +Make sure to connect all the necessary cables and use standoffs to secure the motherboard to +the case. + +10. Install your operating system: Once your PC is assembled, it's time to install your operating +system. This can be done via a USB drive or CD/DVD, depending on your software. Follow the +instructions carefully to complete the installation. + +11. Install drivers and software: After the operating system is installed, you'll need to install +drivers for your components. This includes drivers for your graphics card, motherboard, and other +peripherals. Install any necessary software for your needs as well, such as gaming or +productivity software. + +12. Test and optimize: Once your PC is up and running, it's important to test it for stability and +performance. Use benchmarking tools to make sure your components are working as they should be, +and optimize your settings for the best performance. From 386fbd830afae3e1171143b43652b155ec668928 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 8 Mar 2023 14:47:56 +0800 Subject: [PATCH 065/420] Fixed checkstyle violation --- src/main/java/seedu/bigpp/pc/PCList.java | 1 - src/main/java/seedu/bigpp/tutorial/Tutorial.java | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/bigpp/tutorial/Tutorial.java diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 8fe85a5e15..308cd7348c 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,6 +1,5 @@ package seedu.bigpp.pc; -import java.io.PrintStream; import java.util.ArrayList; import static seedu.bigpp.ui.UI.OUT; diff --git a/src/main/java/seedu/bigpp/tutorial/Tutorial.java b/src/main/java/seedu/bigpp/tutorial/Tutorial.java new file mode 100644 index 0000000000..cd6d425945 --- /dev/null +++ b/src/main/java/seedu/bigpp/tutorial/Tutorial.java @@ -0,0 +1,5 @@ +package seedu.bigpp.tutorial; + +public class Tutorial { + +} From 5e061837d188085f6f04d567dc3492bb9fb4149e Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 9 Mar 2023 23:54:21 +0800 Subject: [PATCH 066/420] Refactor code to reduce multiple hop menu's and encourage long commands application --- src/main/java/seedu/bigpp/BigPP.java | 2 +- .../command/commoncommand/BackCommand.java | 21 +++---- .../ByeCommand.java | 2 +- .../SelectComponentCommand.java | 12 ---- .../mainmenucommand/EnterTutorialCommand.java | 14 ----- .../mainmenucommand/EnterViewerCommand.java | 13 ----- .../seedu/bigpp/command/storage/Storage.java | 6 -- .../TutorialNextPageCommand.java | 5 -- .../TutorialPreviousPageCommand.java | 5 -- .../tutorialcommand/TutorialViewCommand.java | 13 ----- .../java/seedu/bigpp/menu/ComponentMenu.java | 14 ----- src/main/java/seedu/bigpp/menu/MainMenu.java | 16 ------ .../{BuilderMenu.java => PCBuilderMenu.java} | 13 ++++- .../java/seedu/bigpp/menu/PCViewerMenu.java | 4 +- .../java/seedu/bigpp/menu/TutorialMenu.java | 14 ----- src/main/java/seedu/bigpp/parser/Parser.java | 55 +++--------------- src/main/java/seedu/bigpp/pc/PC.java | 9 ++- .../java/seedu/bigpp/tutorial/Tutorial.java | 5 -- src/main/java/seedu/bigpp/ui/UI.java | 57 +++++++------------ src/main/java/seedu/bigpp/ui/UIState.java | 6 +- 20 files changed, 55 insertions(+), 231 deletions(-) rename src/main/java/seedu/bigpp/command/{mainmenucommand => commoncommand}/ByeCommand.java (81%) delete mode 100644 src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/storage/Storage.java delete mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java delete mode 100644 src/main/java/seedu/bigpp/menu/ComponentMenu.java delete mode 100644 src/main/java/seedu/bigpp/menu/MainMenu.java rename src/main/java/seedu/bigpp/menu/{BuilderMenu.java => PCBuilderMenu.java} (56%) delete mode 100644 src/main/java/seedu/bigpp/menu/TutorialMenu.java delete mode 100644 src/main/java/seedu/bigpp/tutorial/Tutorial.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index ed5104acd4..d11333bdc7 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -1,7 +1,7 @@ package seedu.bigpp; import seedu.bigpp.command.Command; -import seedu.bigpp.command.mainmenucommand.ByeCommand; +import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index ea2c875e5d..70c570fcb1 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -9,20 +9,13 @@ public class BackCommand extends Command { @Override public String executeCommand() { switch (UI.getUiState()) { - case MAIN_MENU: - return "cannot go back from main menu"; - case VIEWER: - UI.setMainMenuMode(); - return "returned to main menu"; - case BUILDER: - UI.setViewerMode(); - return "returned to viewer"; - case TUTORIAL: - UI.setMainMenuMode(); - return "returned to main menu"; - case COMPONENT: - UI.setBuilderMode(); - return "returned to builder"; + case PCVIEWER: + return "Cannot go back from PCViewer"; + + case PCBUILDER: + UI.setPCViewerMode(); + return "returned to PCViewer"; + default: return ""; } diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java similarity index 81% rename from src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java rename to src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java index 5737bb6d5f..d90158da78 100644 --- a/src/main/java/seedu/bigpp/command/mainmenucommand/ByeCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.mainmenucommand; +package seedu.bigpp.command.commoncommand; import seedu.bigpp.command.Command; diff --git a/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java b/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java deleted file mode 100644 index 41c23cd2e9..0000000000 --- a/src/main/java/seedu/bigpp/command/componentcommand/SelectComponentCommand.java +++ /dev/null @@ -1,12 +0,0 @@ -package seedu.bigpp.command.componentcommand; - -import seedu.bigpp.command.Command; - -public class SelectComponentCommand extends Command { - - @Override - public String executeCommand() { - // TODO Auto-generated method stub - return ""; - } -} diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java deleted file mode 100644 index c695500b4d..0000000000 --- a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterTutorialCommand.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.command.mainmenucommand; - -import seedu.bigpp.command.Command; - -import seedu.bigpp.ui.UI; - -public class EnterTutorialCommand extends Command { - - @Override - public String executeCommand() { - UI.setTutorialMode(); - return "Changed to tutorial mode"; - } -} diff --git a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java b/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java deleted file mode 100644 index 60cd79ad3c..0000000000 --- a/src/main/java/seedu/bigpp/command/mainmenucommand/EnterViewerCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package seedu.bigpp.command.mainmenucommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.ui.UI; - -public class EnterViewerCommand extends Command { - - @Override - public String executeCommand() { - UI.setViewerMode(); - return "Changed to viewer mode"; - } -} diff --git a/src/main/java/seedu/bigpp/command/storage/Storage.java b/src/main/java/seedu/bigpp/command/storage/Storage.java deleted file mode 100644 index 5e04cdd5fd..0000000000 --- a/src/main/java/seedu/bigpp/command/storage/Storage.java +++ /dev/null @@ -1,6 +0,0 @@ -package seedu.bigpp.command.storage; - -public class Storage { - public static final String FOLDER_PATH = "./userdata"; - public static final String FILE_PATH = "./userdata/bigpp.txt"; -} diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java deleted file mode 100644 index 5ecde7fd94..0000000000 --- a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialNextPageCommand.java +++ /dev/null @@ -1,5 +0,0 @@ -package seedu.bigpp.command.tutorialcommand; - -public class TutorialNextPageCommand { - -} diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java deleted file mode 100644 index 9648fb218e..0000000000 --- a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialPreviousPageCommand.java +++ /dev/null @@ -1,5 +0,0 @@ -package seedu.bigpp.command.tutorialcommand; - -public class TutorialPreviousPageCommand { - -} diff --git a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java b/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java deleted file mode 100644 index 6bae0de384..0000000000 --- a/src/main/java/seedu/bigpp/command/tutorialcommand/TutorialViewCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package seedu.bigpp.command.tutorialcommand; - -import seedu.bigpp.command.Command; - -public class TutorialViewCommand extends Command { - public TutorialViewCommand(String arguments) { - super.setArguments(arguments); - } - - public String executeCommand() { - return ""; - } -} diff --git a/src/main/java/seedu/bigpp/menu/ComponentMenu.java b/src/main/java/seedu/bigpp/menu/ComponentMenu.java deleted file mode 100644 index 76c6cd1392..0000000000 --- a/src/main/java/seedu/bigpp/menu/ComponentMenu.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.menu; - -import static seedu.bigpp.ui.UI.OUT; - -public abstract class ComponentMenu extends Menu { - - public static void printMenu() { - OUT.println("Component"); - OUT.println("What would you like to do?"); - OUT.println("View component"); - OUT.println("back"); - OUT.println("exit"); - } -} diff --git a/src/main/java/seedu/bigpp/menu/MainMenu.java b/src/main/java/seedu/bigpp/menu/MainMenu.java deleted file mode 100644 index e67fac1709..0000000000 --- a/src/main/java/seedu/bigpp/menu/MainMenu.java +++ /dev/null @@ -1,16 +0,0 @@ -package seedu.bigpp.menu; - -import static seedu.bigpp.ui.UI.OUT; -import static seedu.bigpp.ui.UI.LOGO; - -public abstract class MainMenu extends Menu { - - public static void printMenu() { - OUT.println(LOGO); - OUT.println("Welcome to BigPP!"); - OUT.println("What would you like to do?"); - OUT.println("PC viewer"); - OUT.println("PC tutorial"); - OUT.println("exit"); - } -} diff --git a/src/main/java/seedu/bigpp/menu/BuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java similarity index 56% rename from src/main/java/seedu/bigpp/menu/BuilderMenu.java rename to src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 129250c5b1..d98fb90b81 100644 --- a/src/main/java/seedu/bigpp/menu/BuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -1,12 +1,19 @@ package seedu.bigpp.menu; +import seedu.bigpp.pc.PC; import static seedu.bigpp.ui.UI.OUT; -public abstract class BuilderMenu extends Menu{ +public class PCBuilderMenu extends Menu { - public static void printMenu() { + private PC pc; + + public PCBuilderMenu(PC pc) { + this.pc = pc; + } + + public void printMenu() { OUT.println("PC builder"); - OUT.println("What would you like to do?"); + pc.printComponents(); OUT.println("Add component"); OUT.println("Remove component"); OUT.println("View PC"); diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 0c0a5307dc..c9e60bc168 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -3,9 +3,9 @@ import static seedu.bigpp.ui.UI.OUT; import seedu.bigpp.pc.PCList; -public abstract class PCViewerMenu extends Menu { +public class PCViewerMenu extends Menu { - public static void printMenu() { + public void printMenu() { OUT.println("PC viewer"); PCList.printPcList(); OUT.println("What would you like to do?"); diff --git a/src/main/java/seedu/bigpp/menu/TutorialMenu.java b/src/main/java/seedu/bigpp/menu/TutorialMenu.java deleted file mode 100644 index cd41f96d58..0000000000 --- a/src/main/java/seedu/bigpp/menu/TutorialMenu.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.menu; - -import static seedu.bigpp.ui.UI.OUT; - -public abstract class TutorialMenu extends Menu { - - public static void printMenu() { - OUT.println("PC tutorial"); - OUT.println("What would you like to do?"); - OUT.println("View tutorial"); - OUT.println("back"); - OUT.println("exit"); - } -} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 61c7f24f79..d42c672420 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -2,57 +2,34 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.BackCommand; +import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.ui.UI; -import seedu.bigpp.command.mainmenucommand.ByeCommand; -import seedu.bigpp.command.mainmenucommand.EnterViewerCommand; -import seedu.bigpp.command.mainmenucommand.EnterTutorialCommand; - import seedu.bigpp.command.viewercommand.ViewerAddCommand; public class Parser { public Command parseCommand(String userInput) { + // try common commands first if (userInput.equals("back")) { return new BackCommand(); } - switch (UI.getUiState()) { + if (userInput.equals("bye")) { + return new ByeCommand(); + } - case MAIN_MENU: - return parseMainMenuCommand(userInput); + // once common commands are tried, try menu specific commands + switch (UI.getUiState()) { - case VIEWER: + case PCVIEWER: return parseViewerCommand(userInput); - case BUILDER: + case PCBUILDER: return parseBuilderCommand(userInput); - case TUTORIAL: - return parseTutorialCommand(userInput); - - case COMPONENT: - return parseComponentCommand(userInput); - - default: - return null; - } - } - - private Command parseMainMenuCommand(String userInput) { - String commandWord = userInput.split(" ")[0]; - - commandWord = commandWord.toLowerCase(); - - switch (commandWord) { - case "viewer": - return new EnterViewerCommand(); - case "tutorial": - return new EnterTutorialCommand(); - case "exit": - return new ByeCommand(); default: return null; } @@ -79,18 +56,4 @@ private Command parseBuilderCommand(String userInput) { commandWord = commandWord.toLowerCase(); return null; } - - private Command parseTutorialCommand(String userInput) { - String commandWord = userInput.split(" ")[0]; - - commandWord = commandWord.toLowerCase(); - return null; - } - - private Command parseComponentCommand(String userInput) { - String commandWord = userInput.split(" ")[0]; - - commandWord = commandWord.toLowerCase(); - return null; - } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 14a21ace14..20d5df417c 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -1,8 +1,7 @@ package seedu.bigpp.pc; import seedu.bigpp.component.cpu.CPU; - -import java.io.PrintStream; +import static seedu.bigpp.ui.UI.OUT; public class PC { private String name; @@ -46,9 +45,9 @@ public String buildType(Boolean isPrebuilt) { } } - public void printComponents(PrintStream out) { - out.println(cpu); - //print other components when classes are created for individual components + public void printComponents() { + OUT.println(cpu); + // print other components when classes are created for individual components } @Override diff --git a/src/main/java/seedu/bigpp/tutorial/Tutorial.java b/src/main/java/seedu/bigpp/tutorial/Tutorial.java deleted file mode 100644 index cd6d425945..0000000000 --- a/src/main/java/seedu/bigpp/tutorial/Tutorial.java +++ /dev/null @@ -1,5 +0,0 @@ -package seedu.bigpp.tutorial; - -public class Tutorial { - -} diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 3e0df49706..613c6218ff 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,22 +1,24 @@ package seedu.bigpp.ui; -import seedu.bigpp.menu.MainMenu; import seedu.bigpp.menu.PCViewerMenu; -import seedu.bigpp.menu.TutorialMenu; -import seedu.bigpp.menu.ComponentMenu; -import seedu.bigpp.menu.BuilderMenu; +import seedu.bigpp.menu.PCBuilderMenu; +import seedu.bigpp.ui.UIState; +import seedu.bigpp.pc.PC; import java.io.PrintStream; import java.util.Scanner; public abstract class UI { - - public static final PrintStream OUT = System.out; - public static final String LOGO = "add logo here"; - private static UIState uiState = UIState.MAIN_MENU; + public static final String LOGO = "add logo here"; private static final String DIVIDER = "==================================================="; + private static final Scanner in = new Scanner(System.in); + public static final PrintStream OUT = System.out; + + private static UIState uiState = UIState.PCVIEWER; + private static PCViewerMenu viewerMenu = new PCViewerMenu(); + private static PCBuilderMenu builderMenu = null; public static UIState getUiState() { return uiState; @@ -31,20 +33,11 @@ public static void updateUI() { OUT.println(DIVIDER); switch (uiState) { - case MAIN_MENU: - MainMenu.printMenu(); - break; - case VIEWER: - PCViewerMenu.printMenu(); - break; - case BUILDER: - BuilderMenu.printMenu(); + case PCVIEWER: + viewerMenu.printMenu(); break; - case TUTORIAL: - TutorialMenu.printMenu(); - break; - case COMPONENT: - ComponentMenu.printMenu(); + case PCBUILDER: + builderMenu.printMenu(); break; default: break; @@ -61,23 +54,13 @@ public static void showResult(String result) { OUT.println(result); } - public static void setMainMenuMode() { - uiState = UIState.MAIN_MENU; - } - - public static void setViewerMode() { - uiState = UIState.VIEWER; - } - - public static void setBuilderMode() { - uiState = UIState.BUILDER; - } - - public static void setTutorialMode() { - uiState = UIState.TUTORIAL; + public static void setPCViewerMode() { + uiState = UIState.PCVIEWER; + builderMenu = null; } - public static void setComponentMode() { - uiState = UIState.COMPONENT; + public static void setPCBuilderMode(PC pc) { + uiState = UIState.PCBUILDER; + builderMenu = new PCBuilderMenu(pc); } } diff --git a/src/main/java/seedu/bigpp/ui/UIState.java b/src/main/java/seedu/bigpp/ui/UIState.java index 344700690e..cf147914b9 100644 --- a/src/main/java/seedu/bigpp/ui/UIState.java +++ b/src/main/java/seedu/bigpp/ui/UIState.java @@ -1,9 +1,5 @@ package seedu.bigpp.ui; public enum UIState { - MAIN_MENU, - VIEWER, - BUILDER, - TUTORIAL, - COMPONENT, + PCVIEWER, PCBUILDER } From 6e966e5960832fa48d6d0abf3c2dbdf2b414d091 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 9 Mar 2023 23:57:19 +0800 Subject: [PATCH 067/420] Change text-ui-test contents to account for refactored code --- text-ui-test/EXPECTED.TXT | 37 ++++++++++++++++++++++++++++++++----- text-ui-test/input.txt | 4 +++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index ae6903bff1..79dc059d8d 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,20 +1,47 @@  =================================================== -add logo here -Welcome to BigPP! +PC viewer +List currently empty! What would you like to do? +View PC +Build PC +back +exit +=================================================== + +=================================================== PC viewer -PC tutorial +Here is the list of PC Builds: +1.Custom-PC: [newpc1] - $0.0 +What would you like to do? +View PC +Build PC +back exit =================================================== +Custom PC: [ newpc1 ] has been created  =================================================== PC viewer -List currently empty! +Here is the list of PC Builds: +1.Custom-PC: [newpc1] - $0.0 +2.Custom-PC: [newpc2] - $0.0 +What would you like to do? +View PC +Build PC +back +exit +=================================================== +Custom PC: [ newpc2 ] has been created + +=================================================== +PC viewer +Here is the list of PC Builds: +1.Custom-PC: [newpc2] - $0.0 What would you like to do? View PC Build PC back exit =================================================== -Changed to viewer mode +Custom PC: [ newpc1 ] has been deleted diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index c934fbc214..9e55af1f6d 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1,3 @@ -viewer \ No newline at end of file +add newpc1 +add newpc2 +delete 1 \ No newline at end of file From d30e64a2c9e5241aa0c288d7e72f2f37d4971c81 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 10 Mar 2023 00:11:07 +0800 Subject: [PATCH 068/420] Update code to meet checkstyle requirements --- .../java/seedu/bigpp/menu/PCBuilderMenu.java | 14 ++++++------ .../java/seedu/bigpp/menu/PCViewerMenu.java | 14 ++++++------ src/main/java/seedu/bigpp/pc/PC.java | 4 ++-- src/main/java/seedu/bigpp/pc/PCList.java | 8 +++---- src/main/java/seedu/bigpp/ui/UI.java | 22 +++++++++++-------- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index d98fb90b81..2b6eded903 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -1,7 +1,7 @@ package seedu.bigpp.menu; import seedu.bigpp.pc.PC; -import static seedu.bigpp.ui.UI.OUT; +import static seedu.bigpp.ui.UI.out; public class PCBuilderMenu extends Menu { @@ -12,12 +12,12 @@ public PCBuilderMenu(PC pc) { } public void printMenu() { - OUT.println("PC builder"); + out.println("PC builder"); pc.printComponents(); - OUT.println("Add component"); - OUT.println("Remove component"); - OUT.println("View PC"); - OUT.println("back"); - OUT.println("exit"); + out.println("Add component"); + out.println("Remove component"); + out.println("View PC"); + out.println("back"); + out.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index c9e60bc168..2bb47a0192 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -1,17 +1,17 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.OUT; +import static seedu.bigpp.ui.UI.out; import seedu.bigpp.pc.PCList; public class PCViewerMenu extends Menu { public void printMenu() { - OUT.println("PC viewer"); + out.println("PC viewer"); PCList.printPcList(); - OUT.println("What would you like to do?"); - OUT.println("View PC"); - OUT.println("Build PC"); - OUT.println("back"); - OUT.println("exit"); + out.println("What would you like to do?"); + out.println("View PC"); + out.println("Build PC"); + out.println("back"); + out.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 20d5df417c..c00e0f066b 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -1,7 +1,7 @@ package seedu.bigpp.pc; import seedu.bigpp.component.cpu.CPU; -import static seedu.bigpp.ui.UI.OUT; +import static seedu.bigpp.ui.UI.out; public class PC { private String name; @@ -46,7 +46,7 @@ public String buildType(Boolean isPrebuilt) { } public void printComponents() { - OUT.println(cpu); + out.println(cpu); // print other components when classes are created for individual components } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 308cd7348c..c0464e8c44 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,7 +1,7 @@ package seedu.bigpp.pc; import java.util.ArrayList; -import static seedu.bigpp.ui.UI.OUT; +import static seedu.bigpp.ui.UI.out; public abstract class PCList { private static ArrayList pcList = new ArrayList<>(); @@ -28,12 +28,12 @@ public static void deletePC(int index) { public static void printPcList() { if (pcList.size() > 0) { - OUT.println("Here is the list of PC Builds:"); + out.println("Here is the list of PC Builds:"); for (int i = 0; i < pcList.size(); i++) { - OUT.println((i + 1) + "." + pcList.get(i)); + out.println((i + 1) + "." + pcList.get(i)); } } else { - OUT.println("List currently empty!"); + out.println("List currently empty!"); } } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 613c6218ff..ca87ed05ee 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -2,24 +2,23 @@ import seedu.bigpp.menu.PCViewerMenu; import seedu.bigpp.menu.PCBuilderMenu; -import seedu.bigpp.ui.UIState; import seedu.bigpp.pc.PC; import java.io.PrintStream; import java.util.Scanner; public abstract class UI { - public static final String LOGO = "add logo here"; + private static final String LOGO = "add logo here"; private static final String DIVIDER = "==================================================="; - private static final Scanner in = new Scanner(System.in); - public static final PrintStream OUT = System.out; - private static UIState uiState = UIState.PCVIEWER; private static PCViewerMenu viewerMenu = new PCViewerMenu(); private static PCBuilderMenu builderMenu = null; + private static Scanner in = new Scanner(System.in); + public static PrintStream out = System.out; + public static UIState getUiState() { return uiState; } @@ -28,9 +27,14 @@ public static String getInput() { return in.nextLine(); } + public static void showWelcome() { + out.println(LOGO); + out.println("Welcome to BigPP!"); + } + public static void updateUI() { clearTerminal(); - OUT.println(DIVIDER); + out.println(DIVIDER); switch (uiState) { case PCVIEWER: @@ -43,15 +47,15 @@ public static void updateUI() { break; } - OUT.println(DIVIDER); + out.println(DIVIDER); } public static void clearTerminal() { - OUT.println("\033[H\033[2J"); + out.println("\033[H\033[2J"); } public static void showResult(String result) { - OUT.println(result); + out.println(result); } public static void setPCViewerMode() { From 7c760b3c792588a57d4133a47f7235f88776f02f Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Fri, 10 Mar 2023 00:48:04 +0800 Subject: [PATCH 069/420] Junit test for bye command --- .../command/commoncommand/ByeCommandTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java diff --git a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java new file mode 100644 index 0000000000..78edfc69ec --- /dev/null +++ b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java @@ -0,0 +1,15 @@ +package seedu.bigpp.command.commoncommand; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ByeCommandTest { + @Test + public void testByeCommand() { + ByeCommand byeCommand = new ByeCommand(); + String expectedOutput = "Bye. Hope to see you again soon!"; + String actualOutput = byeCommand.executeCommand(); + assertEquals(expectedOutput, actualOutput); + } +} From 2502fa2f60abba975a9bb0cb84b9c7a9c72595bf Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 10 Mar 2023 01:27:49 +0800 Subject: [PATCH 070/420] Add JUnit test for Parser class --- build.gradle | 4 +- .../java/seedu/bigpp/parser/ParserTest.java | 53 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/test/java/seedu/bigpp/parser/ParserTest.java diff --git a/build.gradle b/build.gradle index c53c6afcac..da298b38e1 100644 --- a/build.gradle +++ b/build.gradle @@ -10,8 +10,8 @@ repositories { } dependencies { - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' } test { diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java new file mode 100644 index 0000000000..f401808ebd --- /dev/null +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -0,0 +1,53 @@ +package seedu.bigpp.parser; + +import org.junit.jupiter.api.Test; + +import seedu.bigpp.command.Command; +import seedu.bigpp.command.commoncommand.BackCommand; +import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.command.viewercommand.ViewerAddCommand; +import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.ui.UI; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class ParserTest { + @Test + void parseCommand_backCommand_success() { + Parser parser = new Parser(); + UI.setPCViewerMode(); + + Command command = parser.parseCommand("back"); + assertNotNull(command); + assertEquals(BackCommand.class, command.getClass()); + } + + @Test + void parseCommand_byeCommand_success() { + Parser parser = new Parser(); + Command command = parser.parseCommand("bye"); + assertNotNull(command); + assertEquals(ByeCommand.class, command.getClass()); + } + + @Test + void parseCommand_viewerAddCommand_success() { + Parser parser = new Parser(); + UI.setPCViewerMode(); + + Command command = parser.parseCommand("add abc"); + assertNotNull(command); + assertEquals(ViewerAddCommand.class, command.getClass()); + } + + @Test + void parseCommand_viewerDeleteCommand_success() { + Parser parser = new Parser(); + UI.setPCViewerMode(); + + Command command = parser.parseCommand("delete 1"); + assertNotNull(command); + assertEquals(ViewerDeleteCommand.class, command.getClass()); + } +} From 14a0d691cf3c246a834a4cbe326338b9ec93b0d4 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Fri, 10 Mar 2023 01:27:53 +0800 Subject: [PATCH 071/420] Add JUnit testing for backcommand --- .../commoncommand/BackCommandTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java new file mode 100644 index 0000000000..7809d9944c --- /dev/null +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -0,0 +1,22 @@ +package seedu.bigpp.command.commoncommand; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import seedu.bigpp.ui.UI; + +public class BackCommandTest { + + @Test + public void testExecuteCommand() { + // Arrange + BackCommand backCommand = new BackCommand(); + UI.setPCViewerMode(); + UI.updateUI(); + + // Act + String result = backCommand.executeCommand(); + + // Assert + assertEquals("Cannot go back from PCViewer", result); + } +} From 5cc6ea8434210a924744332f36f872e47acfe650 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 10 Mar 2023 01:35:59 +0800 Subject: [PATCH 072/420] Revert "Junit test for bye command" --- .../command/commoncommand/ByeCommandTest.java | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java diff --git a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java deleted file mode 100644 index 78edfc69ec..0000000000 --- a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package seedu.bigpp.command.commoncommand; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ByeCommandTest { - @Test - public void testByeCommand() { - ByeCommand byeCommand = new ByeCommand(); - String expectedOutput = "Bye. Hope to see you again soon!"; - String actualOutput = byeCommand.executeCommand(); - assertEquals(expectedOutput, actualOutput); - } -} From 3cd7c43f76f9898e711cbc272baa4450e577de1a Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Fri, 10 Mar 2023 01:39:48 +0800 Subject: [PATCH 073/420] Update test naming --- .../java/seedu/bigpp/command/commoncommand/ByeCommandTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java index 78edfc69ec..7336b7217e 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java @@ -6,7 +6,7 @@ public class ByeCommandTest { @Test - public void testByeCommand() { + public void executeCommand_byeCommand_success() { ByeCommand byeCommand = new ByeCommand(); String expectedOutput = "Bye. Hope to see you again soon!"; String actualOutput = byeCommand.executeCommand(); From 6a855300396c30e6ba129582e1e03e5a9c80d880 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Fri, 10 Mar 2023 01:50:26 +0800 Subject: [PATCH 074/420] Add test for backCommand from PCBuilder --- .../command/commoncommand/BackCommandTest.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 7809d9944c..0d9c56c384 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -7,16 +7,14 @@ public class BackCommandTest { @Test - public void testExecuteCommand() { - // Arrange + public void executeCommand_backCommand_success() { BackCommand backCommand = new BackCommand(); UI.setPCViewerMode(); - UI.updateUI(); - - // Act - String result = backCommand.executeCommand(); - - // Assert - assertEquals("Cannot go back from PCViewer", result); + String PCViewerBackCommandResult = backCommand.executeCommand(); + assertEquals("Cannot go back from PCViewer", PCViewerBackCommandResult); + + UI.setPCBuilderMode(null); + String PCBuilderBackCommandResult = backCommand.executeCommand(); + assertEquals("returned to PCViewer", PCBuilderBackCommandResult); } } From 496e3be2373a13c264cae0e1c0255bdc307735c1 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Fri, 10 Mar 2023 02:07:50 +0800 Subject: [PATCH 075/420] Create JUnit test for add command --- .../command/viewercommand/AddCommandTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java diff --git a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java new file mode 100644 index 0000000000..736f4bd854 --- /dev/null +++ b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java @@ -0,0 +1,16 @@ +package seedu.bigpp.command.viewercommand; + +import org.junit.jupiter.api.Test; +import seedu.bigpp.command.commoncommand.ByeCommand; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AddCommandTest { + @Test + public void executeCommand_addCommand_success() { + String pcName = "Test PC"; + ViewerAddCommand viewerAddCommand = new ViewerAddCommand(pcName); + String commandResult = viewerAddCommand.executeCommand(); + assertEquals("Custom PC: [ Test PC ] has been created", commandResult); + } +} From bb3dfbdade4796114d0c3cdf8cd49be9a109ffcf Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Fri, 10 Mar 2023 02:15:37 +0800 Subject: [PATCH 076/420] Reformat JUnit code --- .../java/seedu/bigpp/command/viewercommand/AddCommandTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java index 736f4bd854..026acc8958 100644 --- a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java +++ b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java @@ -1,7 +1,6 @@ package seedu.bigpp.command.viewercommand; import org.junit.jupiter.api.Test; -import seedu.bigpp.command.commoncommand.ByeCommand; import static org.junit.jupiter.api.Assertions.assertEquals; From 78aacdb23bea2b18a129bf91e44d4c9f3d6f50e7 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 14:48:44 +0800 Subject: [PATCH 077/420] Add a class for each new component, and also a list to store all of their objects --- .../bigpp/component/chassis/Chassis.java | 32 +++ .../bigpp/component/chassis/ChassisList.java | 7 + .../java/seedu/bigpp/component/cpu/CPU.java | 82 ++++-- .../seedu/bigpp/component/cpu/CPUList.java | 7 +- .../bigpp/component/cpucooler/CPUCooler.java | 54 ++++ .../component/cpucooler/CPUCoolerList.java | 7 + .../java/seedu/bigpp/component/gpu/GPU.java | 43 ++++ .../seedu/bigpp/component/gpu/GPUList.java | 7 + .../component/motherboard/Motherboard.java | 55 ++++ .../motherboard/MotherboardList.java | 7 + .../java/seedu/bigpp/component/psu/PSU.java | 54 ++++ .../seedu/bigpp/component/psu/PSUList.java | 7 + .../java/seedu/bigpp/component/ram/RAM.java | 65 +++++ .../seedu/bigpp/component/ram/RAMList.java | 7 + .../bigpp/component/storage/Storage.java | 55 ++++ .../bigpp/component/storage/StorageList.java | 7 + userdata/case/case.json | 24 -- userdata/chassis/chassis.json | 22 ++ userdata/cpu/cpu.json | 240 +++++++++--------- userdata/cpu_cooler/cpucooler.json | 28 -- userdata/cpucooler/cpucooler.json | 30 +++ userdata/gpu/gpu.json | 48 ++-- userdata/motherboard/motherboard.json | 156 ++++++------ .../{cpu/cpu.txt => prebuilt/prebuilt.json} | 0 userdata/prebuilt/prebuilt.txt | 0 userdata/psu/psu.json | 14 +- userdata/ram/ram.json | 60 ++--- userdata/storage/storage.json | 52 ++-- userdata/tutorial/tutorial.txt | 52 ---- 29 files changed, 812 insertions(+), 410 deletions(-) create mode 100644 src/main/java/seedu/bigpp/component/chassis/Chassis.java create mode 100644 src/main/java/seedu/bigpp/component/chassis/ChassisList.java create mode 100644 src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java create mode 100644 src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java create mode 100644 src/main/java/seedu/bigpp/component/gpu/GPU.java create mode 100644 src/main/java/seedu/bigpp/component/gpu/GPUList.java create mode 100644 src/main/java/seedu/bigpp/component/motherboard/Motherboard.java create mode 100644 src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java create mode 100644 src/main/java/seedu/bigpp/component/psu/PSU.java create mode 100644 src/main/java/seedu/bigpp/component/psu/PSUList.java create mode 100644 src/main/java/seedu/bigpp/component/ram/RAM.java create mode 100644 src/main/java/seedu/bigpp/component/ram/RAMList.java create mode 100644 src/main/java/seedu/bigpp/component/storage/Storage.java create mode 100644 src/main/java/seedu/bigpp/component/storage/StorageList.java delete mode 100644 userdata/case/case.json create mode 100644 userdata/chassis/chassis.json delete mode 100644 userdata/cpu_cooler/cpucooler.json create mode 100644 userdata/cpucooler/cpucooler.json rename userdata/{cpu/cpu.txt => prebuilt/prebuilt.json} (100%) delete mode 100644 userdata/prebuilt/prebuilt.txt delete mode 100644 userdata/tutorial/tutorial.txt diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java new file mode 100644 index 0000000000..7011df4193 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -0,0 +1,32 @@ +package seedu.bigpp.component.chassis; + +import seedu.bigpp.component.Component; + +public class Chassis extends Component { + private String size; + + public Chassis(String name, String brand, float price, String size) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.size = size; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + @Override + public String toString() { + return "Chassis{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", size='" + size + '\'' + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java new file mode 100644 index 0000000000..88f7edae78 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.chassis; + +import java.util.ArrayList; + +public abstract class ChassisList { + private ArrayList chassisList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 0b0ba7e929..89168138d5 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -3,44 +3,86 @@ import seedu.bigpp.component.Component; public class CPU extends Component { + private int cores; + private int threads; + private float baseClock; + private float boostClock; + private int power; private String socket; - private int core; - private float clock; - public CPU(String socket, int core, float clock) { + public CPU(String name, float price, int cores, int threads, float baseClock, float boostClock, int power, + String brand, String socket) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.cores = cores; + this.threads = threads; + this.baseClock = baseClock; + this.boostClock = boostClock; + this.power = power; this.socket = socket; - this.core = core; - this.clock = clock; + } + + public int getCores() { + return this.cores; + } + + public int getThreads() { + return this.threads; + } + + public float getBaseClock() { + return this.baseClock; + } + + public float getBoostClock() { + return this.boostClock; + } + + public int getPower() { + return this.power; } public String getSocket() { - return socket; + return this.socket; } - public int getCore() { - return core; + public void setCores(int cores) { + this.cores = cores; } - public float getClock() { - return clock; + public void setThreads(int threads) { + this.threads = threads; } - public void setSocket(String socket) { - this.socket = socket; + public void setBaseClock(float baseClock) { + this.baseClock = baseClock; + } + + public void setBoostClock(float boostClock) { + this.boostClock = boostClock; } - public void setCore(int core) { - this.core = core; + public void setPower(int power) { + this.power = power; } - public void setClock(float clock) { - this.clock = clock; + public void setSocket(String socket) { + this.socket = socket; } @Override public String toString() { - return "CPU [socket=" + socket + ", core=" + core + ", clock=" + clock + ", name=" + super.getName() - + ", brand=" + super.getBrand() + ", price=" + super.getPrice() + "]"; + return "CPU{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", cores=" + cores + + ", threads=" + threads + + ", baseClock=" + baseClock + + ", boostClock=" + boostClock + + ", power=" + power + + ", socket='" + socket + '\'' + + '}'; } - -} +} \ No newline at end of file diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java index e359113fd5..d274ff5eca 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPUList.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -2,11 +2,8 @@ import java.util.ArrayList; -public class CPUList { +public abstract class CPUList { - private ArrayList cpuList; + private ArrayList cpuList = new ArrayList<>(); - public CPUList() { - this.cpuList = new ArrayList<>(); - } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java new file mode 100644 index 0000000000..eef5651cd1 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -0,0 +1,54 @@ +package seedu.bigpp.component.cpucooler; + +import seedu.bigpp.component.Component; + +public class CPUCooler extends Component { + private int rpm; + private float noise; + private int power; + + public CPUCooler(String name, String brand, float price, int rpm, float noise, int power) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.rpm = rpm; + this.noise = noise; + this.power = power; + } + + public int getRpm() { + return rpm; + } + + public float getNoise() { + return noise; + } + + public int getPower() { + return power; + } + + public void setRpm(int rpm) { + this.rpm = rpm; + } + + public void setNoise(float noise) { + this.noise = noise; + } + + public void setPower(int power) { + this.power = power; + } + + @Override + public String toString() { + return "CPUCooler{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", rpm=" + rpm + + ", noise=" + noise + + ", power=" + power + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java new file mode 100644 index 0000000000..799d31ceb3 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.cpucooler; + +import java.util.ArrayList; + +public abstract class CPUCoolerList { + private ArrayList cpuCoolerList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java new file mode 100644 index 0000000000..f31856daa0 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -0,0 +1,43 @@ +package seedu.bigpp.component.gpu; + +import seedu.bigpp.component.Component; + +public class GPU extends Component { + private int power; + private String size; + + public GPU(String name, String brand, float price, int power, String size) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.power = power; + this.size = size; + } + + public int getPower() { + return power; + } + + public String getSize() { + return size; + } + + public void setPower(int power) { + this.power = power; + } + + public void setSize(String size) { + this.size = size; + } + + @Override + public String toString() { + return "GPU{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", power=" + power + + ", size='" + size + '\'' + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/gpu/GPUList.java b/src/main/java/seedu/bigpp/component/gpu/GPUList.java new file mode 100644 index 0000000000..fcbeded5e7 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/gpu/GPUList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.gpu; + +import java.util.ArrayList; + +public abstract class GPUList { + private ArrayList gpuList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java new file mode 100644 index 0000000000..9f41852f07 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -0,0 +1,55 @@ +package seedu.bigpp.component.motherboard; + +import seedu.bigpp.component.Component; + +public class Motherboard extends Component { + private String formFactor; + private String socket; + private int power; + + public Motherboard(String name, String brand, float price, String formFactor, String socket, int power) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.formFactor = formFactor; + this.socket = socket; + this.power = power; + } + + public String getFormFactor() { + return formFactor; + } + + public void setFormFactor(String formFactor) { + this.formFactor = formFactor; + } + + public String getSocket() { + return socket; + } + + public void setSocket(String socket) { + this.socket = socket; + } + + public int getPower() { + return power; + } + + public void setPower(int power) { + this.power = power; + } + + @Override + public String toString() { + return "Motherboard{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", formFactor='" + formFactor + '\'' + + ", socket='" + socket + '\'' + + ", power=" + power + + '}'; + } + +} diff --git a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java new file mode 100644 index 0000000000..f32c3d3552 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.motherboard; + +import java.util.ArrayList; + +public abstract class MotherboardList { + private ArrayList motherboardList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java new file mode 100644 index 0000000000..83819f06a7 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -0,0 +1,54 @@ +package seedu.bigpp.component.psu; + +import seedu.bigpp.component.Component; + +public class PSU extends Component { + private String efficiency; + private String formFactor; + private int power; + + public PSU(String name, float price, String brand, String efficiency, String formFactor, int power) { + super.setName(name); + super.setPrice(price); + super.setBrand(brand); + this.efficiency = efficiency; + this.formFactor = formFactor; + this.power = power; + } + + public String getEfficiency() { + return efficiency; + } + + public void setEfficiency(String efficiency) { + this.efficiency = efficiency; + } + + public String getFormFactor() { + return formFactor; + } + + public void setFormFactor(String formFactor) { + this.formFactor = formFactor; + } + + public int getPower() { + return power; + } + + public void setPower(int power) { + this.power = power; + } + + @Override + public String toString() { + return "PSU{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", efficiency='" + efficiency + '\'' + + ", formFactor='" + formFactor + '\'' + + ", power=" + power + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/psu/PSUList.java b/src/main/java/seedu/bigpp/component/psu/PSUList.java new file mode 100644 index 0000000000..0f4d9e45be --- /dev/null +++ b/src/main/java/seedu/bigpp/component/psu/PSUList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.psu; + +import java.util.ArrayList; + +public abstract class PSUList { + private ArrayList psuList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java new file mode 100644 index 0000000000..0944a1c5d6 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -0,0 +1,65 @@ +package seedu.bigpp.component.ram; + +import seedu.bigpp.component.Component; + +public class RAM extends Component { + private int memory; + private int sticks; + private int speed; + private int power; + + public RAM(String name, String brand, float price, int memory, int sticks, int speed, int power) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.memory = memory; + this.sticks = sticks; + this.speed = speed; + this.power = power; + } + + public int getMemory() { + return memory; + } + + public void setMemory(int memory) { + this.memory = memory; + } + + public int getSticks() { + return sticks; + } + + public void setSticks(int sticks) { + this.sticks = sticks; + } + + public int getSpeed() { + return speed; + } + + public void setSpeed(int speed) { + this.speed = speed; + } + + public int getPower() { + return power; + } + + public void setPower(int power) { + this.power = power; + } + + @Override + public String toString() { + return "RAM{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", memory=" + memory + + ", sticks=" + sticks + + ", speed=" + speed + + ", power=" + power + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/ram/RAMList.java b/src/main/java/seedu/bigpp/component/ram/RAMList.java new file mode 100644 index 0000000000..f8156477ce --- /dev/null +++ b/src/main/java/seedu/bigpp/component/ram/RAMList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.ram; + +import java.util.ArrayList; + +public abstract class RAMList { + private ArrayList ramList = new ArrayList<>(); +} diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java new file mode 100644 index 0000000000..d48ccd26e0 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -0,0 +1,55 @@ +package seedu.bigpp.component.storage; + +import seedu.bigpp.component.Component; + +public class Storage extends Component { + private String type; + private int size; // in GB + private int power; + + public Storage(String name, String brand, float price, String type, int size, int power) { + super.setName(name); + super.setBrand(brand); + super.setPrice(price); + this.type = type; + this.size = size; + this.power = power; + + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getPower() { + return power; + } + + public void setPower(int power) { + this.power = power; + } + + @Override + public String toString() { + return "Storage{" + + "name='" + super.getName() + '\'' + + ", brand='" + super.getBrand() + '\'' + + ", price=" + super.getPrice() + + ", type='" + type + '\'' + + ", size=" + size + + ", power=" + power + + '}'; + } +} diff --git a/src/main/java/seedu/bigpp/component/storage/StorageList.java b/src/main/java/seedu/bigpp/component/storage/StorageList.java new file mode 100644 index 0000000000..7f2f79f785 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/storage/StorageList.java @@ -0,0 +1,7 @@ +package seedu.bigpp.component.storage; + +import java.util.ArrayList; + +public abstract class StorageList { + private ArrayList storageList = new ArrayList<>(); +} \ No newline at end of file diff --git a/userdata/case/case.json b/userdata/case/case.json deleted file mode 100644 index 86a02227ec..0000000000 --- a/userdata/case/case.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "cases": { - "Fractal Design Pop XL Air": { - "brand": "Fractal Design", - "price": 124.98, - "size": "full atx" - }, - "Corsair iCUE 4000X RGB": { - "brand": "Corsair", - "price": 144.99, - "size": "mid atx" - }, - "Cooler Master MasterBox MB311L ARGB": { - "brand": "Cooler Master", - "price": 74.98, - "size": "micro" - }, - "Silverstone SUGO 14": { - "brand": "Silverstone", - "price": 139.36, - "size": "mini" - } - } -} diff --git a/userdata/chassis/chassis.json b/userdata/chassis/chassis.json new file mode 100644 index 0000000000..8b99193a65 --- /dev/null +++ b/userdata/chassis/chassis.json @@ -0,0 +1,22 @@ +{ + "Fractal Design Pop XL Air": { + "brand": "Fractal Design", + "price": 124.98, + "size": "full" + }, + "Corsair iCUE 4000X RGB": { + "brand": "Corsair", + "price": 144.99, + "size": "mid" + }, + "Cooler Master MasterBox MB311L ARGB": { + "brand": "Cooler Master", + "price": 74.98, + "size": "micro" + }, + "Silverstone SUGO 14": { + "brand": "Silverstone", + "price": 139.36, + "size": "mini" + } +} diff --git a/userdata/cpu/cpu.json b/userdata/cpu/cpu.json index 5d881081f6..b5748070fc 100644 --- a/userdata/cpu/cpu.json +++ b/userdata/cpu/cpu.json @@ -1,124 +1,122 @@ { - "CPUS": { - "Intel Core i3-10100": { - "Price": 99.5, - "Cores": 4, - "Threads": 8, - "Base Clock": 3.6, - "Boost Clock": 4.3, - "TDP": 65, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i5-10600K": { - "Price": 182.47, - "Cores": 6, - "Threads": 12, - "Base Clock": 4.1, - "Boost Clock": 4.8, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i7-10700K": { - "Price": 269.95, - "Cores": 8, - "Threads": 16, - "Base Clock": 3.8, - "Boost Clock": 5.1, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1200" - }, - "Intel Core i3-12100F": { - "Price": 106.93, - "Cores": 4, - "Threads": 8, - "Base Clock": 3.3, - "Boost Clock": 4.3, - "TDP": 58, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "Intel Core i5-12600K": { - "Price": 213.82, - "Cores": 10, - "Threads": 20, - "Base Clock": 3.7, - "Boost Clock": 4.9, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "Intel Core i7-12700K": { - "Price": 312.88, - "Cores": 12, - "Threads": 24, - "Base Clock": 3.6, - "Boost Clock": 5.0, - "TDP": 125, - "Brand": "Intel", - "Socket": "LGA1700" - }, - "AMD Ryzen 3 3200G": { - "Price": 97.5, - "Cores": 4, - "Threads": 4, - "Base Clock": 3.6, - "Boost Clock": 4.0, - "TDP": 65, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 5 5600X": { - "Price": 156.64, - "Cores": 6, - "Threads": 12, - "Base Clock": 3.7, - "Boost Clock": 4.6, - "TDP": 65, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 7 5800X": { - "Price": 211.33, - "Cores": 8, - "Threads": 16, - "Base Clock": 3.8, - "Boost Clock": 4.7, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM4" - }, - "AMD Ryzen 5 7600X": { - "Price": 240.86, - "Cores": 6, - "Threads": 12, - "Base Clock": 4.7, - "Boost Clock": 5.3, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM5" - }, - "AMD Ryzen 7 7700X": { - "Price": 341.29, - "Cores": 8, - "Threads": 16, - "Base Clock": 4.5, - "Boost Clock": 5.4, - "TDP": 105, - "Brand": "AMD", - "Socket": "AM5" - }, - "AMD Ryzen 9 7950X": { - "Price": 589.0, - "Cores": 16, - "Threads": 32, - "Base Clock": 4.5, - "Boost Clock": 5.7, - "TDP": 170, - "Brand": "AMD", - "Socket": "AM5" - } + "Intel core i3-10100": { + "price": 99.5, + "cores": 4, + "threads": 8, + "base clock": 3.6, + "boost clock": 4.3, + "power": 65, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i5-10600k": { + "price": 182.47, + "cores": 6, + "threads": 12, + "base clock": 4.1, + "boost clock": 4.8, + "power": 125, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i7-10700k": { + "price": 269.95, + "cores": 8, + "threads": 16, + "base clock": 3.8, + "boost clock": 5.1, + "power": 125, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i3-12100f": { + "price": 106.93, + "cores": 4, + "threads": 8, + "base clock": 3.3, + "boost clock": 4.3, + "power": 58, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel core i5-12600k": { + "price": 213.82, + "cores": 10, + "threads": 20, + "base clock": 3.7, + "boost clock": 4.9, + "power": 125, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel core i7-12700k": { + "price": 312.88, + "cores": 12, + "threads": 24, + "base clock": 3.6, + "boost clock": 5.0, + "power": 125, + "brand": "Intel", + "socket": "LGA1700" + }, + "AMD Ryzen 3 3200G": { + "price": 97.5, + "cores": 4, + "threads": 4, + "base clock": 3.6, + "boost clock": 4.0, + "power": 65, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 5 5600X": { + "price": 156.64, + "cores": 6, + "threads": 12, + "base clock": 3.7, + "boost clock": 4.6, + "power": 65, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 7 5800X": { + "price": 211.33, + "cores": 8, + "threads": 16, + "base clock": 3.8, + "boost clock": 4.7, + "power": 105, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 5 7600X": { + "price": 240.86, + "cores": 6, + "threads": 12, + "base clock": 4.7, + "boost clock": 5.3, + "power": 105, + "brand": "AMD", + "socket": "AM5" + }, + "AMD Ryzen 7 7700X": { + "price": 341.29, + "cores": 8, + "threads": 16, + "base clock": 4.5, + "boost clock": 5.4, + "power": 105, + "brand": "AMD", + "socket": "AM5" + }, + "AMD Ryzen 9 7950X": { + "price": 589.0, + "cores": 16, + "threads": 32, + "base clock": 4.5, + "boost clock": 5.7, + "power": 170, + "brand": "AMD", + "socket": "AM5" } } diff --git a/userdata/cpu_cooler/cpucooler.json b/userdata/cpu_cooler/cpucooler.json deleted file mode 100644 index f1a1cadaa9..0000000000 --- a/userdata/cpu_cooler/cpucooler.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "CPU_COOLERS": { - "Thermalright AXP90-X36": { - "RPM": 2700, - "Noise": 22.4, - "price": 22.9, - "brand": "Thermalright" - }, - "Noctua NH-L9i": { - "RPM": 2500, - "Noise": 23.6, - "price": 44.95, - "brand": "Noctua" - }, - "NZXT T120 RGB": { - "RPM": 1800, - "Noise": 27.5, - "price": 59.9, - "brand": "NZXT" - }, - "Cooler Master MASTERLIQUID ML120L RGB V2": { - "RPM": 1800, - "Noise": 27, - "price": 86.78, - "brand": "Cooler Master" - } - } -} diff --git a/userdata/cpucooler/cpucooler.json b/userdata/cpucooler/cpucooler.json new file mode 100644 index 0000000000..d2c77bad70 --- /dev/null +++ b/userdata/cpucooler/cpucooler.json @@ -0,0 +1,30 @@ +{ + "Thermalright AXP90-X36": { + "rpm": 2700, + "noise": 22.4, + "price": 22.9, + "brand": "Thermalright", + "power": 2 + }, + "Noctua NH-L9i": { + "rpm": 2500, + "noise": 23.6, + "price": 44.95, + "brand": "Noctua", + "power": 2 + }, + "NZXT T120 RGB": { + "rpm": 1800, + "noise": 27.5, + "price": 59.9, + "brand": "NZXT", + "power": 2 + }, + "Cooler Master MASTERLIQUID ML120L RGB V2": { + "rpm": 1800, + "noise": 27, + "price": 86.78, + "brand": "Cooler Master", + "power": 2 + } +} diff --git a/userdata/gpu/gpu.json b/userdata/gpu/gpu.json index 57bc02eaf8..590ca71cb5 100644 --- a/userdata/gpu/gpu.json +++ b/userdata/gpu/gpu.json @@ -1,28 +1,26 @@ { - "GPUS": { - "Gigabyte GAMING OC RTX3050": { - "brand": "Gigabyte", - "price": 309.99, - "power": 300, - "size": "mini" - }, - "MSI GeForce RTX 3060 Gaming X12G": { - "brand": "MSI", - "price": 379.99, - "power": 400, - "size": "micro" - }, - "Asus TUF GAMING OC RTX3070 Ti": { - "brand": "Asus", - "price": 786.99, - "power": 500, - "size": "atx" - }, - "MSI GAMING Z TRIO RTX3080": { - "brand": "MSI", - "price": 934.06, - "power": 500, - "size": "atx" - } + "Gigabyte GAMING OC RTX3050": { + "brand": "Gigabyte", + "price": 309.99, + "power": 115, + "size": "mini" + }, + "MSI GeForce RTX 3060 Gaming X12G": { + "brand": "MSI", + "price": 379.99, + "power": 170, + "size": "micro" + }, + "Asus TUF GAMING OC RTX3070 Ti": { + "brand": "Asus", + "price": 786.99, + "power": 290, + "size": "atx" + }, + "MSI GAMING Z TRIO RTX3080": { + "brand": "MSI", + "price": 934.06, + "power": 350, + "size": "atx" } } diff --git a/userdata/motherboard/motherboard.json b/userdata/motherboard/motherboard.json index 5d3c5d0126..cceac76150 100644 --- a/userdata/motherboard/motherboard.json +++ b/userdata/motherboard/motherboard.json @@ -1,76 +1,86 @@ { - "motherboards": { - "Asus Prime Z590-P WiFi": { - "price": 121.99, - "brand": "Asus", - "formfactor": "ATX", - "socket": "LGA1200" - }, - "MSI MAG Z690 TOMAHAWK WIFI DDR4": { - "price": 239.99, - "brand": "MSI", - "formfactor": "ATX", - "socket": "LGA1700" - }, - "Asus TUF GAMING X570-PLUS (WI-FI)": { - "price": 209.99, - "brand": "Asus", - "formfactor": "ATX", - "socket": "AM4" - }, - "Gigabyte B650 AORUS ELITE AX": { - "price": 219.99, - "brand": "Gigabyte", - "formfactor": "ATX", - "socket": "AM5" - }, - "Asus TUF GAMING B560M-PLUS WIFI": { - "price": 149.99, - "brand": "Asus", - "formfactor": "Micro", - "socket": "LGA1200" - }, - "ASRock B760M Steel Legend WiFi": { - "price": 139.99, - "brand": "ASRock", - "formfactor": "Micro", - "socket": "LGA1700" - }, - "MSI B550M PRO-VDH WIFI": { - "price": 119.99, - "brand": "MSI", - "formfactor": "Micro", - "socket": "AM4" - }, - "Gigabyte B650M DS3H": { - "price": 149.99, - "brand": "Gigabyte", - "formfactor": "Micro", - "socket": "AM5" - }, - "MSI MPG B560I GAMING EDGE WIFI": { - "price": 149.99, - "brand": "MSI", - "formfactor": "Mini", - "socket": "LGA1200" - }, - "Asus ROG STRIX B760-I GAMING WIFI": { - "price": 219.99, - "brand": "Asus", - "formfactor": "Mini", - "socket": "LGA1700" - }, - "ASRock B550M-ITX/ac": { - "price": 119.99, - "brand": "ASRock", - "formfactor": "Mini", - "socket": "AM4" - }, - "Gigabyte B650I AORUS ULTRA": { - "price": 159.99, - "brand": "Gigabyte", - "formfactor": "Mini", - "socket": "AM5" - } + "Asus Prime Z590-P WiFi": { + "price": 121.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "LGA1200", + "power": 45 + }, + "MSI MAG Z690 TOMAHAWK WIFI DDR4": { + "price": 239.99, + "brand": "MSI", + "formfactor": "ATX", + "socket": "LGA1700", + "power": 47 + }, + "Asus TUF GAMING X570-PLUS (WI-FI)": { + "price": 209.99, + "brand": "Asus", + "formfactor": "ATX", + "socket": "AM4", + "power": 48 + }, + "Gigabyte B650 AORUS ELITE AX": { + "price": 219.99, + "brand": "Gigabyte", + "formfactor": "ATX", + "socket": "AM5", + "power": 42 + }, + "Asus TUF GAMING B560M-PLUS WIFI": { + "price": 149.99, + "brand": "Asus", + "formfactor": "Micro", + "socket": "LGA1200", + "power": 45 + }, + "ASRock B760M Steel Legend WiFi": { + "price": 139.99, + "brand": "ASRock", + "formfactor": "Micro", + "socket": "LGA1700", + "power": 46 + }, + "MSI B550M PRO-VDH WIFI": { + "price": 119.99, + "brand": "MSI", + "formfactor": "Micro", + "socket": "AM4", + "power": 43 + }, + "Gigabyte B650M DS3H": { + "price": 149.99, + "brand": "Gigabyte", + "formfactor": "Micro", + "socket": "AM5", + "power": 47 + }, + "MSI MPG B560I GAMING EDGE WIFI": { + "price": 149.99, + "brand": "MSI", + "formfactor": "Mini", + "socket": "LGA1200", + "power": 46 + }, + "Asus ROG STRIX B760-I GAMING WIFI": { + "price": 219.99, + "brand": "Asus", + "formfactor": "Mini", + "socket": "LGA1700", + "power": 42 + }, + "ASRock B550M-ITX/ac": { + "price": 119.99, + "brand": "ASRock", + "formfactor": "Mini", + "socket": "AM4", + "power": 45 + }, + "Gigabyte B650I AORUS ULTRA": { + "price": 159.99, + "brand": "Gigabyte", + "formfactor": "Mini", + "socket": "AM5", + "power": 49 } } diff --git a/userdata/cpu/cpu.txt b/userdata/prebuilt/prebuilt.json similarity index 100% rename from userdata/cpu/cpu.txt rename to userdata/prebuilt/prebuilt.json diff --git a/userdata/prebuilt/prebuilt.txt b/userdata/prebuilt/prebuilt.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/userdata/psu/psu.json b/userdata/psu/psu.json index a4e58ed608..566289657c 100644 --- a/userdata/psu/psu.json +++ b/userdata/psu/psu.json @@ -1,11 +1,9 @@ { - "PSUS": { - "SeaSonic FOCUS PLUS 850 Gold": { - "brand": "SeaSonic", - "efficiency": "Gold", - "form_factor": "atx", - "power": 850, - "price": 159.94 - } + "SeaSonic FOCUS PLUS 850 Gold": { + "brand": "SeaSonic", + "efficiency": "Gold", + "form_factor": "atx", + "power": 850, + "price": 159.94 } } diff --git a/userdata/ram/ram.json b/userdata/ram/ram.json index eb5aded21c..eb075d2e9a 100644 --- a/userdata/ram/ram.json +++ b/userdata/ram/ram.json @@ -1,32 +1,34 @@ { - "Ram": { - "Kingston FURY Beast 16 GB": { - "price": 43.98, - "Memory": 8, - "sticks": 2, - "speed": 3200, - "brand": "Kingston" - }, - "G.Skill Ripjaws X 8 GB": { - "price": 22.99, - "Memory": 8, - "sticks": 1, - "speed": 1600, - "brand": "G.Skill" - }, - "Corsair Vengeance RGB Pro 32 GB": { - "price": 104.99, - "Memory": 16, - "sticks": 2, - "speed": 3600, - "brand": "Corsair" - }, - "G.Skill Trident Z RGB 64 GB": { - "price": 164.99, - "Memory": 32, - "sticks": 2, - "speed": 3200, - "brand": "G.Skill" - } + "Kingston FURY Beast 16 GB": { + "price": 43.98, + "memory": 8, + "sticks": 2, + "speed": 3200, + "brand": "Kingston", + "power": 5 + }, + "G.Skill Ripjaws X 8 GB": { + "price": 22.99, + "memory": 8, + "sticks": 1, + "speed": 1600, + "brand": "G.Skill", + "power": 3 + }, + "Corsair Vengeance RGB Pro 32 GB": { + "price": 104.99, + "memory": 16, + "sticks": 2, + "speed": 3600, + "brand": "Corsair", + "power": 8 + }, + "G.Skill Trident Z RGB 64 GB": { + "price": 164.99, + "memory": 32, + "sticks": 2, + "speed": 3200, + "brand": "G.Skill", + "power": 10 } } diff --git a/userdata/storage/storage.json b/userdata/storage/storage.json index 91c6cfc3e4..11f53c23ce 100644 --- a/userdata/storage/storage.json +++ b/userdata/storage/storage.json @@ -1,28 +1,30 @@ { - "storage": { - "ADATA XPG SPECTRIX S40G RGB": { - "type": "M.2 SSD", - "size": 512, - "price": 54.99, - "brand": "ADATA" - }, - "Seagate BarraCuda": { - "type": "HDD", - "size": 1024, - "price": 95.0, - "brand": "Seagate" - }, - "Samsung 980 Pro": { - "type": "M.2 SSD", - "size": 2048, - "price": 159.99, - "brand": "Samsung" - }, - "Western Digital Blue": { - "type": "SATA SSD", - "size": 4096, - "price": 229.96, - "brand": "Western Digital" - } + "ADATA XPG SPECTRIX S40G RGB": { + "type": "M.2 SSD", + "size": 512, + "price": 54.99, + "brand": "ADATA", + "power": 4.5 + }, + "Seagate BarraCuda": { + "type": "HDD", + "size": 1024, + "price": 95.0, + "brand": "Seagate", + "power": 6.8 + }, + "Samsung 980 Pro": { + "type": "M.2 SSD", + "size": 2048, + "price": 159.99, + "brand": "Samsung", + "power": 5.2 + }, + "Western Digital Blue": { + "type": "SATA SSD", + "size": 4096, + "price": 229.96, + "brand": "Western Digital", + "power": 2.8 } } diff --git a/userdata/tutorial/tutorial.txt b/userdata/tutorial/tutorial.txt deleted file mode 100644 index 991a041f49..0000000000 --- a/userdata/tutorial/tutorial.txt +++ /dev/null @@ -1,52 +0,0 @@ -1. Determine your budget: This is an important first step in building a custom PC. Make sure to -factor in the cost of all the components you'll need, as well as any peripherals like a monitor -or keyboard. - -2. Choose your CPU: Your CPU will determine the overall performance of your PC. There are two main -brands to choose from - Intel and AMD. Determine which brand suits your needs and then choose a -specific model based on benchmarks, reviews, and price. - -3. Select a compatible motherboard: Once you have chosen your CPU, you'll need to select a -compatible motherboard. Make sure it has the necessary chipset for your CPU, has the right -number of expansion slots, and has enough fan headers to keep your system cool. - -4. Choose your RAM: RAM is important for multitasking and running applications smoothly. Look for -RAM that is compatible with your motherboard and CPU, and choose the amount that meets your -needs. For most users, 16GB of RAM is sufficient. - -5. Pick a storage solution: You have two options for storage - a traditional hard drive or a -faster, more expensive solid-state drive (SSD). An SSD will provide faster boot and load -times, but a traditional hard drive will provide more storage space at a lower cost. -Consider your needs and choose the right storage solution for you. - -6. Choose a graphics card: If you plan on gaming or doing any kind of graphic design work, you'll -need a dedicated graphics card. Make sure it's compatible with your motherboard and has enough -power to handle your needs. Look at benchmarks and reviews to determine the best card for your -budget. - -7. Select a power supply: Your power supply needs to be powerful enough to handle all your -components, but not so powerful that you're wasting money on extra wattage. Choose a -reputable brand and make sure it has enough connectors for all your components. - -8. Choose a case: Your case needs to be big enough to fit all your components and have good airflow -to keep everything cool. Look for a case that has plenty of cable management options to keep your -build looking neat. Consider the aesthetics and make sure it fits with your overall vision for -your PC. - -9. Assemble your PC: Now that you have all your components, it's time to put them together. Start -with the motherboard and CPU, then install the RAM, storage, graphics card, and power supply. -Make sure to connect all the necessary cables and use standoffs to secure the motherboard to -the case. - -10. Install your operating system: Once your PC is assembled, it's time to install your operating -system. This can be done via a USB drive or CD/DVD, depending on your software. Follow the -instructions carefully to complete the installation. - -11. Install drivers and software: After the operating system is installed, you'll need to install -drivers for your components. This includes drivers for your graphics card, motherboard, and other -peripherals. Install any necessary software for your needs as well, such as gaming or -productivity software. - -12. Test and optimize: Once your PC is up and running, it's important to test it for stability and -performance. Use benchmarking tools to make sure your components are working as they should be, -and optimize your settings for the best performance. From c3c9ac2a4f01e5cd2bc2fa2c5edcf3081afbb05b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 14:55:17 +0800 Subject: [PATCH 078/420] Change code to meet checkstyle requirement --- src/main/java/seedu/bigpp/component/cpu/CPU.java | 2 +- src/main/java/seedu/bigpp/component/storage/StorageList.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 89168138d5..83bca0e13c 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -85,4 +85,4 @@ public String toString() { ", socket='" + socket + '\'' + '}'; } -} \ No newline at end of file +} diff --git a/src/main/java/seedu/bigpp/component/storage/StorageList.java b/src/main/java/seedu/bigpp/component/storage/StorageList.java index 7f2f79f785..e13bec474b 100644 --- a/src/main/java/seedu/bigpp/component/storage/StorageList.java +++ b/src/main/java/seedu/bigpp/component/storage/StorageList.java @@ -4,4 +4,4 @@ public abstract class StorageList { private ArrayList storageList = new ArrayList<>(); -} \ No newline at end of file +} From d5539aac808fff52f35497c34fdeccbe8ca10b1c Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 15:56:32 +0800 Subject: [PATCH 079/420] Change updateUI to have initial state, and add loading methods for all json objects --- build.gradle | 1 + src/main/java/seedu/bigpp/BigPP.java | 7 +- .../bigpp/component/chassis/ChassisList.java | 6 +- .../java/seedu/bigpp/component/cpu/CPU.java | 8 +- .../seedu/bigpp/component/cpu/CPUList.java | 5 +- .../bigpp/component/cpucooler/CPUCooler.java | 8 +- .../component/cpucooler/CPUCoolerList.java | 6 +- .../java/seedu/bigpp/component/gpu/GPU.java | 8 +- .../seedu/bigpp/component/gpu/GPUList.java | 6 +- .../component/motherboard/Motherboard.java | 8 +- .../motherboard/MotherboardList.java | 6 +- .../java/seedu/bigpp/component/psu/PSU.java | 8 +- .../seedu/bigpp/component/psu/PSUList.java | 6 +- .../java/seedu/bigpp/component/ram/RAM.java | 8 +- .../seedu/bigpp/component/ram/RAMList.java | 6 +- .../bigpp/component/storage/Storage.java | 8 +- .../bigpp/component/storage/StorageList.java | 6 +- .../seedu/bigpp/datastorage/DataStorage.java | 209 ++++++++++++++++++ src/main/java/seedu/bigpp/ui/UI.java | 6 +- userdata/user/user.json | 0 20 files changed, 286 insertions(+), 40 deletions(-) create mode 100644 src/main/java/seedu/bigpp/datastorage/DataStorage.java create mode 100644 userdata/user/user.json diff --git a/build.gradle b/build.gradle index da298b38e1..97e08cb0d7 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ repositories { } dependencies { + implementation 'com.google.code.gson:gson:2.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' } diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index d11333bdc7..e0c7565a8f 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -4,6 +4,7 @@ import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; +import seedu.bigpp.datastorage.DataStorage; public class BigPP { @@ -15,7 +16,9 @@ public static void main(String[] args) { } public void run() { - UI.updateUI(); + DataStorage.loadAll(); + UI.showWelcome(); + UI.updateUI(true); runLoopUntilExit(); } @@ -28,7 +31,7 @@ private void runLoopUntilExit() { String userInput = UI.getInput(); command = new Parser().parseCommand(userInput); String result = command.executeCommand(); - UI.updateUI(); + UI.updateUI(false); UI.showResult(result); } while (!(command instanceof ByeCommand)); } diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java index 88f7edae78..339b467a18 100644 --- a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class ChassisList { - private ArrayList chassisList = new ArrayList<>(); + private static ArrayList chassisList = new ArrayList<>(); + + public static void addChassis(Chassis chassis) { + chassisList.add(chassis); + } } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 83bca0e13c..59ea0d2e78 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -7,10 +7,10 @@ public class CPU extends Component { private int threads; private float baseClock; private float boostClock; - private int power; + private float power; private String socket; - public CPU(String name, float price, int cores, int threads, float baseClock, float boostClock, int power, + public CPU(String name, float price, int cores, int threads, float baseClock, float boostClock, float power, String brand, String socket) { super.setName(name); super.setBrand(brand); @@ -39,7 +39,7 @@ public float getBoostClock() { return this.boostClock; } - public int getPower() { + public float getPower() { return this.power; } @@ -63,7 +63,7 @@ public void setBoostClock(float boostClock) { this.boostClock = boostClock; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java index d274ff5eca..5ac13e0c89 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPUList.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -4,6 +4,9 @@ public abstract class CPUList { - private ArrayList cpuList = new ArrayList<>(); + private static ArrayList cpuList = new ArrayList<>(); + public static void addCPU(CPU cpu) { + cpuList.add(cpu); + } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java index eef5651cd1..573217759e 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -5,9 +5,9 @@ public class CPUCooler extends Component { private int rpm; private float noise; - private int power; + private float power; - public CPUCooler(String name, String brand, float price, int rpm, float noise, int power) { + public CPUCooler(String name, String brand, float price, int rpm, float noise, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -24,7 +24,7 @@ public float getNoise() { return noise; } - public int getPower() { + public float getPower() { return power; } @@ -36,7 +36,7 @@ public void setNoise(float noise) { this.noise = noise; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java index 799d31ceb3..bf9f19591b 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class CPUCoolerList { - private ArrayList cpuCoolerList = new ArrayList<>(); + private static ArrayList cpuCoolerList = new ArrayList<>(); + + public static void addCPUCooler(CPUCooler cpuCooler) { + cpuCoolerList.add(cpuCooler); + } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index f31856daa0..882b8e96b0 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -3,10 +3,10 @@ import seedu.bigpp.component.Component; public class GPU extends Component { - private int power; + private float power; private String size; - public GPU(String name, String brand, float price, int power, String size) { + public GPU(String name, String brand, float price, float power, String size) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -14,7 +14,7 @@ public GPU(String name, String brand, float price, int power, String size) { this.size = size; } - public int getPower() { + public float getPower() { return power; } @@ -22,7 +22,7 @@ public String getSize() { return size; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPUList.java b/src/main/java/seedu/bigpp/component/gpu/GPUList.java index fcbeded5e7..34451aca80 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPUList.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPUList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class GPUList { - private ArrayList gpuList = new ArrayList<>(); + private static ArrayList gpuList = new ArrayList<>(); + + public static void addGPU(GPU gpu) { + gpuList.add(gpu); + } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index 9f41852f07..be4166a7e7 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -5,9 +5,9 @@ public class Motherboard extends Component { private String formFactor; private String socket; - private int power; + private float power; - public Motherboard(String name, String brand, float price, String formFactor, String socket, int power) { + public Motherboard(String name, String brand, float price, String formFactor, String socket, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -32,11 +32,11 @@ public void setSocket(String socket) { this.socket = socket; } - public int getPower() { + public float getPower() { return power; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java index f32c3d3552..35b807b921 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java +++ b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class MotherboardList { - private ArrayList motherboardList = new ArrayList<>(); + private static ArrayList motherboardList = new ArrayList<>(); + + public static void addMotherboard(Motherboard motherboard) { + motherboardList.add(motherboard); + } } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index 83819f06a7..b2c191f7cd 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -5,9 +5,9 @@ public class PSU extends Component { private String efficiency; private String formFactor; - private int power; + private float power; - public PSU(String name, float price, String brand, String efficiency, String formFactor, int power) { + public PSU(String name, float price, String brand, String efficiency, String formFactor, float power) { super.setName(name); super.setPrice(price); super.setBrand(brand); @@ -32,11 +32,11 @@ public void setFormFactor(String formFactor) { this.formFactor = formFactor; } - public int getPower() { + public float getPower() { return power; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/psu/PSUList.java b/src/main/java/seedu/bigpp/component/psu/PSUList.java index 0f4d9e45be..197dd5605c 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSUList.java +++ b/src/main/java/seedu/bigpp/component/psu/PSUList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class PSUList { - private ArrayList psuList = new ArrayList<>(); + private static ArrayList psuList = new ArrayList<>(); + + public static void addPSU(PSU psu) { + psuList.add(psu); + } } diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java index 0944a1c5d6..d6496c773f 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAM.java +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -6,9 +6,9 @@ public class RAM extends Component { private int memory; private int sticks; private int speed; - private int power; + private float power; - public RAM(String name, String brand, float price, int memory, int sticks, int speed, int power) { + public RAM(String name, String brand, float price, int memory, int sticks, int speed, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -42,11 +42,11 @@ public void setSpeed(int speed) { this.speed = speed; } - public int getPower() { + public float getPower() { return power; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/ram/RAMList.java b/src/main/java/seedu/bigpp/component/ram/RAMList.java index f8156477ce..8e0a0fc344 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAMList.java +++ b/src/main/java/seedu/bigpp/component/ram/RAMList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class RAMList { - private ArrayList ramList = new ArrayList<>(); + private static ArrayList ramList = new ArrayList<>(); + + public static void addRAM(RAM ram) { + ramList.add(ram); + } } diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index d48ccd26e0..4dbd6f442d 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -5,9 +5,9 @@ public class Storage extends Component { private String type; private int size; // in GB - private int power; + private float power; - public Storage(String name, String brand, float price, String type, int size, int power) { + public Storage(String name, String brand, float price, String type, int size, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -33,11 +33,11 @@ public void setSize(int size) { this.size = size; } - public int getPower() { + public float getPower() { return power; } - public void setPower(int power) { + public void setPower(float power) { this.power = power; } diff --git a/src/main/java/seedu/bigpp/component/storage/StorageList.java b/src/main/java/seedu/bigpp/component/storage/StorageList.java index e13bec474b..0d9c5dec48 100644 --- a/src/main/java/seedu/bigpp/component/storage/StorageList.java +++ b/src/main/java/seedu/bigpp/component/storage/StorageList.java @@ -3,5 +3,9 @@ import java.util.ArrayList; public abstract class StorageList { - private ArrayList storageList = new ArrayList<>(); + private static ArrayList storageList = new ArrayList<>(); + + public static void addStorage(Storage storage) { + storageList.add(storage); + } } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java new file mode 100644 index 0000000000..c59d992792 --- /dev/null +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -0,0 +1,209 @@ +package seedu.bigpp.datastorage; + +import static seedu.bigpp.ui.UI.out; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; + +import seedu.bigpp.component.chassis.Chassis; +import seedu.bigpp.component.chassis.ChassisList; +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.component.cpu.CPUList; +import seedu.bigpp.component.cpucooler.CPUCooler; +import seedu.bigpp.component.cpucooler.CPUCoolerList; +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.component.gpu.GPUList; +import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.component.motherboard.MotherboardList; +import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.component.psu.PSUList; +import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.component.ram.RAMList; +import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.component.storage.StorageList; + +public abstract class DataStorage { + private static final String CHASSIS_PATH = "./userdata/chassis/chassis.json"; + private static final String CPU_PATH = "./userdata/cpu/cpu.json"; + private static final String CPU_COOLER_PATH = "./userdata/cpucooler/cpucooler.json"; + private static final String GPU_PATH = "./userdata/gpu/gpu.json"; + private static final String MOTHERBOARD_PATH = "./userdata/motherboard/motherboard.json"; + private static final String PSU_PATH = "./userdata/psu/psu.json"; + private static final String RAM_PATH = "./userdata/ram/ram.json"; + private static final String STORAGE_PATH = "./userdata/storage/storage.json"; + + private static final String PREBUILT_PATH = "./userdata/prebuilt/prebuilt.json"; + private static final String USER_PATH = "./userdata/user/user.json"; + + private static final Gson GSON = new Gson(); + + /** + * Loads all the components from the json files. + */ + public static void loadAll() { + loadChassis(); + loadCPU(); + loadCPUCooler(); + loadGPU(); + loadMotherboard(); + loadPSU(); + loadRAM(); + loadStorage(); + } + + /** + * Loads all the chassis from the json file into ChassisList. + */ + public static void loadChassis() { + try { + String json = Files.readString(Paths.get(CHASSIS_PATH)); + + Map chassisMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each chassis to the chassis list + chassisMap.forEach((name, chassis) -> ChassisList.addChassis(chassis)); + + } catch (IOException e) { + out.println(CHASSIS_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the CPU from the json file into CPUList. + */ + public static void loadCPU() { + try { + String json = Files.readString(Paths.get(CPU_PATH)); + + Map cpuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each CPU to the CPU list + cpuMap.forEach((name, cpu) -> CPUList.addCPU(cpu)); + + } catch (IOException e) { + out.println(CPU_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the CPU Cooler from the json file into CPUCoolerList. + */ + public static void loadCPUCooler() { + try { + String json = Files.readString(Paths.get(CPU_COOLER_PATH)); + + Map cpuCoolerMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each CPU Cooler to the CPU Cooler list + cpuCoolerMap.forEach((name, cpuCooler) -> CPUCoolerList.addCPUCooler(cpuCooler)); + + } catch (IOException e) { + out.println(CPU_COOLER_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the GPU from the json file into GPUList. + */ + public static void loadGPU() { + try { + String json = Files.readString(Paths.get(GPU_PATH)); + + Map gpuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each GPU to the GPU list + gpuMap.forEach((name, gpu) -> GPUList.addGPU(gpu)); + + } catch (IOException e) { + out.println(GPU_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the Motherboard from the json file into MotherboardList. + */ + public static void loadMotherboard() { + try { + String json = Files.readString(Paths.get(MOTHERBOARD_PATH)); + + Map motherboardMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each Motherboard to the Motherboard list + motherboardMap.forEach((name, motherboard) -> MotherboardList.addMotherboard(motherboard)); + + } catch (IOException e) { + out.println(MOTHERBOARD_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the PSU from the json file into PSUList. + */ + public static void loadPSU() { + try { + String json = Files.readString(Paths.get(PSU_PATH)); + + Map psuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each PSU to the PSU list + psuMap.forEach((name, psu) -> PSUList.addPSU(psu)); + + } catch (IOException e) { + out.println(PSU_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the RAM from the json file into RAMList. + */ + public static void loadRAM() { + try { + String json = Files.readString(Paths.get(RAM_PATH)); + + Map ramMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each RAM to the RAM list + ramMap.forEach((name, ram) -> RAMList.addRAM(ram)); + + } catch (IOException e) { + out.println(RAM_PATH + " not found"); + System.exit(1); + } + } + + /** + * Loads all the Storage from the json file into StorageList. + */ + public static void loadStorage() { + try { + String json = Files.readString(Paths.get(STORAGE_PATH)); + + Map storageMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); + + // Add each Storage to the Storage list + storageMap.forEach((name, storage) -> StorageList.addStorage(storage)); + + } catch (IOException e) { + out.println(STORAGE_PATH + " not found"); + System.exit(1); + } + } +} diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index ca87ed05ee..4a3b11d1ce 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -32,8 +32,10 @@ public static void showWelcome() { out.println("Welcome to BigPP!"); } - public static void updateUI() { - clearTerminal(); + public static void updateUI(boolean isInitial) { + if (!isInitial) { + clearTerminal(); + } out.println(DIVIDER); switch (uiState) { diff --git a/userdata/user/user.json b/userdata/user/user.json new file mode 100644 index 0000000000..e69de29bb2 From 194b14fb4881fa5be3b39eddb1872167ed399a52 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:12:44 +0800 Subject: [PATCH 080/420] Solve issue that made names in object null when loaded with gson --- src/main/java/seedu/bigpp/BigPP.java | 1 + .../java/seedu/bigpp/component/Component.java | 6 +-- .../bigpp/component/chassis/ChassisList.java | 4 ++ .../seedu/bigpp/component/cpu/CPUList.java | 4 ++ .../component/cpucooler/CPUCoolerList.java | 4 ++ .../seedu/bigpp/component/gpu/GPUList.java | 4 ++ .../motherboard/MotherboardList.java | 4 ++ .../seedu/bigpp/component/psu/PSUList.java | 4 ++ .../seedu/bigpp/component/ram/RAMList.java | 4 ++ .../bigpp/component/storage/StorageList.java | 4 ++ .../seedu/bigpp/datastorage/DataStorage.java | 16 +++++++ userdata/cpu/cpu.json | 48 +++++++++---------- userdata/motherboard/motherboard.json | 24 +++++----- userdata/psu/psu.json | 2 +- 14 files changed, 89 insertions(+), 40 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index e0c7565a8f..3687f845aa 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.component.cpu.CPUList; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; import seedu.bigpp.datastorage.DataStorage; diff --git a/src/main/java/seedu/bigpp/component/Component.java b/src/main/java/seedu/bigpp/component/Component.java index 209456861a..e8b05aa4c5 100644 --- a/src/main/java/seedu/bigpp/component/Component.java +++ b/src/main/java/seedu/bigpp/component/Component.java @@ -1,9 +1,9 @@ package seedu.bigpp.component; public abstract class Component { - private String name; - private String brand; - private float price; + protected String name; + protected String brand; + protected float price; public String getName() { return this.name; diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java index 339b467a18..ddc9c79a28 100644 --- a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -8,4 +8,8 @@ public abstract class ChassisList { public static void addChassis(Chassis chassis) { chassisList.add(chassis); } + + public static ArrayList getChassisList() { + return chassisList; + } } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java index 5ac13e0c89..3bd462d42d 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPUList.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -9,4 +9,8 @@ public abstract class CPUList { public static void addCPU(CPU cpu) { cpuList.add(cpu); } + + public static ArrayList getCpuList() { + return cpuList; + } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java index bf9f19591b..6376e5b7f2 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java @@ -8,4 +8,8 @@ public abstract class CPUCoolerList { public static void addCPUCooler(CPUCooler cpuCooler) { cpuCoolerList.add(cpuCooler); } + + public static ArrayList getCPUCoolerList() { + return cpuCoolerList; + } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPUList.java b/src/main/java/seedu/bigpp/component/gpu/GPUList.java index 34451aca80..275cfcf8f0 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPUList.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPUList.java @@ -8,4 +8,8 @@ public abstract class GPUList { public static void addGPU(GPU gpu) { gpuList.add(gpu); } + + public static ArrayList getGpuList() { + return gpuList; + } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java index 35b807b921..88c3532d61 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java +++ b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java @@ -8,4 +8,8 @@ public abstract class MotherboardList { public static void addMotherboard(Motherboard motherboard) { motherboardList.add(motherboard); } + + public static ArrayList getMotherboardList() { + return motherboardList; + } } diff --git a/src/main/java/seedu/bigpp/component/psu/PSUList.java b/src/main/java/seedu/bigpp/component/psu/PSUList.java index 197dd5605c..048541628a 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSUList.java +++ b/src/main/java/seedu/bigpp/component/psu/PSUList.java @@ -8,4 +8,8 @@ public abstract class PSUList { public static void addPSU(PSU psu) { psuList.add(psu); } + + public static ArrayList getPsuList() { + return psuList; + } } diff --git a/src/main/java/seedu/bigpp/component/ram/RAMList.java b/src/main/java/seedu/bigpp/component/ram/RAMList.java index 8e0a0fc344..0992c18a88 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAMList.java +++ b/src/main/java/seedu/bigpp/component/ram/RAMList.java @@ -8,4 +8,8 @@ public abstract class RAMList { public static void addRAM(RAM ram) { ramList.add(ram); } + + public static ArrayList getRamList() { + return ramList; + } } diff --git a/src/main/java/seedu/bigpp/component/storage/StorageList.java b/src/main/java/seedu/bigpp/component/storage/StorageList.java index 0d9c5dec48..c8114f80e3 100644 --- a/src/main/java/seedu/bigpp/component/storage/StorageList.java +++ b/src/main/java/seedu/bigpp/component/storage/StorageList.java @@ -8,4 +8,8 @@ public abstract class StorageList { public static void addStorage(Storage storage) { storageList.add(storage); } + + public static ArrayList getStorageList() { + return storageList; + } } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index c59d992792..9bc449aaed 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -65,6 +65,8 @@ public static void loadChassis() { Map chassisMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + chassisMap.forEach((name, chassis) -> chassisMap.get(name).setName(name)); + // Add each chassis to the chassis list chassisMap.forEach((name, chassis) -> ChassisList.addChassis(chassis)); @@ -84,6 +86,8 @@ public static void loadCPU() { Map cpuMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + cpuMap.forEach((name, cpu) -> cpuMap.get(name).setName(name)); + // Add each CPU to the CPU list cpuMap.forEach((name, cpu) -> CPUList.addCPU(cpu)); @@ -103,6 +107,8 @@ public static void loadCPUCooler() { Map cpuCoolerMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + cpuCoolerMap.forEach((name, cpuCooler) -> cpuCoolerMap.get(name).setName(name)); + // Add each CPU Cooler to the CPU Cooler list cpuCoolerMap.forEach((name, cpuCooler) -> CPUCoolerList.addCPUCooler(cpuCooler)); @@ -122,6 +128,8 @@ public static void loadGPU() { Map gpuMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + gpuMap.forEach((name, gpu) -> gpuMap.get(name).setName(name)); + // Add each GPU to the GPU list gpuMap.forEach((name, gpu) -> GPUList.addGPU(gpu)); @@ -141,6 +149,8 @@ public static void loadMotherboard() { Map motherboardMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + motherboardMap.forEach((name, motherboard) -> motherboardMap.get(name).setName(name)); + // Add each Motherboard to the Motherboard list motherboardMap.forEach((name, motherboard) -> MotherboardList.addMotherboard(motherboard)); @@ -160,6 +170,8 @@ public static void loadPSU() { Map psuMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + psuMap.forEach((name, psu) -> psuMap.get(name).setName(name)); + // Add each PSU to the PSU list psuMap.forEach((name, psu) -> PSUList.addPSU(psu)); @@ -179,6 +191,8 @@ public static void loadRAM() { Map ramMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + ramMap.forEach((name, ram) -> ramMap.get(name).setName(name)); + // Add each RAM to the RAM list ramMap.forEach((name, ram) -> RAMList.addRAM(ram)); @@ -198,6 +212,8 @@ public static void loadStorage() { Map storageMap = GSON.fromJson(json, new TypeToken>() { }.getType()); + storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); + // Add each Storage to the Storage list storageMap.forEach((name, storage) -> StorageList.addStorage(storage)); diff --git a/userdata/cpu/cpu.json b/userdata/cpu/cpu.json index b5748070fc..3a169fe01f 100644 --- a/userdata/cpu/cpu.json +++ b/userdata/cpu/cpu.json @@ -3,8 +3,8 @@ "price": 99.5, "cores": 4, "threads": 8, - "base clock": 3.6, - "boost clock": 4.3, + "baseClock": 3.6, + "boostClock": 4.3, "power": 65, "brand": "Intel", "socket": "LGA1200" @@ -13,8 +13,8 @@ "price": 182.47, "cores": 6, "threads": 12, - "base clock": 4.1, - "boost clock": 4.8, + "baseClock": 4.1, + "boostClock": 4.8, "power": 125, "brand": "Intel", "socket": "LGA1200" @@ -23,8 +23,8 @@ "price": 269.95, "cores": 8, "threads": 16, - "base clock": 3.8, - "boost clock": 5.1, + "baseClock": 3.8, + "boostClock": 5.1, "power": 125, "brand": "Intel", "socket": "LGA1200" @@ -33,8 +33,8 @@ "price": 106.93, "cores": 4, "threads": 8, - "base clock": 3.3, - "boost clock": 4.3, + "baseClock": 3.3, + "boostClock": 4.3, "power": 58, "brand": "Intel", "socket": "LGA1700" @@ -43,8 +43,8 @@ "price": 213.82, "cores": 10, "threads": 20, - "base clock": 3.7, - "boost clock": 4.9, + "baseClock": 3.7, + "boostClock": 4.9, "power": 125, "brand": "Intel", "socket": "LGA1700" @@ -53,8 +53,8 @@ "price": 312.88, "cores": 12, "threads": 24, - "base clock": 3.6, - "boost clock": 5.0, + "baseClock": 3.6, + "boostClock": 5.0, "power": 125, "brand": "Intel", "socket": "LGA1700" @@ -63,8 +63,8 @@ "price": 97.5, "cores": 4, "threads": 4, - "base clock": 3.6, - "boost clock": 4.0, + "baseClock": 3.6, + "boostClock": 4.0, "power": 65, "brand": "AMD", "socket": "AM4" @@ -73,8 +73,8 @@ "price": 156.64, "cores": 6, "threads": 12, - "base clock": 3.7, - "boost clock": 4.6, + "baseClock": 3.7, + "boostClock": 4.6, "power": 65, "brand": "AMD", "socket": "AM4" @@ -83,8 +83,8 @@ "price": 211.33, "cores": 8, "threads": 16, - "base clock": 3.8, - "boost clock": 4.7, + "baseClock": 3.8, + "boostClock": 4.7, "power": 105, "brand": "AMD", "socket": "AM4" @@ -93,8 +93,8 @@ "price": 240.86, "cores": 6, "threads": 12, - "base clock": 4.7, - "boost clock": 5.3, + "baseClock": 4.7, + "boostClock": 5.3, "power": 105, "brand": "AMD", "socket": "AM5" @@ -103,8 +103,8 @@ "price": 341.29, "cores": 8, "threads": 16, - "base clock": 4.5, - "boost clock": 5.4, + "baseClock": 4.5, + "boostClock": 5.4, "power": 105, "brand": "AMD", "socket": "AM5" @@ -113,8 +113,8 @@ "price": 589.0, "cores": 16, "threads": 32, - "base clock": 4.5, - "boost clock": 5.7, + "baseClock": 4.5, + "boostClock": 5.7, "power": 170, "brand": "AMD", "socket": "AM5" diff --git a/userdata/motherboard/motherboard.json b/userdata/motherboard/motherboard.json index cceac76150..47a6ecfd27 100644 --- a/userdata/motherboard/motherboard.json +++ b/userdata/motherboard/motherboard.json @@ -2,84 +2,84 @@ "Asus Prime Z590-P WiFi": { "price": 121.99, "brand": "Asus", - "formfactor": "ATX", + "formFactor": "ATX", "socket": "LGA1200", "power": 45 }, "MSI MAG Z690 TOMAHAWK WIFI DDR4": { "price": 239.99, "brand": "MSI", - "formfactor": "ATX", + "formFactor": "ATX", "socket": "LGA1700", "power": 47 }, "Asus TUF GAMING X570-PLUS (WI-FI)": { "price": 209.99, "brand": "Asus", - "formfactor": "ATX", + "formFactor": "ATX", "socket": "AM4", "power": 48 }, "Gigabyte B650 AORUS ELITE AX": { "price": 219.99, "brand": "Gigabyte", - "formfactor": "ATX", + "formFactor": "ATX", "socket": "AM5", "power": 42 }, "Asus TUF GAMING B560M-PLUS WIFI": { "price": 149.99, "brand": "Asus", - "formfactor": "Micro", + "formFactor": "Micro", "socket": "LGA1200", "power": 45 }, "ASRock B760M Steel Legend WiFi": { "price": 139.99, "brand": "ASRock", - "formfactor": "Micro", + "formFactor": "Micro", "socket": "LGA1700", "power": 46 }, "MSI B550M PRO-VDH WIFI": { "price": 119.99, "brand": "MSI", - "formfactor": "Micro", + "formFactor": "Micro", "socket": "AM4", "power": 43 }, "Gigabyte B650M DS3H": { "price": 149.99, "brand": "Gigabyte", - "formfactor": "Micro", + "formFactor": "Micro", "socket": "AM5", "power": 47 }, "MSI MPG B560I GAMING EDGE WIFI": { "price": 149.99, "brand": "MSI", - "formfactor": "Mini", + "formFactor": "Mini", "socket": "LGA1200", "power": 46 }, "Asus ROG STRIX B760-I GAMING WIFI": { "price": 219.99, "brand": "Asus", - "formfactor": "Mini", + "formFactor": "Mini", "socket": "LGA1700", "power": 42 }, "ASRock B550M-ITX/ac": { "price": 119.99, "brand": "ASRock", - "formfactor": "Mini", + "formFactor": "Mini", "socket": "AM4", "power": 45 }, "Gigabyte B650I AORUS ULTRA": { "price": 159.99, "brand": "Gigabyte", - "formfactor": "Mini", + "formFactor": "Mini", "socket": "AM5", "power": 49 } diff --git a/userdata/psu/psu.json b/userdata/psu/psu.json index 566289657c..f843680c51 100644 --- a/userdata/psu/psu.json +++ b/userdata/psu/psu.json @@ -2,7 +2,7 @@ "SeaSonic FOCUS PLUS 850 Gold": { "brand": "SeaSonic", "efficiency": "Gold", - "form_factor": "atx", + "formFactor": "atx", "power": 850, "price": 159.94 } From 9b052b347f1af733179b199b2f4d159a7f62e3cc Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:14:21 +0800 Subject: [PATCH 081/420] Remove unused line of import to pass checkstyle --- src/main/java/seedu/bigpp/BigPP.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 3687f845aa..e0c7565a8f 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -2,7 +2,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; -import seedu.bigpp.component.cpu.CPUList; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; import seedu.bigpp.datastorage.DataStorage; From 4956fad96a60145cda4545abf231392560dbdc84 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:32:56 +0800 Subject: [PATCH 082/420] Change userdata to appdata, as this data will be permanently stored in jar of application --- {userdata => appdata}/chassis/chassis.json | 0 {userdata => appdata}/cpu/cpu.json | 0 .../cpucooler/cpucooler.json | 0 {userdata => appdata}/gpu/gpu.json | 0 .../motherboard/motherboard.json | 0 {userdata => appdata}/prebuilt/prebuilt.json | 0 {userdata => appdata}/psu/psu.json | 0 {userdata => appdata}/ram/ram.json | 0 {userdata => appdata}/storage/storage.json | 0 .../seedu/bigpp/datastorage/DataStorage.java | 22 +++++++++---------- userdata/user/user.json | 0 11 files changed, 11 insertions(+), 11 deletions(-) rename {userdata => appdata}/chassis/chassis.json (100%) rename {userdata => appdata}/cpu/cpu.json (100%) rename {userdata => appdata}/cpucooler/cpucooler.json (100%) rename {userdata => appdata}/gpu/gpu.json (100%) rename {userdata => appdata}/motherboard/motherboard.json (100%) rename {userdata => appdata}/prebuilt/prebuilt.json (100%) rename {userdata => appdata}/psu/psu.json (100%) rename {userdata => appdata}/ram/ram.json (100%) rename {userdata => appdata}/storage/storage.json (100%) delete mode 100644 userdata/user/user.json diff --git a/userdata/chassis/chassis.json b/appdata/chassis/chassis.json similarity index 100% rename from userdata/chassis/chassis.json rename to appdata/chassis/chassis.json diff --git a/userdata/cpu/cpu.json b/appdata/cpu/cpu.json similarity index 100% rename from userdata/cpu/cpu.json rename to appdata/cpu/cpu.json diff --git a/userdata/cpucooler/cpucooler.json b/appdata/cpucooler/cpucooler.json similarity index 100% rename from userdata/cpucooler/cpucooler.json rename to appdata/cpucooler/cpucooler.json diff --git a/userdata/gpu/gpu.json b/appdata/gpu/gpu.json similarity index 100% rename from userdata/gpu/gpu.json rename to appdata/gpu/gpu.json diff --git a/userdata/motherboard/motherboard.json b/appdata/motherboard/motherboard.json similarity index 100% rename from userdata/motherboard/motherboard.json rename to appdata/motherboard/motherboard.json diff --git a/userdata/prebuilt/prebuilt.json b/appdata/prebuilt/prebuilt.json similarity index 100% rename from userdata/prebuilt/prebuilt.json rename to appdata/prebuilt/prebuilt.json diff --git a/userdata/psu/psu.json b/appdata/psu/psu.json similarity index 100% rename from userdata/psu/psu.json rename to appdata/psu/psu.json diff --git a/userdata/ram/ram.json b/appdata/ram/ram.json similarity index 100% rename from userdata/ram/ram.json rename to appdata/ram/ram.json diff --git a/userdata/storage/storage.json b/appdata/storage/storage.json similarity index 100% rename from userdata/storage/storage.json rename to appdata/storage/storage.json diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 9bc449aaed..3086f467bd 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -27,17 +27,17 @@ import seedu.bigpp.component.storage.StorageList; public abstract class DataStorage { - private static final String CHASSIS_PATH = "./userdata/chassis/chassis.json"; - private static final String CPU_PATH = "./userdata/cpu/cpu.json"; - private static final String CPU_COOLER_PATH = "./userdata/cpucooler/cpucooler.json"; - private static final String GPU_PATH = "./userdata/gpu/gpu.json"; - private static final String MOTHERBOARD_PATH = "./userdata/motherboard/motherboard.json"; - private static final String PSU_PATH = "./userdata/psu/psu.json"; - private static final String RAM_PATH = "./userdata/ram/ram.json"; - private static final String STORAGE_PATH = "./userdata/storage/storage.json"; - - private static final String PREBUILT_PATH = "./userdata/prebuilt/prebuilt.json"; - private static final String USER_PATH = "./userdata/user/user.json"; + private static final String CHASSIS_PATH = "./appdata/chassis/chassis.json"; + private static final String CPU_PATH = "./appdata/cpu/cpu.json"; + private static final String CPU_COOLER_PATH = "./appdata/cpucooler/cpucooler.json"; + private static final String GPU_PATH = "./appdata/gpu/gpu.json"; + private static final String MOTHERBOARD_PATH = "./appdata/motherboard/motherboard.json"; + private static final String PSU_PATH = "./appdata/psu/psu.json"; + private static final String RAM_PATH = "./appdata/ram/ram.json"; + private static final String STORAGE_PATH = "./appdata/storage/storage.json"; + + private static final String PREBUILT_PATH = "./appdata/prebuilt/prebuilt.json"; + private static final String USER_PATH = "./appdata/user/user.json"; private static final Gson GSON = new Gson(); diff --git a/userdata/user/user.json b/userdata/user/user.json deleted file mode 100644 index e69de29bb2..0000000000 From 650908af5ce5c511cbf3728a57094e905422c9d7 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 17:44:54 +0800 Subject: [PATCH 083/420] Change EXPECTED.TXT to match ACTUAL.TXT, need to fix the issue of filepath for text-ui-test --- text-ui-test/EXPECTED.TXT | 48 +-------------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 79dc059d8d..5ff3f214f3 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,47 +1 @@ - -=================================================== -PC viewer -List currently empty! -What would you like to do? -View PC -Build PC -back -exit -=================================================== - -=================================================== -PC viewer -Here is the list of PC Builds: -1.Custom-PC: [newpc1] - $0.0 -What would you like to do? -View PC -Build PC -back -exit -=================================================== -Custom PC: [ newpc1 ] has been created - -=================================================== -PC viewer -Here is the list of PC Builds: -1.Custom-PC: [newpc1] - $0.0 -2.Custom-PC: [newpc2] - $0.0 -What would you like to do? -View PC -Build PC -back -exit -=================================================== -Custom PC: [ newpc2 ] has been created - -=================================================== -PC viewer -Here is the list of PC Builds: -1.Custom-PC: [newpc2] - $0.0 -What would you like to do? -View PC -Build PC -back -exit -=================================================== -Custom PC: [ newpc1 ] has been deleted +./appdata/chassis/chassis.json not found From 734817478d7c56c6c23e078b3226a9a5093e3c6c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 11 Mar 2023 19:11:48 +0800 Subject: [PATCH 084/420] Add set name and set budget feature for Builder. --- .../java/seedu/bigpp/builder/Builder.java | 30 +++++++++++++++++++ .../seedu/bigpp/builder/CurrentBuilder.java | 14 +++++++++ .../buildercommand/CreateBuildCommand.java | 20 +++++++++++++ .../buildercommand/EditNameCommand.java | 12 ++++++-- src/main/java/seedu/bigpp/parser/Parser.java | 13 ++++++++ src/main/java/seedu/bigpp/pc/PC.java | 4 +++ src/main/java/seedu/bigpp/pc/PCList.java | 4 +++ 7 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/main/java/seedu/bigpp/builder/Builder.java create mode 100644 src/main/java/seedu/bigpp/builder/CurrentBuilder.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java diff --git a/src/main/java/seedu/bigpp/builder/Builder.java b/src/main/java/seedu/bigpp/builder/Builder.java new file mode 100644 index 0000000000..914f6cae45 --- /dev/null +++ b/src/main/java/seedu/bigpp/builder/Builder.java @@ -0,0 +1,30 @@ +package seedu.bigpp.builder; + +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; + +public class Builder { + + private int budget = 0; + private PC pc; + + public Builder(int currentPCindex) { + this.pc = PCList.getPC(currentPCindex - 1); + } + + public String getName() { + return this.pc.getName(); + } + + public int getBudget() { + return budget; + } + + public void setName(String name) { + this.pc.setName(name); + } + + public void setBudget(int budget) { + this.budget = budget; + } +} diff --git a/src/main/java/seedu/bigpp/builder/CurrentBuilder.java b/src/main/java/seedu/bigpp/builder/CurrentBuilder.java new file mode 100644 index 0000000000..3f604b018a --- /dev/null +++ b/src/main/java/seedu/bigpp/builder/CurrentBuilder.java @@ -0,0 +1,14 @@ +package seedu.bigpp.builder; + +public class CurrentBuilder { + + public static Builder currentBuilder; + + public static void setBuilder(Builder builder) { + currentBuilder = builder; + } + + public static Builder getBuilder() { + return currentBuilder; + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java new file mode 100644 index 0000000000..eb316f8e8e --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java @@ -0,0 +1,20 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.builder.Builder; +import seedu.bigpp.builder.CurrentBuilder; + +public class CreateBuildCommand extends Command { + public CreateBuildCommand(String arguments) { + super.setArguments(arguments); + } + + @Override + public String executeCommand() { + int index = Integer.parseInt(super.getArguments()); + Builder builder = new Builder(index); + CurrentBuilder.setBuilder(builder); + return "Build: [ " + builder.getName() + " ] is currently being edited"; + } + +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java index 5fce8d9d2b..6d04a5442c 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java @@ -1,12 +1,20 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.builder.Builder; +import seedu.bigpp.builder.CurrentBuilder; public class EditNameCommand extends Command { + public EditNameCommand(String arguments) { + super.setArguments(arguments); + } + @Override public String executeCommand() { - // TODO Auto-generated method stub - return ""; + String name = super.getArguments(); + Builder currentBuilder = CurrentBuilder.getBuilder(); + currentBuilder.setName(name); + return "Current build name is now: " + name; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d42c672420..16faf57b92 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,9 +1,12 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.CreateBuildCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.command.buildercommand.EditNameCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.viewercommand.ViewerAddCommand; @@ -45,13 +48,23 @@ private Command parseViewerCommand(String userInput) { return new ViewerAddCommand(arguments); case "delete": return new ViewerDeleteCommand(arguments); + case "edit": + UI.setPCBuilderMode(PCList.getPC(Integer.parseInt(arguments) - 1)); + return new CreateBuildCommand(arguments); default: return null; } } private Command parseBuilderCommand(String userInput) { + String commandWord = userInput.split(" ")[0]; + String arguments = userInput.split(" ")[1]; + + switch (commandWord) { + case "editname": + return new EditNameCommand(arguments); + } commandWord = commandWord.toLowerCase(); return null; diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index c00e0f066b..f605d94ba1 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -16,6 +16,10 @@ public PC(String name, Boolean isPrebuilt) { this.isPrebuilt = isPrebuilt; } + public void setName(String name) { + this.name = name; + } + public String getName() { return name; } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index c0464e8c44..43d73696ca 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -36,4 +36,8 @@ public static void printPcList() { out.println("List currently empty!"); } } + + public static PC getPC(int index) { + return pcList.get(index); + } } From bdc82af3a8595da5467488442465538acbb8d3ce Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 21:31:30 +0800 Subject: [PATCH 085/420] Change gradle to allow for resources folder to contain database --- build.gradle | 20 ++ .../seedu/bigpp/datastorage/DataStorage.java | 212 +++++++++--------- .../java/seedu/bigpp/resources}/chassis.json | 0 .../main/java/seedu/bigpp/resources}/cpu.json | 0 .../seedu/bigpp/resources}/cpucooler.json | 0 .../main/java/seedu/bigpp/resources}/gpu.json | 0 .../seedu/bigpp/resources}/motherboard.json | 0 .../java/seedu/bigpp/resources}/prebuilt.json | 0 .../main/java/seedu/bigpp/resources}/psu.json | 0 .../main/java/seedu/bigpp/resources}/ram.json | 0 .../java/seedu/bigpp/resources}/storage.json | 0 11 files changed, 121 insertions(+), 111 deletions(-) rename {appdata/chassis => src/main/java/seedu/bigpp/resources}/chassis.json (100%) rename {appdata/cpu => src/main/java/seedu/bigpp/resources}/cpu.json (100%) rename {appdata/cpucooler => src/main/java/seedu/bigpp/resources}/cpucooler.json (100%) rename {appdata/gpu => src/main/java/seedu/bigpp/resources}/gpu.json (100%) rename {appdata/motherboard => src/main/java/seedu/bigpp/resources}/motherboard.json (100%) rename {appdata/prebuilt => src/main/java/seedu/bigpp/resources}/prebuilt.json (100%) rename {appdata/psu => src/main/java/seedu/bigpp/resources}/psu.json (100%) rename {appdata/ram => src/main/java/seedu/bigpp/resources}/ram.json (100%) rename {appdata/storage => src/main/java/seedu/bigpp/resources}/storage.json (100%) diff --git a/build.gradle b/build.gradle index 97e08cb0d7..dec6bbea74 100644 --- a/build.gradle +++ b/build.gradle @@ -45,3 +45,23 @@ checkstyle { run{ standardInput = System.in } + +jar { + manifest { + attributes "Main-Class": "seedu.bigpp.BigPP" + } + + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } +} + +sourceSets { + main { + java { + resources { + srcDir "src/main/java/seedu/bigpp/resources" + } + } + } +} diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 3086f467bd..c8726e30af 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -1,13 +1,11 @@ package seedu.bigpp.datastorage; -import static seedu.bigpp.ui.UI.out; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.Map; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.component.chassis.ChassisList; @@ -27,17 +25,16 @@ import seedu.bigpp.component.storage.StorageList; public abstract class DataStorage { - private static final String CHASSIS_PATH = "./appdata/chassis/chassis.json"; - private static final String CPU_PATH = "./appdata/cpu/cpu.json"; - private static final String CPU_COOLER_PATH = "./appdata/cpucooler/cpucooler.json"; - private static final String GPU_PATH = "./appdata/gpu/gpu.json"; - private static final String MOTHERBOARD_PATH = "./appdata/motherboard/motherboard.json"; - private static final String PSU_PATH = "./appdata/psu/psu.json"; - private static final String RAM_PATH = "./appdata/ram/ram.json"; - private static final String STORAGE_PATH = "./appdata/storage/storage.json"; - - private static final String PREBUILT_PATH = "./appdata/prebuilt/prebuilt.json"; - private static final String USER_PATH = "./appdata/user/user.json"; + private static final String CHASSIS_PATH = "chassis.json"; + private static final String CPU_PATH = "cpu.json"; + private static final String CPU_COOLER_PATH = "cpucooler.json"; + private static final String GPU_PATH = "gpu.json"; + private static final String MOTHERBOARD_PATH = "motherboard.json"; + private static final String PSU_PATH = "psu.json"; + private static final String RAM_PATH = "ram.json"; + private static final String STORAGE_PATH = "storage.json"; + + private static final String PREBUILT_PATH = "prebuilt.json"; private static final Gson GSON = new Gson(); @@ -59,167 +56,160 @@ public static void loadAll() { * Loads all the chassis from the json file into ChassisList. */ public static void loadChassis() { - try { - String json = Files.readString(Paths.get(CHASSIS_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(CHASSIS_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map chassisMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - chassisMap.forEach((name, chassis) -> chassisMap.get(name).setName(name)); + Map chassisMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each chassis to the chassis list - chassisMap.forEach((name, chassis) -> ChassisList.addChassis(chassis)); + chassisMap.forEach((name, chassis) -> chassisMap.get(name).setName(name)); - } catch (IOException e) { - out.println(CHASSIS_PATH + " not found"); - System.exit(1); - } + // Add each chassis to the chassis list + chassisMap.forEach((name, chassis) -> ChassisList.addChassis(chassis)); } /** - * Loads all the CPU from the json file into CPUList. + * Loads all the CPUs from the json file into CPUList. */ public static void loadCPU() { - try { - String json = Files.readString(Paths.get(CPU_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(CPU_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map cpuMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - cpuMap.forEach((name, cpu) -> cpuMap.get(name).setName(name)); + Map cpuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each CPU to the CPU list - cpuMap.forEach((name, cpu) -> CPUList.addCPU(cpu)); + cpuMap.forEach((name, cpu) -> cpuMap.get(name).setName(name)); - } catch (IOException e) { - out.println(CPU_PATH + " not found"); - System.exit(1); - } + // Add each cpu to the cpu list + cpuMap.forEach((name, cpu) -> CPUList.addCPU(cpu)); } /** - * Loads all the CPU Cooler from the json file into CPUCoolerList. + * Loads all the CPU coolers from the json file into CPUCoolerList. */ public static void loadCPUCooler() { - try { - String json = Files.readString(Paths.get(CPU_COOLER_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(CPU_COOLER_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map cpuCoolerMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - cpuCoolerMap.forEach((name, cpuCooler) -> cpuCoolerMap.get(name).setName(name)); + Map cpuCoolerMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each CPU Cooler to the CPU Cooler list - cpuCoolerMap.forEach((name, cpuCooler) -> CPUCoolerList.addCPUCooler(cpuCooler)); + cpuCoolerMap.forEach((name, cpuCooler) -> cpuCoolerMap.get(name).setName(name)); - } catch (IOException e) { - out.println(CPU_COOLER_PATH + " not found"); - System.exit(1); - } + // Add each cpu cooler to the cpu cooler list + cpuCoolerMap.forEach((name, cpuCooler) -> CPUCoolerList.addCPUCooler(cpuCooler)); } /** - * Loads all the GPU from the json file into GPUList. + * Loads all the GPUs from the json file into GPUList. */ public static void loadGPU() { - try { - String json = Files.readString(Paths.get(GPU_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(GPU_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map gpuMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - gpuMap.forEach((name, gpu) -> gpuMap.get(name).setName(name)); + Map gpuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each GPU to the GPU list - gpuMap.forEach((name, gpu) -> GPUList.addGPU(gpu)); + gpuMap.forEach((name, gpu) -> gpuMap.get(name).setName(name)); - } catch (IOException e) { - out.println(GPU_PATH + " not found"); - System.exit(1); - } + // Add each gpu to the gpu list + gpuMap.forEach((name, gpu) -> GPUList.addGPU(gpu)); } /** - * Loads all the Motherboard from the json file into MotherboardList. + * Loads all the motherboards from the json file into MotherboardList. */ public static void loadMotherboard() { - try { - String json = Files.readString(Paths.get(MOTHERBOARD_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(MOTHERBOARD_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map motherboardMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - motherboardMap.forEach((name, motherboard) -> motherboardMap.get(name).setName(name)); + Map motherboardMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each Motherboard to the Motherboard list - motherboardMap.forEach((name, motherboard) -> MotherboardList.addMotherboard(motherboard)); + motherboardMap.forEach((name, motherboard) -> motherboardMap.get(name).setName(name)); - } catch (IOException e) { - out.println(MOTHERBOARD_PATH + " not found"); - System.exit(1); - } + // Add each motherboard to the motherboard list + motherboardMap.forEach((name, motherboard) -> MotherboardList.addMotherboard(motherboard)); } /** - * Loads all the PSU from the json file into PSUList. + * Loads all the PSUs from the json file into PSUList. */ public static void loadPSU() { - try { - String json = Files.readString(Paths.get(PSU_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(PSU_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map psuMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - psuMap.forEach((name, psu) -> psuMap.get(name).setName(name)); + Map psuMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each PSU to the PSU list - psuMap.forEach((name, psu) -> PSUList.addPSU(psu)); + psuMap.forEach((name, psu) -> psuMap.get(name).setName(name)); - } catch (IOException e) { - out.println(PSU_PATH + " not found"); - System.exit(1); - } + // Add each psu to the psu list + psuMap.forEach((name, psu) -> PSUList.addPSU(psu)); } /** - * Loads all the RAM from the json file into RAMList. + * Loads all the RAMs from the json file into RAMList. */ public static void loadRAM() { - try { - String json = Files.readString(Paths.get(RAM_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(RAM_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map ramMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - ramMap.forEach((name, ram) -> ramMap.get(name).setName(name)); + Map ramMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each RAM to the RAM list - ramMap.forEach((name, ram) -> RAMList.addRAM(ram)); + ramMap.forEach((name, ram) -> ramMap.get(name).setName(name)); - } catch (IOException e) { - out.println(RAM_PATH + " not found"); - System.exit(1); - } + // Add each ram to the ram list + ramMap.forEach((name, ram) -> RAMList.addRAM(ram)); } /** - * Loads all the Storage from the json file into StorageList. + * Loads all the storage devices from the json file into StorageList. */ public static void loadStorage() { - try { - String json = Files.readString(Paths.get(STORAGE_PATH)); + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(STORAGE_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - Map storageMap = GSON.fromJson(json, new TypeToken>() { - }.getType()); + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); + Map storageMap = GSON.fromJson(json, new TypeToken>() { + }.getType()); - // Add each Storage to the Storage list - storageMap.forEach((name, storage) -> StorageList.addStorage(storage)); + storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); - } catch (IOException e) { - out.println(STORAGE_PATH + " not found"); - System.exit(1); - } + // Add each ram to the ram list + storageMap.forEach((name, storage) -> StorageList.addStorage(storage)); } + } diff --git a/appdata/chassis/chassis.json b/src/main/java/seedu/bigpp/resources/chassis.json similarity index 100% rename from appdata/chassis/chassis.json rename to src/main/java/seedu/bigpp/resources/chassis.json diff --git a/appdata/cpu/cpu.json b/src/main/java/seedu/bigpp/resources/cpu.json similarity index 100% rename from appdata/cpu/cpu.json rename to src/main/java/seedu/bigpp/resources/cpu.json diff --git a/appdata/cpucooler/cpucooler.json b/src/main/java/seedu/bigpp/resources/cpucooler.json similarity index 100% rename from appdata/cpucooler/cpucooler.json rename to src/main/java/seedu/bigpp/resources/cpucooler.json diff --git a/appdata/gpu/gpu.json b/src/main/java/seedu/bigpp/resources/gpu.json similarity index 100% rename from appdata/gpu/gpu.json rename to src/main/java/seedu/bigpp/resources/gpu.json diff --git a/appdata/motherboard/motherboard.json b/src/main/java/seedu/bigpp/resources/motherboard.json similarity index 100% rename from appdata/motherboard/motherboard.json rename to src/main/java/seedu/bigpp/resources/motherboard.json diff --git a/appdata/prebuilt/prebuilt.json b/src/main/java/seedu/bigpp/resources/prebuilt.json similarity index 100% rename from appdata/prebuilt/prebuilt.json rename to src/main/java/seedu/bigpp/resources/prebuilt.json diff --git a/appdata/psu/psu.json b/src/main/java/seedu/bigpp/resources/psu.json similarity index 100% rename from appdata/psu/psu.json rename to src/main/java/seedu/bigpp/resources/psu.json diff --git a/appdata/ram/ram.json b/src/main/java/seedu/bigpp/resources/ram.json similarity index 100% rename from appdata/ram/ram.json rename to src/main/java/seedu/bigpp/resources/ram.json diff --git a/appdata/storage/storage.json b/src/main/java/seedu/bigpp/resources/storage.json similarity index 100% rename from appdata/storage/storage.json rename to src/main/java/seedu/bigpp/resources/storage.json From 2c2c3f34fc087fd9e860cf66cfed4382b835b69f Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 21:36:32 +0800 Subject: [PATCH 086/420] Change EXPECTED and ACTUAL to accomodate for the new changes --- text-ui-test/EXPECTED.TXT | 49 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 5ff3f214f3..3701353b82 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1 +1,48 @@ -./appdata/chassis/chassis.json not found +add logo here +Welcome to BigPP! +=================================================== +PC viewer +List currently empty! +What would you like to do? +View PC +Build PC +back +exit +=================================================== + +=================================================== +PC viewer +Here is the list of PC Builds: +1.Custom-PC: [newpc1] - $0.0 +What would you like to do? +View PC +Build PC +back +exit +=================================================== +Custom PC: [ newpc1 ] has been created + +=================================================== +PC viewer +Here is the list of PC Builds: +1.Custom-PC: [newpc1] - $0.0 +2.Custom-PC: [newpc2] - $0.0 +What would you like to do? +View PC +Build PC +back +exit +=================================================== +Custom PC: [ newpc2 ] has been created + +=================================================== +PC viewer +Here is the list of PC Builds: +1.Custom-PC: [newpc2] - $0.0 +What would you like to do? +View PC +Build PC +back +exit +=================================================== +Custom PC: [ newpc1 ] has been deleted From a5adec564930903a2f865ef40afafc16041a316e Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 11 Mar 2023 22:02:00 +0800 Subject: [PATCH 087/420] Update Junit test for BackCommandTest --- build.gradle | 6 ++++++ .../bigpp/command/commoncommand/BackCommandTest.java | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index dec6bbea74..40883ee985 100644 --- a/build.gradle +++ b/build.gradle @@ -59,9 +59,15 @@ jar { sourceSets { main { java { + srcDir "src/main/java" resources { srcDir "src/main/java/seedu/bigpp/resources" } } } + test { + java { + srcDir "src/test/java" + } + } } diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 0d9c56c384..c42141180e 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -10,11 +10,11 @@ public class BackCommandTest { public void executeCommand_backCommand_success() { BackCommand backCommand = new BackCommand(); UI.setPCViewerMode(); - String PCViewerBackCommandResult = backCommand.executeCommand(); - assertEquals("Cannot go back from PCViewer", PCViewerBackCommandResult); - + String pcViewerBackCommandResult = backCommand.executeCommand(); + assertEquals("Cannot go back from PCViewer", pcViewerBackCommandResult); + UI.setPCBuilderMode(null); - String PCBuilderBackCommandResult = backCommand.executeCommand(); - assertEquals("returned to PCViewer", PCBuilderBackCommandResult); + String pcBuilderBackCommandResult = backCommand.executeCommand(); + assertEquals("returned to PCViewer", pcBuilderBackCommandResult); } } From fccbcc29e2ab4887d96720c2f75f0183cdcba92b Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 11 Mar 2023 23:27:59 +0800 Subject: [PATCH 088/420] Add Builder class with method to set name and set budget --- ...Command.java => BuilderCreateCommand.java} | 4 ++-- .../buildercommand/BuilderEditBudget.java | 19 +++++++++++++++++++ ...mmand.java => BuilderEditNameCommand.java} | 4 ++-- src/main/java/seedu/bigpp/parser/Parser.java | 8 ++++---- 4 files changed, 27 insertions(+), 8 deletions(-) rename src/main/java/seedu/bigpp/command/buildercommand/{CreateBuildCommand.java => BuilderCreateCommand.java} (82%) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java rename src/main/java/seedu/bigpp/command/buildercommand/{EditNameCommand.java => BuilderEditNameCommand.java} (81%) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java similarity index 82% rename from src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java index eb316f8e8e..c3080fe6c2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/CreateBuildCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java @@ -4,8 +4,8 @@ import seedu.bigpp.builder.Builder; import seedu.bigpp.builder.CurrentBuilder; -public class CreateBuildCommand extends Command { - public CreateBuildCommand(String arguments) { +public class BuilderCreateCommand extends Command { + public BuilderCreateCommand(String arguments) { super.setArguments(arguments); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java new file mode 100644 index 0000000000..55971bf38e --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java @@ -0,0 +1,19 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.builder.Builder; +import seedu.bigpp.builder.CurrentBuilder; + +public class BuilderEditBudget extends Command { + public BuilderEditBudget(String arguments) { + super.setArguments(arguments); + } + + @Override + public String executeCommand() { + int budget = Integer.parseInt(super.getArguments()); + Builder currentBuilder = CurrentBuilder.getBuilder(); + currentBuilder.setBudget(budget); + return "Current build budget is now: " + budget; + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java similarity index 81% rename from src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 6d04a5442c..fe94d349e3 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/EditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -4,9 +4,9 @@ import seedu.bigpp.builder.Builder; import seedu.bigpp.builder.CurrentBuilder; -public class EditNameCommand extends Command { +public class BuilderEditNameCommand extends Command { - public EditNameCommand(String arguments) { + public BuilderEditNameCommand(String arguments) { super.setArguments(arguments); } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 16faf57b92..64ba17726a 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,12 +1,12 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.CreateBuildCommand; +import seedu.bigpp.command.buildercommand.BuilderCreateCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.pc.PCList; -import seedu.bigpp.command.buildercommand.EditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.viewercommand.ViewerAddCommand; @@ -50,7 +50,7 @@ private Command parseViewerCommand(String userInput) { return new ViewerDeleteCommand(arguments); case "edit": UI.setPCBuilderMode(PCList.getPC(Integer.parseInt(arguments) - 1)); - return new CreateBuildCommand(arguments); + return new BuilderCreateCommand(arguments); default: return null; } @@ -63,7 +63,7 @@ private Command parseBuilderCommand(String userInput) { switch (commandWord) { case "editname": - return new EditNameCommand(arguments); + return new BuilderEditNameCommand(arguments); } commandWord = commandWord.toLowerCase(); From 8a9bef29c58f660a6247a9e30991cf133ee32c35 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 11 Mar 2023 23:30:29 +0800 Subject: [PATCH 089/420] Refactor to abide by checkstyle --- src/main/java/seedu/bigpp/parser/Parser.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 64ba17726a..05b697e9f8 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -60,13 +60,14 @@ private Command parseBuilderCommand(String userInput) { String commandWord = userInput.split(" ")[0]; String arguments = userInput.split(" ")[1]; + commandWord = commandWord.toLowerCase(); switch (commandWord) { case "editname": return new BuilderEditNameCommand(arguments); + default: + return null; } - commandWord = commandWord.toLowerCase(); - return null; } } From a5f513d71db1ec0387f879e832ed8db90731784a Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 00:15:03 +0800 Subject: [PATCH 090/420] Add view pc function and methods to change private varibales in PC --- .../viewercommand/ViewerViewCommand.java | 22 +++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 + src/main/java/seedu/bigpp/pc/PC.java | 90 ++++++++++++++++--- 3 files changed, 102 insertions(+), 13 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java new file mode 100644 index 0000000000..58a891d251 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -0,0 +1,22 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; + +public class ViewerViewCommand extends Command { + + public ViewerViewCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * + */ + @Override + public String executeCommand() { + String index = super.getArguments(); + PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); + return pc.printComponents(); + } +} \ No newline at end of file diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d42c672420..67517c1fab 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -4,6 +4,7 @@ import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.viewercommand.ViewerAddCommand; @@ -45,6 +46,8 @@ private Command parseViewerCommand(String userInput) { return new ViewerAddCommand(arguments); case "delete": return new ViewerDeleteCommand(arguments); + case "view": + return new ViewerViewCommand(arguments); default: return null; } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index c00e0f066b..5b2d6a0b77 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -1,14 +1,56 @@ package seedu.bigpp.pc; +import seedu.bigpp.component.Component; import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.component.cpucooler.CPUCooler; +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.component.storage.Storage; + +import java.util.ArrayList; + import static seedu.bigpp.ui.UI.out; public class PC { private String name; - // private CPU cpu; private Boolean isPrebuilt; - private CPU cpu = null; + private CPUCooler cpuCooler = null; + private GPU gpu = null; + private Motherboard motherboard = null; + private RAM ram = null; + private Storage storage = null; + private PSU psu = null; + + public void setCPU(CPU cpu) { + this.cpu = cpu; + } + + public void setCpuCooler(CPUCooler cpuCooler) { + this.cpuCooler = cpuCooler; + } + + public void setGpu(GPU gpu) { + this.gpu = gpu; + } + + public void setMotherboard(Motherboard motherboard) { + this.motherboard = motherboard; + } + + public void setRam(RAM ram) { + this.ram = ram; + } + + public void setStorage(Storage storage) { + this.storage = storage; + } + + public void setPsu(PSU psu) { + this.psu = psu; + } public PC(String name, Boolean isPrebuilt) { this.name = name; @@ -24,16 +66,20 @@ public boolean getIsPreBuilt() { return isPrebuilt; } - public void setCPU(CPU cpu) { - this.cpu = cpu; - } - public Float getCost() { - Float totalCost = 0.00F; - if (cpu == null) { - return totalCost; + /** + * Gets the cost of each of the components in the PC and returns the total. + * + * @return totalCost + */ + public float getCost() { + float totalCost = 0.00F; + Component[] components = {cpu, cpuCooler, gpu, motherboard, ram, storage, psu}; + for (Component component : components) { + if (component != null) { + totalCost += component.getPrice(); + } } - totalCost += cpu.getPrice(); return totalCost; } @@ -45,9 +91,27 @@ public String buildType(Boolean isPrebuilt) { } } - public void printComponents() { - out.println(cpu); - // print other components when classes are created for individual components + /** + * Method to print all the components of the PC. + */ + public String printComponents() { + String componentString = ""; + componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); + componentString += ("Components:" + '\n'); + String[] componentNames = {"CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", "Storage ", "PSU "}; + Component[] components = {cpu, cpuCooler, gpu, motherboard, ram, storage, psu}; + int index = 0; + for (Component component : components) { + if (component != null) { +// out.println(componentNames[index] + component.getName()); + componentString += (componentNames[index] + component.getName() + '\n'); + } else { +// out.println(componentNames[index] + ": - Not Selected -"); + componentString += (componentNames[index] + ": - Not Selected -" + '\n'); + } + index++; + } + return componentString; } @Override From eecbde1643ed976c1e242a4e65b21129642f1cfe Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 00:23:14 +0800 Subject: [PATCH 091/420] Reformat code to comply with checkstyle --- src/main/java/seedu/bigpp/BigPP.java | 2 +- .../command/commoncommand/BackCommand.java | 1 - .../seedu/bigpp/datastorage/DataStorage.java | 14 +++++++------- .../java/seedu/bigpp/menu/PCBuilderMenu.java | 1 + .../java/seedu/bigpp/menu/PCViewerMenu.java | 3 ++- src/main/java/seedu/bigpp/parser/Parser.java | 3 +-- src/main/java/seedu/bigpp/pc/PC.java | 17 ++++++----------- src/main/java/seedu/bigpp/pc/PCList.java | 1 + src/main/java/seedu/bigpp/ui/UI.java | 3 ++- src/test/java/seedu/bigpp/BigPPTest.java | 4 ++-- .../command/commoncommand/BackCommandTest.java | 5 +++-- .../java/seedu/bigpp/parser/ParserTest.java | 1 - 12 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index e0c7565a8f..c33135cb33 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -2,9 +2,9 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; -import seedu.bigpp.datastorage.DataStorage; public class BigPP { diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index 70c570fcb1..be3f14868e 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -1,7 +1,6 @@ package seedu.bigpp.command.commoncommand; import seedu.bigpp.command.Command; - import seedu.bigpp.ui.UI; public class BackCommand extends Command { diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 3086f467bd..1e3f0b8252 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -1,14 +1,7 @@ package seedu.bigpp.datastorage; -import static seedu.bigpp.ui.UI.out; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Map; - import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.component.chassis.ChassisList; import seedu.bigpp.component.cpu.CPU; @@ -26,6 +19,13 @@ import seedu.bigpp.component.storage.Storage; import seedu.bigpp.component.storage.StorageList; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; + +import static seedu.bigpp.ui.UI.out; + public abstract class DataStorage { private static final String CHASSIS_PATH = "./appdata/chassis/chassis.json"; private static final String CPU_PATH = "./appdata/cpu/cpu.json"; diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 2b6eded903..fe10592af8 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -1,6 +1,7 @@ package seedu.bigpp.menu; import seedu.bigpp.pc.PC; + import static seedu.bigpp.ui.UI.out; public class PCBuilderMenu extends Menu { diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 2bb47a0192..2c8296b83c 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -1,8 +1,9 @@ package seedu.bigpp.menu; -import static seedu.bigpp.ui.UI.out; import seedu.bigpp.pc.PCList; +import static seedu.bigpp.ui.UI.out; + public class PCViewerMenu extends Menu { public void printMenu() { diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 67517c1fab..6b4f9def55 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,12 +3,11 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; -import seedu.bigpp.command.viewercommand.ViewerAddCommand; - public class Parser { public Command parseCommand(String userInput) { diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 5b2d6a0b77..b17388f0d0 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -9,10 +9,6 @@ import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; -import java.util.ArrayList; - -import static seedu.bigpp.ui.UI.out; - public class PC { private String name; private Boolean isPrebuilt; @@ -66,15 +62,13 @@ public boolean getIsPreBuilt() { return isPrebuilt; } - /** * Gets the cost of each of the components in the PC and returns the total. - * * @return totalCost */ public float getCost() { float totalCost = 0.00F; - Component[] components = {cpu, cpuCooler, gpu, motherboard, ram, storage, psu}; + Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; for (Component component : components) { if (component != null) { totalCost += component.getPrice(); @@ -98,15 +92,16 @@ public String printComponents() { String componentString = ""; componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); - String[] componentNames = {"CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", "Storage ", "PSU "}; - Component[] components = {cpu, cpuCooler, gpu, motherboard, ram, storage, psu}; + String[] componentNames = { "CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", + "Storage ", "PSU " }; + Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; int index = 0; for (Component component : components) { if (component != null) { -// out.println(componentNames[index] + component.getName()); + // out.println(componentNames[index] + component.getName()); componentString += (componentNames[index] + component.getName() + '\n'); } else { -// out.println(componentNames[index] + ": - Not Selected -"); + // out.println(componentNames[index] + ": - Not Selected -"); componentString += (componentNames[index] + ": - Not Selected -" + '\n'); } index++; diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index c0464e8c44..c2583efecf 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,6 +1,7 @@ package seedu.bigpp.pc; import java.util.ArrayList; + import static seedu.bigpp.ui.UI.out; public abstract class PCList { diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 4a3b11d1ce..64cf93bed3 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,8 +1,9 @@ package seedu.bigpp.ui; -import seedu.bigpp.menu.PCViewerMenu; import seedu.bigpp.menu.PCBuilderMenu; +import seedu.bigpp.menu.PCViewerMenu; import seedu.bigpp.pc.PC; + import java.io.PrintStream; import java.util.Scanner; diff --git a/src/test/java/seedu/bigpp/BigPPTest.java b/src/test/java/seedu/bigpp/BigPPTest.java index ade825822a..700bc0a8c6 100644 --- a/src/test/java/seedu/bigpp/BigPPTest.java +++ b/src/test/java/seedu/bigpp/BigPPTest.java @@ -1,9 +1,9 @@ package seedu.bigpp; -import static org.junit.jupiter.api.Assertions.assertTrue; - import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; + class BigPPTest { @Test public void sampleTest() { diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 0d9c56c384..35624f7228 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -1,9 +1,10 @@ package seedu.bigpp.command.commoncommand; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; import seedu.bigpp.ui.UI; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class BackCommandTest { @Test @@ -12,7 +13,7 @@ public void executeCommand_backCommand_success() { UI.setPCViewerMode(); String PCViewerBackCommandResult = backCommand.executeCommand(); assertEquals("Cannot go back from PCViewer", PCViewerBackCommandResult); - + UI.setPCBuilderMode(null); String PCBuilderBackCommandResult = backCommand.executeCommand(); assertEquals("returned to PCViewer", PCBuilderBackCommandResult); diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java index f401808ebd..8f5697f930 100644 --- a/src/test/java/seedu/bigpp/parser/ParserTest.java +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -1,7 +1,6 @@ package seedu.bigpp.parser; import org.junit.jupiter.api.Test; - import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; From eb3094147fb42a9932c898488822e24e7c30f71f Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 00:30:11 +0800 Subject: [PATCH 092/420] Refactor builder to directly access PC from PCList --- .../java/seedu/bigpp/builder/Builder.java | 30 ------------------- .../seedu/bigpp/builder/CurrentBuilder.java | 14 --------- .../buildercommand/BuilderCreateCommand.java | 20 ------------- .../buildercommand/BuilderEditBudget.java | 9 +++--- .../BuilderEditNameCommand.java | 8 ++--- .../viewercommand/ViewerEditCommand.java | 24 +++++++++++++++ .../java/seedu/bigpp/menu/PCBuilderMenu.java | 15 ++++++---- src/main/java/seedu/bigpp/parser/Parser.java | 5 ++-- src/main/java/seedu/bigpp/pc/PC.java | 10 +++++++ src/main/java/seedu/bigpp/ui/UI.java | 8 ++--- .../commoncommand/BackCommandTest.java | 3 +- 11 files changed, 61 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/seedu/bigpp/builder/Builder.java delete mode 100644 src/main/java/seedu/bigpp/builder/CurrentBuilder.java delete mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java diff --git a/src/main/java/seedu/bigpp/builder/Builder.java b/src/main/java/seedu/bigpp/builder/Builder.java deleted file mode 100644 index 914f6cae45..0000000000 --- a/src/main/java/seedu/bigpp/builder/Builder.java +++ /dev/null @@ -1,30 +0,0 @@ -package seedu.bigpp.builder; - -import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; - -public class Builder { - - private int budget = 0; - private PC pc; - - public Builder(int currentPCindex) { - this.pc = PCList.getPC(currentPCindex - 1); - } - - public String getName() { - return this.pc.getName(); - } - - public int getBudget() { - return budget; - } - - public void setName(String name) { - this.pc.setName(name); - } - - public void setBudget(int budget) { - this.budget = budget; - } -} diff --git a/src/main/java/seedu/bigpp/builder/CurrentBuilder.java b/src/main/java/seedu/bigpp/builder/CurrentBuilder.java deleted file mode 100644 index 3f604b018a..0000000000 --- a/src/main/java/seedu/bigpp/builder/CurrentBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.builder; - -public class CurrentBuilder { - - public static Builder currentBuilder; - - public static void setBuilder(Builder builder) { - currentBuilder = builder; - } - - public static Builder getBuilder() { - return currentBuilder; - } -} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java deleted file mode 100644 index c3080fe6c2..0000000000 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCreateCommand.java +++ /dev/null @@ -1,20 +0,0 @@ -package seedu.bigpp.command.buildercommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.builder.Builder; -import seedu.bigpp.builder.CurrentBuilder; - -public class BuilderCreateCommand extends Command { - public BuilderCreateCommand(String arguments) { - super.setArguments(arguments); - } - - @Override - public String executeCommand() { - int index = Integer.parseInt(super.getArguments()); - Builder builder = new Builder(index); - CurrentBuilder.setBuilder(builder); - return "Build: [ " + builder.getName() + " ] is currently being edited"; - } - -} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java index 55971bf38e..12ae479dd3 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java @@ -1,8 +1,9 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.builder.Builder; -import seedu.bigpp.builder.CurrentBuilder; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + public class BuilderEditBudget extends Command { public BuilderEditBudget(String arguments) { @@ -12,8 +13,8 @@ public BuilderEditBudget(String arguments) { @Override public String executeCommand() { int budget = Integer.parseInt(super.getArguments()); - Builder currentBuilder = CurrentBuilder.getBuilder(); - currentBuilder.setBudget(budget); + int pcIndex = UI.builderMenu.getPCIndex(); + PCList.getPC(pcIndex).setBudget(budget); return "Current build budget is now: " + budget; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index fe94d349e3..874ee6e4ac 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -1,8 +1,8 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.builder.Builder; -import seedu.bigpp.builder.CurrentBuilder; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI;; public class BuilderEditNameCommand extends Command { @@ -13,8 +13,8 @@ public BuilderEditNameCommand(String arguments) { @Override public String executeCommand() { String name = super.getArguments(); - Builder currentBuilder = CurrentBuilder.getBuilder(); - currentBuilder.setName(name); + int pcIndex = UI.builderMenu.getPCIndex(); + PCList.getPC(pcIndex).setName(name); return "Current build name is now: " + name; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java new file mode 100644 index 0000000000..971fe4f6fd --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -0,0 +1,24 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + +public class ViewerEditCommand extends Command{ + public ViewerEditCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * Add new PC of a given name to the PC list + * @return the name of the PC created + */ + @Override + public String executeCommand() { + int pcIndex = Integer.parseInt(super.getArguments()) - 1; + UI.setPCBuilderMode(pcIndex); + return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); + } + } + + diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 2b6eded903..df8c18869b 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -1,19 +1,24 @@ package seedu.bigpp.menu; -import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; + import static seedu.bigpp.ui.UI.out; public class PCBuilderMenu extends Menu { - private PC pc; + private int pcIndex; + + public PCBuilderMenu(int pcIndex) { + this.pcIndex = pcIndex; + } - public PCBuilderMenu(PC pc) { - this.pc = pc; + public int getPCIndex() { + return pcIndex; } public void printMenu() { out.println("PC builder"); - pc.printComponents(); + PCList.getPC(pcIndex).printComponents(); out.println("Add component"); out.println("Remove component"); out.println("View PC"); diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 05b697e9f8..05eb61b676 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,10 +1,10 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.BuilderCreateCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.pc.PCList; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.ui.UI; @@ -49,8 +49,7 @@ private Command parseViewerCommand(String userInput) { case "delete": return new ViewerDeleteCommand(arguments); case "edit": - UI.setPCBuilderMode(PCList.getPC(Integer.parseInt(arguments) - 1)); - return new BuilderCreateCommand(arguments); + return new ViewerEditCommand(arguments); default: return null; } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index f605d94ba1..0011539126 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -10,6 +10,8 @@ public class PC { private CPU cpu = null; + private int budget; + public PC(String name, Boolean isPrebuilt) { this.name = name; // this.cpu = new CPU(); @@ -28,6 +30,14 @@ public boolean getIsPreBuilt() { return isPrebuilt; } + public int getBudget() { + return budget; + } + + public void setBudget(int budget) { + this.budget = budget; + } + public void setCPU(CPU cpu) { this.cpu = cpu; } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 4a3b11d1ce..66ca3c7035 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -14,9 +14,9 @@ public abstract class UI { private static UIState uiState = UIState.PCVIEWER; private static PCViewerMenu viewerMenu = new PCViewerMenu(); - private static PCBuilderMenu builderMenu = null; - + private static Scanner in = new Scanner(System.in); + public static PCBuilderMenu builderMenu = null; public static PrintStream out = System.out; public static UIState getUiState() { @@ -65,8 +65,8 @@ public static void setPCViewerMode() { builderMenu = null; } - public static void setPCBuilderMode(PC pc) { + public static void setPCBuilderMode(int pcIndex) { uiState = UIState.PCBUILDER; - builderMenu = new PCBuilderMenu(pc); + builderMenu = new PCBuilderMenu(pcIndex); } } diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 0d9c56c384..83ffe8e79f 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -13,7 +13,8 @@ public void executeCommand_backCommand_success() { String PCViewerBackCommandResult = backCommand.executeCommand(); assertEquals("Cannot go back from PCViewer", PCViewerBackCommandResult); - UI.setPCBuilderMode(null); + //edits first pc in pclist + UI.setPCBuilderMode(0); String PCBuilderBackCommandResult = backCommand.executeCommand(); assertEquals("returned to PCViewer", PCBuilderBackCommandResult); } From e645b5ba1c1614fbc5ebfe42a594c90e32f06160 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 00:38:39 +0800 Subject: [PATCH 093/420] Edit code to comply with checkstyle --- .../command/viewercommand/ViewerViewCommand.java | 2 +- src/main/java/seedu/bigpp/pc/PC.java | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 58a891d251..f4b6faac41 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -19,4 +19,4 @@ public String executeCommand() { PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); return pc.printComponents(); } -} \ No newline at end of file +} diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index b17388f0d0..2eabc96b51 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -20,6 +20,12 @@ public class PC { private Storage storage = null; private PSU psu = null; + public PC(String name, Boolean isPrebuilt) { + this.name = name; + // this.cpu = new CPU(); + this.isPrebuilt = isPrebuilt; + } + public void setCPU(CPU cpu) { this.cpu = cpu; } @@ -48,12 +54,6 @@ public void setPsu(PSU psu) { this.psu = psu; } - public PC(String name, Boolean isPrebuilt) { - this.name = name; - // this.cpu = new CPU(); - this.isPrebuilt = isPrebuilt; - } - public String getName() { return name; } @@ -92,8 +92,7 @@ public String printComponents() { String componentString = ""; componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); - String[] componentNames = { "CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", - "Storage ", "PSU " }; + String[] componentNames = { "CPU ","CPU Cooler ","GPU ","Motherboard","RAM ","Storage ","PSU "}; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; int index = 0; for (Component component : components) { From 01f7507c9b5dd8b9eb42dc218ba9dfa68b51665b Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 00:40:08 +0800 Subject: [PATCH 094/420] Fix checkstyle issues --- .../buildercommand/BuilderEditBudget.java | 1 - .../BuilderEditNameCommand.java | 2 +- .../viewercommand/ViewerEditCommand.java | 30 +++++++++---------- src/main/java/seedu/bigpp/parser/Parser.java | 1 - src/main/java/seedu/bigpp/ui/UI.java | 13 ++++---- 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java index 12ae479dd3..cca606281e 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java @@ -4,7 +4,6 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; - public class BuilderEditBudget extends Command { public BuilderEditBudget(String arguments) { super.setArguments(arguments); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 874ee6e4ac..dc850cb56a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -2,7 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.pc.PCList; -import seedu.bigpp.ui.UI;; +import seedu.bigpp.ui.UI; public class BuilderEditNameCommand extends Command { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 971fe4f6fd..60f52d0ef3 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -4,21 +4,19 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; -public class ViewerEditCommand extends Command{ - public ViewerEditCommand(String arguments) { - super.setArguments(arguments); - } - - /** - * Add new PC of a given name to the PC list - * @return the name of the PC created - */ - @Override - public String executeCommand() { - int pcIndex = Integer.parseInt(super.getArguments()) - 1; - UI.setPCBuilderMode(pcIndex); - return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); - } +public class ViewerEditCommand extends Command { + public ViewerEditCommand(String arguments) { + super.setArguments(arguments); } - + /** + * Add new PC of a given name to the PC list + * @return the name of the PC created + */ + @Override + public String executeCommand() { + int pcIndex = Integer.parseInt(super.getArguments()) - 1; + UI.setPCBuilderMode(pcIndex); + return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 05eb61b676..9451be5c7f 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -5,7 +5,6 @@ import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; -import seedu.bigpp.pc.PCList; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.ui.UI; diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 66ca3c7035..1128f997cd 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -2,22 +2,21 @@ import seedu.bigpp.menu.PCViewerMenu; import seedu.bigpp.menu.PCBuilderMenu; -import seedu.bigpp.pc.PC; import java.io.PrintStream; import java.util.Scanner; public abstract class UI { - + public static PrintStream out = System.out; + public static PCBuilderMenu builderMenu = null; + private static final String LOGO = "add logo here"; private static final String DIVIDER = "==================================================="; - + private static UIState uiState = UIState.PCVIEWER; - - private static PCViewerMenu viewerMenu = new PCViewerMenu(); + private static PCViewerMenu viewerMenu = new PCViewerMenu(); private static Scanner in = new Scanner(System.in); - public static PCBuilderMenu builderMenu = null; - public static PrintStream out = System.out; + public static UIState getUiState() { return uiState; From b95eb736a8caef85b2f977636c3bb683738a99eb Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 00:50:26 +0800 Subject: [PATCH 095/420] Fix checkstyle issies --- ...ilderEditBudget.java => BuilderEditBudgetCommand.java} | 4 ++-- src/main/java/seedu/bigpp/menu/PCBuilderMenu.java | 6 ++---- src/main/java/seedu/bigpp/parser/Parser.java | 5 ++++- .../bigpp/command/commoncommand/BackCommandTest.java | 8 ++++---- 4 files changed, 12 insertions(+), 11 deletions(-) rename src/main/java/seedu/bigpp/command/buildercommand/{BuilderEditBudget.java => BuilderEditBudgetCommand.java} (80%) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java similarity index 80% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java rename to src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index cca606281e..6a2d5ce783 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudget.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -4,8 +4,8 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; -public class BuilderEditBudget extends Command { - public BuilderEditBudget(String arguments) { +public class BuilderEditBudgetCommand extends Command { + public BuilderEditBudgetCommand(String arguments) { super.setArguments(arguments); } diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index df8c18869b..3db6b90f44 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -19,10 +19,8 @@ public int getPCIndex() { public void printMenu() { out.println("PC builder"); PCList.getPC(pcIndex).printComponents(); - out.println("Add component"); - out.println("Remove component"); - out.println("View PC"); + out.println("Edit name"); + out.println("Set budget"); out.println("back"); - out.println("exit"); } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 9451be5c7f..ba42565a8b 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -6,6 +6,7 @@ import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.ui.UI; import seedu.bigpp.command.viewercommand.ViewerAddCommand; @@ -61,8 +62,10 @@ private Command parseBuilderCommand(String userInput) { commandWord = commandWord.toLowerCase(); switch (commandWord) { - case "editname": + case "name": return new BuilderEditNameCommand(arguments); + case "budget": + return new BuilderEditBudgetCommand(arguments); default: return null; } diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 83ffe8e79f..b2ef6fb023 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -10,12 +10,12 @@ public class BackCommandTest { public void executeCommand_backCommand_success() { BackCommand backCommand = new BackCommand(); UI.setPCViewerMode(); - String PCViewerBackCommandResult = backCommand.executeCommand(); - assertEquals("Cannot go back from PCViewer", PCViewerBackCommandResult); + String pcViewerBackCommandResult = backCommand.executeCommand(); + assertEquals("Cannot go back from PCViewer", pcViewerBackCommandResult); //edits first pc in pclist UI.setPCBuilderMode(0); - String PCBuilderBackCommandResult = backCommand.executeCommand(); - assertEquals("returned to PCViewer", PCBuilderBackCommandResult); + String pcBuilderBackCommandResult = backCommand.executeCommand(); + assertEquals("returned to PCViewer", pcBuilderBackCommandResult); } } From 66d4bdb2c45439c493444cd1024211dc57af26fc Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 01:17:54 +0800 Subject: [PATCH 096/420] change array indentation level from 16 to 12 to pass gradle check --- src/main/java/seedu/bigpp/pc/PC.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 2eabc96b51..b61fbee31a 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -92,7 +92,16 @@ public String printComponents() { String componentString = ""; componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); - String[] componentNames = { "CPU ","CPU Cooler ","GPU ","Motherboard","RAM ","Storage ","PSU "}; + // ArrayList componentNames = new ArrayList<>(); + // componentNames.add("CPU "); + // componentNames.add("CPU Cooler "); + // componentNames.add("GPU "); + // componentNames.add("Motherboard"); + // componentNames.add("RAM "); + // componentNames.add("Storage "); + // componentNames.add("PSU "); + String[] componentNames = { "CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", + "Storage ", "PSU " }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; int index = 0; for (Component component : components) { From bc236d235630827b1ab7cf92cba498ec73b89c93 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 12 Mar 2023 01:21:49 +0800 Subject: [PATCH 097/420] Fix issue where resources does not work with vscode and gradle at same time --- build.gradle | 18 +++++------------- .../seedu/bigpp => }/resources/chassis.json | 0 .../{java/seedu/bigpp => }/resources/cpu.json | 0 .../seedu/bigpp => }/resources/cpucooler.json | 0 .../{java/seedu/bigpp => }/resources/gpu.json | 0 .../bigpp => }/resources/motherboard.json | 0 .../seedu/bigpp => }/resources/prebuilt.json | 0 .../{java/seedu/bigpp => }/resources/psu.json | 0 .../{java/seedu/bigpp => }/resources/ram.json | 0 .../seedu/bigpp => }/resources/storage.json | 0 10 files changed, 5 insertions(+), 13 deletions(-) rename src/main/{java/seedu/bigpp => }/resources/chassis.json (100%) rename src/main/{java/seedu/bigpp => }/resources/cpu.json (100%) rename src/main/{java/seedu/bigpp => }/resources/cpucooler.json (100%) rename src/main/{java/seedu/bigpp => }/resources/gpu.json (100%) rename src/main/{java/seedu/bigpp => }/resources/motherboard.json (100%) rename src/main/{java/seedu/bigpp => }/resources/prebuilt.json (100%) rename src/main/{java/seedu/bigpp => }/resources/psu.json (100%) rename src/main/{java/seedu/bigpp => }/resources/ram.json (100%) rename src/main/{java/seedu/bigpp => }/resources/storage.json (100%) diff --git a/build.gradle b/build.gradle index 40883ee985..db7b8096f4 100644 --- a/build.gradle +++ b/build.gradle @@ -56,18 +56,10 @@ jar { } } +tasks.withType(Copy).all { duplicatesStrategy 'exclude' } + sourceSets { - main { - java { - srcDir "src/main/java" - resources { - srcDir "src/main/java/seedu/bigpp/resources" - } - } - } - test { - java { - srcDir "src/test/java" - } - } + main.java.srcDirs 'src/main/java' + main.resources.srcDirs 'src/main/resources' + test.java.srcDirs 'src/test/java' } diff --git a/src/main/java/seedu/bigpp/resources/chassis.json b/src/main/resources/chassis.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/chassis.json rename to src/main/resources/chassis.json diff --git a/src/main/java/seedu/bigpp/resources/cpu.json b/src/main/resources/cpu.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/cpu.json rename to src/main/resources/cpu.json diff --git a/src/main/java/seedu/bigpp/resources/cpucooler.json b/src/main/resources/cpucooler.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/cpucooler.json rename to src/main/resources/cpucooler.json diff --git a/src/main/java/seedu/bigpp/resources/gpu.json b/src/main/resources/gpu.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/gpu.json rename to src/main/resources/gpu.json diff --git a/src/main/java/seedu/bigpp/resources/motherboard.json b/src/main/resources/motherboard.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/motherboard.json rename to src/main/resources/motherboard.json diff --git a/src/main/java/seedu/bigpp/resources/prebuilt.json b/src/main/resources/prebuilt.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/prebuilt.json rename to src/main/resources/prebuilt.json diff --git a/src/main/java/seedu/bigpp/resources/psu.json b/src/main/resources/psu.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/psu.json rename to src/main/resources/psu.json diff --git a/src/main/java/seedu/bigpp/resources/ram.json b/src/main/resources/ram.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/ram.json rename to src/main/resources/ram.json diff --git a/src/main/java/seedu/bigpp/resources/storage.json b/src/main/resources/storage.json similarity index 100% rename from src/main/java/seedu/bigpp/resources/storage.json rename to src/main/resources/storage.json From 5e40057e015c697a94213d31a7305184b2a8cb75 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 12 Mar 2023 01:48:31 +0800 Subject: [PATCH 098/420] Resolve formatting error --- .../commoncommand/BackCommandTest.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 3797546117..cfcf57dc77 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -6,16 +6,16 @@ public class BackCommandTest { - @Test - public void executeCommand_backCommand_success() { - BackCommand backCommand = new BackCommand(); - UI.setPCViewerMode(); - String pcViewerBackCommandResult = backCommand.executeCommand(); - assertEquals("Cannot go back from PCViewer", pcViewerBackCommandResult); + @Test + public void executeCommand_backCommand_success() { + BackCommand backCommand = new BackCommand(); + UI.setPCViewerMode(); + String pcViewerBackCommandResult = backCommand.executeCommand(); + assertEquals("Cannot go back from PCViewer", pcViewerBackCommandResult); - //edits first pc in pclist - UI.setPCBuilderMode(0); - String pcBuilderBackCommandResult = backCommand.executeCommand(); - assertEquals("returned to PCViewer", pcBuilderBackCommandResult); - } + //edits first pc in pclist + UI.setPCBuilderMode(0); + String pcBuilderBackCommandResult = backCommand.executeCommand(); + assertEquals("returned to PCViewer", pcBuilderBackCommandResult); + } } From d57b243d7ff8c5d7a3e88654c23f9398a2afa22e Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 01:49:32 +0800 Subject: [PATCH 099/420] Add Builder documentationand JUnit testing --- .../BuilderEditBudgetCommand.java | 6 ++++++ .../BuilderEditNameCommand.java | 5 +++++ .../BuilderEditBudgetCommandTest.java | 20 +++++++++++++++++++ .../BuilderEditNameCommandTest.java | 20 +++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java create mode 100644 src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 6a2d5ce783..66dad07d6d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -5,10 +5,16 @@ import seedu.bigpp.ui.UI; public class BuilderEditBudgetCommand extends Command { + public BuilderEditBudgetCommand(String arguments) { super.setArguments(arguments); } + /* + * Change the budget of the current PC that the builder is working on + * + * @return the new budget of the PC + */ @Override public String executeCommand() { int budget = Integer.parseInt(super.getArguments()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index dc850cb56a..63d46a6dd2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -10,6 +10,11 @@ public BuilderEditNameCommand(String arguments) { super.setArguments(arguments); } + /* + * Change the name of the current PC that the builder is working on + * + * @return the new name of the PC + */ @Override public String executeCommand() { String name = super.getArguments(); diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java new file mode 100644 index 0000000000..7e5abdce29 --- /dev/null +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -0,0 +1,20 @@ +package seedu.bigpp.command.buildercommand; + +import org.junit.jupiter.api.Test; + +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BuilderEditBudgetCommandTest { + + @Test + public void executeCommand_editBudgetCommand_success() { + PC pc = new PC("PC1", true); + PCList.addPC(pc); + UI.setPCBuilderMode(0); + String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(); + assertEquals("Current build budget is now: 1000", editBudgetCommandResult); + } +} diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java new file mode 100644 index 0000000000..434fa133d2 --- /dev/null +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java @@ -0,0 +1,20 @@ +package seedu.bigpp.command.buildercommand; + +import org.junit.jupiter.api.Test; + +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BuilderEditNameCommandTest { + + @Test + public void executeCommand_editNameCommand_success() { + PC pc = new PC("PC1", true); + PCList.addPC(pc); + UI.setPCBuilderMode(0); + String editNameCommandResult = new BuilderEditNameCommand("PC2").executeCommand(); + assertEquals("Current build name is now: PC2", editNameCommandResult); + } +} From e6a7069b92733735f58405b14cf9c1578b2bd5aa Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 01:49:57 +0800 Subject: [PATCH 100/420] Change method name from printComponents to viewComponents as method does not print anything. Also complete Javadoc for executeCommand() in ViewerViewCommand.java --- .../seedu/bigpp/command/viewercommand/ViewerViewCommand.java | 4 +++- src/main/java/seedu/bigpp/menu/PCBuilderMenu.java | 2 +- src/main/java/seedu/bigpp/pc/PC.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index f4b6faac41..a9a13969a5 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -11,12 +11,14 @@ public ViewerViewCommand(String arguments) { } /** + *Display all the components of the PC of a given index * + * @return the components of the PC of that index */ @Override public String executeCommand() { String index = super.getArguments(); PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); - return pc.printComponents(); + return pc.viewComponents(); } } diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index b1f213fa2b..a643fbb5d8 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -18,7 +18,7 @@ public int getPCIndex() { public void printMenu() { out.println("PC builder"); - out.println(PCList.getPC(pcIndex).printComponents()); + out.println(PCList.getPC(pcIndex).viewComponents()); out.println("Edit name"); out.println("Set budget"); out.println("back"); diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index c1a6a3ff9d..58fa9e2a99 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -103,7 +103,7 @@ public String buildType(Boolean isPrebuilt) { /** * Method to print all the components of the PC. */ - public String printComponents() { + public String viewComponents() { String componentString = ""; componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); From 08380c9c5881c5b215f0f020c0bfcaee1928fe0c Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 01:52:25 +0800 Subject: [PATCH 101/420] Add whitespace after asterisk for checkstyle --- .../seedu/bigpp/command/viewercommand/ViewerViewCommand.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index a9a13969a5..25731997ab 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -11,8 +11,7 @@ public ViewerViewCommand(String arguments) { } /** - *Display all the components of the PC of a given index - * + * Display all the components of the PC of a given index * @return the components of the PC of that index */ @Override From 684927c24fc6491d4926f5dc1a228ebb17e9907b Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 02:36:35 +0800 Subject: [PATCH 102/420] Add logo and loading animation to applicaton --- src/main/java/seedu/bigpp/ui/UI.java | 65 +++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 72a5454876..e5b97d030f 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -9,15 +9,58 @@ public abstract class UI { public static PrintStream out = System.out; public static PCBuilderMenu builderMenu = null; - - private static final String LOGO = "add logo here"; + + private static final String LOGO1 = + " _____ _____ _____ _____ " + + " _____ \n" + + " /\\ \\ /\\ \\ /\\ \\ " + + " /\\ \\ /\\ \\ \n" + + " /::\\ \\ /::\\ \\ /::\\ \\ " + + " /::\\ \\ /::\\ \\ \n" + + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + + " /::::\\ \\ /::::\\ \\ \n" + + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + + "/::::::\\ \\ /::::::\\ \\ \n" + + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; + private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + + "\\::::::/ / \\::::::/ / \n"; + private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + + "\\:::\\____\\ \\::::/ / \\::::/ / \n" + + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + + "\\::/____/ \\::/____/ \n" + + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + + "~~ ~~ \n" + + " \\::::::/ / \\:::\\ \\ \\::::::/ / " + + " \n" + + " \\::::/ / \\:::\\____\\ \\::::/ / " + + " \n" + + " \\::/____/ \\::/ / \\::/____/ " + + " \n" + + " ~~ \\/____/ " + + " \n" + + " " + + " \n"; private static final String DIVIDER = "==================================================="; - + private static UIState uiState = UIState.PCVIEWER; - + private static PCViewerMenu viewerMenu = new PCViewerMenu(); private static Scanner in = new Scanner(System.in); - public static UIState getUiState() { return uiState; @@ -28,8 +71,16 @@ public static String getInput() { } public static void showWelcome() { - out.println(LOGO); - out.println("Welcome to BigPP!"); + try { + out.print(LOGO1); + Thread.sleep(500); + out.print(LOGO2); + Thread.sleep(500); + out.println(LOGO3); + out.println("Welcome to BigPP!"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } } public static void updateUI(boolean isInitial) { From a8e876fd013458b6ccc052c20e6de3077a7191af Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sun, 12 Mar 2023 02:49:17 +0800 Subject: [PATCH 103/420] Change expected.txt --- text-ui-test/EXPECTED.TXT | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 3701353b82..3eebaae94c 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,26 @@ -add logo here + _____ _____ _____ _____ _____ + /\ \ /\ \ /\ \ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ +/:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | +\:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ + \::::::/ / \:::\ \ \::::::/ / + \::::/ / \:::\____\ \::::/ / + \::/____/ \::/ / \::/____/ + ~~ \/____/ + + Welcome to BigPP! =================================================== PC viewer From 3960ef2e870b9d4ee253c77cb19a06de81b88237 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 22:55:14 +0800 Subject: [PATCH 104/420] Add exception handling for unrecognized command. added do nothing command in the case where unrecognized command occurs and command is not initialized. --- src/main/java/seedu/bigpp/BigPP.java | 10 ++++++++-- .../bigpp/command/commoncommand/DoNothingCommand.java | 10 ++++++++++ .../bigpp/exceptions/UnrecognizedCommandException.java | 8 ++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 5 +++-- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java create mode 100644 src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index c33135cb33..f022586708 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.command.commoncommand.DoNothingCommand; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; @@ -26,10 +27,15 @@ public void run() { * Runs the program until the user issues the exit command. */ private void runLoopUntilExit() { - Command command; + Command command = new DoNothingCommand(); do { String userInput = UI.getInput(); - command = new Parser().parseCommand(userInput); + try { + command = new Parser().parseCommand(userInput); + } catch (Exception e) { + UI.showResult(e.getMessage()); + continue; + } String result = command.executeCommand(); UI.updateUI(false); UI.showResult(result); diff --git a/src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java new file mode 100644 index 0000000000..b98965412b --- /dev/null +++ b/src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java @@ -0,0 +1,10 @@ +package seedu.bigpp.command.commoncommand; + +import seedu.bigpp.command.Command; + +public class DoNothingCommand extends Command { + @Override + public String executeCommand() { + return ""; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java b/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java new file mode 100644 index 0000000000..b87cd3f27a --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java @@ -0,0 +1,8 @@ +package seedu.bigpp.exceptions; + +public class UnrecognizedCommandException extends PPException{ + @Override + public String getMessage() { + return "Unrecognized command"; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d416b26974..a978de3294 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -9,11 +9,12 @@ import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; +import seedu.bigpp.exceptions.UnrecognizedCommandException; import seedu.bigpp.ui.UI; public class Parser { - public Command parseCommand(String userInput) { + public Command parseCommand(String userInput) throws UnrecognizedCommandException { // try common commands first if (userInput.equals("back")) { @@ -34,7 +35,7 @@ public Command parseCommand(String userInput) { return parseBuilderCommand(userInput); default: - return null; + throw new UnrecognizedCommandException(); } } From 5e64b4fe350a1897e03822e5aafc19fcb0ca5151 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 12 Mar 2023 23:03:33 +0800 Subject: [PATCH 105/420] Fix checkstyle errors --- src/main/java/seedu/bigpp/parser/Parser.java | 30 +++++++++++-------- .../java/seedu/bigpp/parser/ParserTest.java | 9 +++--- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index a978de3294..c8f648bb62 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -17,24 +17,28 @@ public class Parser { public Command parseCommand(String userInput) throws UnrecognizedCommandException { // try common commands first - if (userInput.equals("back")) { - return new BackCommand(); - } + try { + if (userInput.equals("back")) { + return new BackCommand(); + } - if (userInput.equals("bye")) { - return new ByeCommand(); - } + if (userInput.equals("bye")) { + return new ByeCommand(); + } - // once common commands are tried, try menu specific commands - switch (UI.getUiState()) { + // once common commands are tried, try menu specific commands + switch (UI.getUiState()) { - case PCVIEWER: - return parseViewerCommand(userInput); + case PCVIEWER: + return parseViewerCommand(userInput); - case PCBUILDER: - return parseBuilderCommand(userInput); + case PCBUILDER: + return parseBuilderCommand(userInput); - default: + default: + return null; + } + } catch (Exception e) { throw new UnrecognizedCommandException(); } } diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java index 8f5697f930..2cb0a93621 100644 --- a/src/test/java/seedu/bigpp/parser/ParserTest.java +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -6,6 +6,7 @@ import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.exceptions.UnrecognizedCommandException; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -13,7 +14,7 @@ public class ParserTest { @Test - void parseCommand_backCommand_success() { + void parseCommand_backCommand_success() throws UnrecognizedCommandException { Parser parser = new Parser(); UI.setPCViewerMode(); @@ -23,7 +24,7 @@ void parseCommand_backCommand_success() { } @Test - void parseCommand_byeCommand_success() { + void parseCommand_byeCommand_success() throws UnrecognizedCommandException { Parser parser = new Parser(); Command command = parser.parseCommand("bye"); assertNotNull(command); @@ -31,7 +32,7 @@ void parseCommand_byeCommand_success() { } @Test - void parseCommand_viewerAddCommand_success() { + void parseCommand_viewerAddCommand_success() throws UnrecognizedCommandException { Parser parser = new Parser(); UI.setPCViewerMode(); @@ -41,7 +42,7 @@ void parseCommand_viewerAddCommand_success() { } @Test - void parseCommand_viewerDeleteCommand_success() { + void parseCommand_viewerDeleteCommand_success() throws UnrecognizedCommandException { Parser parser = new Parser(); UI.setPCViewerMode(); From da2abde31ce45030e96faec0cd2dced5c1bb6512 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 00:59:27 +0800 Subject: [PATCH 106/420] Add basic listing of different components --- .../BuilderListComponentCommand.java | 38 +++++++++++++++++++ .../bigpp/component/chassis/Chassis.java | 12 +++--- .../java/seedu/bigpp/component/cpu/CPU.java | 21 +++++----- .../bigpp/component/cpucooler/CPUCooler.java | 17 +++++---- .../java/seedu/bigpp/component/gpu/GPU.java | 13 ++++--- .../component/motherboard/Motherboard.java | 17 +++++---- .../java/seedu/bigpp/component/psu/PSU.java | 1 + .../java/seedu/bigpp/component/ram/RAM.java | 1 + .../bigpp/component/storage/Storage.java | 1 + .../seedu/bigpp/datastorage/DataStorage.java | 32 ++++++++++++---- src/main/java/seedu/bigpp/parser/Parser.java | 26 ++----------- 11 files changed, 112 insertions(+), 67 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java new file mode 100644 index 0000000000..78bdb92a43 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -0,0 +1,38 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.Component; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + +import javax.xml.crypto.Data; +import java.util.Map; +import java.util.ArrayList; + +public class BuilderListComponentCommand extends Command { + + public BuilderListComponentCommand(String arguments) { + setArguments(arguments); + } + + /* + * Change the budget of the current PC that the builder is working on + * + * @return the new budget of the PC + */ + @Override + public String executeCommand() { + String componentTypeString = getArguments(); + String outputString = "Here are all available " + componentTypeString; + ArrayList componentList = DataStorage.stringToComponentListMap.get(componentTypeString); + + for (Component component : componentList) { + outputString += component.toString(); + } + return outputString; + } +} + + + diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index 7011df4193..65c09cb6dc 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -3,6 +3,8 @@ import seedu.bigpp.component.Component; public class Chassis extends Component { + public static final String COMPONENT_STRING = "chassis"; + private String size; public Chassis(String name, String brand, float price, String size) { @@ -23,10 +25,10 @@ public void setSize(String size) { @Override public String toString() { return "Chassis{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", size='" + size + '\'' + - '}'; + "\nname='" + super.getName() + '\'' + + ",\n brand='" + super.getBrand() + '\'' + + ",\n price=" + super.getPrice() + + ",\n size='" + size + '\'' + + "\n}"; } } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 59ea0d2e78..e98a0ffacd 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class CPU extends Component { + public static String COMPONENT_STRING = "cpu"; private int cores; private int threads; private float baseClock; @@ -74,15 +75,15 @@ public void setSocket(String socket) { @Override public String toString() { return "CPU{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", cores=" + cores + - ", threads=" + threads + - ", baseClock=" + baseClock + - ", boostClock=" + boostClock + - ", power=" + power + - ", socket='" + socket + '\'' + - '}'; + "\nname='" + super.getName() + "\' " + + ",\n brand='" + super.getBrand() + "\' " + + ",\n price=" + super.getPrice() + + ",\n cores=" + cores + + ",\n threads=" + threads + + ",\n baseClock=" + baseClock + + ",\n boostClock=" + boostClock + + ",\n power=" + power + + ",\n socket='" + socket + '\'' + + "\n}\n"; } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java index 573217759e..c6cf507af0 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class CPUCooler extends Component { + public static final String COMPONENT_STRING = "cpu-cooler"; private int rpm; private float noise; private float power; @@ -42,13 +43,13 @@ public void setPower(float power) { @Override public String toString() { - return "CPUCooler{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", rpm=" + rpm + - ", noise=" + noise + - ", power=" + power + - '}'; + return "CPUCooler{\n" + + "\nname='" + super.getName() + '\'' + + ",\n brand='" + super.getBrand() + '\'' + + ",\n price=" + super.getPrice() + + ",\n rpm=" + rpm + + ",\n noise=" + noise + + ",\n power=" + power + + "\n}\n"; } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index 882b8e96b0..91e6ee283f 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class GPU extends Component { + public static final String COMPONENT_STRING = "gpu"; private float power; private String size; @@ -33,11 +34,11 @@ public void setSize(String size) { @Override public String toString() { return "GPU{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", power=" + power + - ", size='" + size + '\'' + - '}'; + "\nname='" + super.getName() + '\'' + + ",\n brand='" + super.getBrand() + '\'' + + ",\n price=" + super.getPrice() + + ",\n power=" + power + + ",\n size='" + size + '\'' + + "\n}\n"; } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index be4166a7e7..5ba1b17d4a 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class Motherboard extends Component { + public static final String COMPONENT_STRING = "motherboard"; private String formFactor; private String socket; private float power; @@ -42,14 +43,14 @@ public void setPower(float power) { @Override public String toString() { - return "Motherboard{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", formFactor='" + formFactor + '\'' + - ", socket='" + socket + '\'' + - ", power=" + power + - '}'; + return "Motherboard{\n" + + "\nname='" + super.getName() + '\'' + + ",\n brand='" + super.getBrand() + '\'' + + ",\n price=" + super.getPrice() + + ",\n formFactor='" + formFactor + '\'' + + ",\n socket='" + socket + '\'' + + ",\n power=" + power + + "\n}\n"; } } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index b2c191f7cd..8022871ef6 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class PSU extends Component { + public static final String COMPONENT_STRING = "psu"; private String efficiency; private String formFactor; private float power; diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java index d6496c773f..9d7f2a7046 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAM.java +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class RAM extends Component { + public static final String COMPONENT_STRING = "ram"; private int memory; private int sticks; private int speed; diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index 4dbd6f442d..f410336a81 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.Component; public class Storage extends Component { + public static final String COMPONENT_STRING = "storage"; private String type; private int size; // in GB private float power; diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index c8726e30af..b1081345c1 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -2,6 +2,9 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; + +import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; import java.io.InputStream; import java.io.InputStreamReader; @@ -25,6 +28,7 @@ import seedu.bigpp.component.storage.StorageList; public abstract class DataStorage { + public static Map stringToComponentListMap = new HashMap(); private static final String CHASSIS_PATH = "chassis.json"; private static final String CPU_PATH = "cpu.json"; private static final String CPU_COOLER_PATH = "cpucooler.json"; @@ -42,6 +46,7 @@ public abstract class DataStorage { * Loads all the components from the json files. */ public static void loadAll() { + initStringToComponentListMap(); loadChassis(); loadCPU(); loadCPUCooler(); @@ -52,6 +57,17 @@ public static void loadAll() { loadStorage(); } + public static void initStringToComponentListMap() { + stringToComponentListMap.put("cpu", new ArrayList()); + stringToComponentListMap.put("gpu", new ArrayList()); + stringToComponentListMap.put("chassis", new ArrayList()); + stringToComponentListMap.put("cpu-cooler", new ArrayList()); + stringToComponentListMap.put("psu", new ArrayList()); + stringToComponentListMap.put("ram", new ArrayList()); + stringToComponentListMap.put("storage", new ArrayList()); + stringToComponentListMap.put("motherboard", new ArrayList()); + } + /** * Loads all the chassis from the json file into ChassisList. */ @@ -69,7 +85,7 @@ public static void loadChassis() { chassisMap.forEach((name, chassis) -> chassisMap.get(name).setName(name)); // Add each chassis to the chassis list - chassisMap.forEach((name, chassis) -> ChassisList.addChassis(chassis)); + chassisMap.forEach((name, chassis) -> stringToComponentListMap.get("chassis").add(chassis)); } /** @@ -89,7 +105,7 @@ public static void loadCPU() { cpuMap.forEach((name, cpu) -> cpuMap.get(name).setName(name)); // Add each cpu to the cpu list - cpuMap.forEach((name, cpu) -> CPUList.addCPU(cpu)); + cpuMap.forEach((name, cpu) -> stringToComponentListMap.get("cpu").add(cpu)); } /** @@ -109,7 +125,7 @@ public static void loadCPUCooler() { cpuCoolerMap.forEach((name, cpuCooler) -> cpuCoolerMap.get(name).setName(name)); // Add each cpu cooler to the cpu cooler list - cpuCoolerMap.forEach((name, cpuCooler) -> CPUCoolerList.addCPUCooler(cpuCooler)); + cpuCoolerMap.forEach((name, cpuCooler) -> stringToComponentListMap.get("cpu-cooler").add(cpuCooler)); } /** @@ -129,7 +145,7 @@ public static void loadGPU() { gpuMap.forEach((name, gpu) -> gpuMap.get(name).setName(name)); // Add each gpu to the gpu list - gpuMap.forEach((name, gpu) -> GPUList.addGPU(gpu)); + gpuMap.forEach((name, gpu) -> stringToComponentListMap.get("gpu").add(gpu)); } /** @@ -149,7 +165,7 @@ public static void loadMotherboard() { motherboardMap.forEach((name, motherboard) -> motherboardMap.get(name).setName(name)); // Add each motherboard to the motherboard list - motherboardMap.forEach((name, motherboard) -> MotherboardList.addMotherboard(motherboard)); + motherboardMap.forEach((name, motherboard) -> stringToComponentListMap.get("motherboard").add(motherboard)); } /** @@ -169,7 +185,7 @@ public static void loadPSU() { psuMap.forEach((name, psu) -> psuMap.get(name).setName(name)); // Add each psu to the psu list - psuMap.forEach((name, psu) -> PSUList.addPSU(psu)); + psuMap.forEach((name, psu) -> stringToComponentListMap.get("psu").add(psu)); } /** @@ -189,7 +205,7 @@ public static void loadRAM() { ramMap.forEach((name, ram) -> ramMap.get(name).setName(name)); // Add each ram to the ram list - ramMap.forEach((name, ram) -> RAMList.addRAM(ram)); + ramMap.forEach((name, ram) -> stringToComponentListMap.get("ram").add(ram)); } /** @@ -209,7 +225,7 @@ public static void loadStorage() { storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); // Add each ram to the ram list - storageMap.forEach((name, storage) -> StorageList.addStorage(storage)); + storageMap.forEach((name, storage) -> stringToComponentListMap.get("storage").add(storage)); } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d416b26974..5613d65a14 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; @@ -14,28 +15,7 @@ public class Parser { public Command parseCommand(String userInput) { - - // try common commands first - if (userInput.equals("back")) { - return new BackCommand(); - } - - if (userInput.equals("bye")) { - return new ByeCommand(); - } - - // once common commands are tried, try menu specific commands - switch (UI.getUiState()) { - - case PCVIEWER: - return parseViewerCommand(userInput); - - case PCBUILDER: - return parseBuilderCommand(userInput); - - default: - return null; - } + return parseBuilderCommand(userInput); } private Command parseViewerCommand(String userInput) { @@ -64,6 +44,8 @@ private Command parseBuilderCommand(String userInput) { commandWord = commandWord.toLowerCase(); switch (commandWord) { + case "list": + return new BuilderListComponentCommand(arguments); case "name": return new BuilderEditNameCommand(arguments); case "budget": From c8ad830fedbadc45f78a2f9ed24ef08e583d07dd Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 13 Mar 2023 01:02:09 +0800 Subject: [PATCH 107/420] Add exception handling for unrecognized commands and builder commands --- src/main/java/seedu/bigpp/BigPP.java | 10 +--- .../BuilderEditBudgetCommand.java | 8 +++ .../BuilderEditNameCommand.java | 3 + ...gCommand.java => UnrecognizedCommand.java} | 4 +- .../UnrecognizedCommandException.java | 8 --- src/main/java/seedu/bigpp/parser/Parser.java | 60 +++++++++---------- .../java/seedu/bigpp/parser/ParserTest.java | 9 ++- 7 files changed, 48 insertions(+), 54 deletions(-) rename src/main/java/seedu/bigpp/command/commoncommand/{DoNothingCommand.java => UnrecognizedCommand.java} (60%) delete mode 100644 src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index f022586708..c33135cb33 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -2,7 +2,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; -import seedu.bigpp.command.commoncommand.DoNothingCommand; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; @@ -27,15 +26,10 @@ public void run() { * Runs the program until the user issues the exit command. */ private void runLoopUntilExit() { - Command command = new DoNothingCommand(); + Command command; do { String userInput = UI.getInput(); - try { - command = new Parser().parseCommand(userInput); - } catch (Exception e) { - UI.showResult(e.getMessage()); - continue; - } + command = new Parser().parseCommand(userInput); String result = command.executeCommand(); UI.updateUI(false); UI.showResult(result); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 66dad07d6d..d1e10761c5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -17,7 +17,15 @@ public BuilderEditBudgetCommand(String arguments) { */ @Override public String executeCommand() { + try { + Integer.parseInt(super.getArguments()); + } catch (NumberFormatException e) { + return "Please enter a valid budget as an integer"; + } int budget = Integer.parseInt(super.getArguments()); + if (budget <= 0) { + return "Please enter a valid budget that is greater than 0"; + } int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex).setBudget(budget); return "Current build budget is now: " + budget; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 63d46a6dd2..3b9be95a94 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -18,6 +18,9 @@ public BuilderEditNameCommand(String arguments) { @Override public String executeCommand() { String name = super.getArguments(); + if (name.equals("")) { + return "Please enter a name for your PC"; + } int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex).setName(name); return "Current build name is now: " + name; diff --git a/src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java similarity index 60% rename from src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java rename to src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java index b98965412b..4d2301fb4f 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/DoNothingCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java @@ -2,9 +2,9 @@ import seedu.bigpp.command.Command; -public class DoNothingCommand extends Command { +public class UnrecognizedCommand extends Command { @Override public String executeCommand() { - return ""; + return "Unrecognised command."; } } diff --git a/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java b/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java deleted file mode 100644 index b87cd3f27a..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/UnrecognizedCommandException.java +++ /dev/null @@ -1,8 +0,0 @@ -package seedu.bigpp.exceptions; - -public class UnrecognizedCommandException extends PPException{ - @Override - public String getMessage() { - return "Unrecognized command"; - } -} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index c8f648bb62..09c7de9a11 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -5,49 +5,51 @@ import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; +import seedu.bigpp.command.commoncommand.UnrecognizedCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; -import seedu.bigpp.exceptions.UnrecognizedCommandException; import seedu.bigpp.ui.UI; public class Parser { - public Command parseCommand(String userInput) throws UnrecognizedCommandException { + public Command parseCommand(String userInput) { + + String[] inputList = userInput.split(" ", 2); + String arguments = ""; + + if (inputList.length == 2) { + arguments = inputList[1]; + } + String commandWord = inputList[0]; + commandWord = commandWord.toLowerCase(); // try common commands first - try { - if (userInput.equals("back")) { - return new BackCommand(); - } + if (userInput.equals("back")) { + return new BackCommand(); + } - if (userInput.equals("bye")) { - return new ByeCommand(); - } + if (userInput.equals("bye")) { + return new ByeCommand(); + } - // once common commands are tried, try menu specific commands - switch (UI.getUiState()) { + // once common commands are tried, try menu specific commands + switch (UI.getUiState()) { - case PCVIEWER: - return parseViewerCommand(userInput); + case PCVIEWER: + return parseViewerCommand(commandWord, arguments); - case PCBUILDER: - return parseBuilderCommand(userInput); + case PCBUILDER: + return parseBuilderCommand(commandWord, arguments); - default: - return null; - } - } catch (Exception e) { - throw new UnrecognizedCommandException(); + default: + return new UnrecognizedCommand(); } } - private Command parseViewerCommand(String userInput) { - String commandWord = userInput.split(" ")[0]; - String arguments = userInput.split(" ")[1]; + private Command parseViewerCommand(String commandWord, String arguments) { - commandWord = commandWord.toLowerCase(); switch (commandWord) { case "add": return new ViewerAddCommand(arguments); @@ -58,15 +60,11 @@ private Command parseViewerCommand(String userInput) { case "edit": return new ViewerEditCommand(arguments); default: - return null; + return new UnrecognizedCommand(); } } - private Command parseBuilderCommand(String userInput) { - - String commandWord = userInput.split(" ")[0]; - String arguments = userInput.split(" ")[1]; - commandWord = commandWord.toLowerCase(); + private Command parseBuilderCommand(String commandWord, String arguments) { switch (commandWord) { case "name": @@ -74,7 +72,7 @@ private Command parseBuilderCommand(String userInput) { case "budget": return new BuilderEditBudgetCommand(arguments); default: - return null; + return new UnrecognizedCommand(); } } diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java index 2cb0a93621..8f5697f930 100644 --- a/src/test/java/seedu/bigpp/parser/ParserTest.java +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -6,7 +6,6 @@ import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; -import seedu.bigpp.exceptions.UnrecognizedCommandException; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -14,7 +13,7 @@ public class ParserTest { @Test - void parseCommand_backCommand_success() throws UnrecognizedCommandException { + void parseCommand_backCommand_success() { Parser parser = new Parser(); UI.setPCViewerMode(); @@ -24,7 +23,7 @@ void parseCommand_backCommand_success() throws UnrecognizedCommandException { } @Test - void parseCommand_byeCommand_success() throws UnrecognizedCommandException { + void parseCommand_byeCommand_success() { Parser parser = new Parser(); Command command = parser.parseCommand("bye"); assertNotNull(command); @@ -32,7 +31,7 @@ void parseCommand_byeCommand_success() throws UnrecognizedCommandException { } @Test - void parseCommand_viewerAddCommand_success() throws UnrecognizedCommandException { + void parseCommand_viewerAddCommand_success() { Parser parser = new Parser(); UI.setPCViewerMode(); @@ -42,7 +41,7 @@ void parseCommand_viewerAddCommand_success() throws UnrecognizedCommandException } @Test - void parseCommand_viewerDeleteCommand_success() throws UnrecognizedCommandException { + void parseCommand_viewerDeleteCommand_success() { Parser parser = new Parser(); UI.setPCViewerMode(); From bdf94af79edf65ffdcde5af88556fab4b9c61f86 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 01:11:42 +0800 Subject: [PATCH 108/420] Fix formatting for list command --- .../BuilderListComponentCommand.java | 7 ++++--- .../java/seedu/bigpp/component/cpu/CPU.java | 20 +++++++++---------- .../bigpp/component/cpucooler/CPUCooler.java | 14 ++++++------- .../java/seedu/bigpp/component/gpu/GPU.java | 12 +++++------ .../component/motherboard/Motherboard.java | 14 ++++++------- .../java/seedu/bigpp/component/psu/PSU.java | 14 ++++++------- .../java/seedu/bigpp/component/ram/RAM.java | 16 +++++++-------- .../bigpp/component/storage/Storage.java | 14 ++++++------- 8 files changed, 49 insertions(+), 62 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 78bdb92a43..27debc64a6 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -24,11 +24,12 @@ public BuilderListComponentCommand(String arguments) { @Override public String executeCommand() { String componentTypeString = getArguments(); - String outputString = "Here are all available " + componentTypeString; + String outputString = "Here are all available components of type \'" + componentTypeString + "\': \n"; ArrayList componentList = DataStorage.stringToComponentListMap.get(componentTypeString); - + int componentNumber = 1; for (Component component : componentList) { - outputString += component.toString(); + outputString += componentNumber + "." + "\n" + component.toString() + "\n" + "================\n"; + componentNumber += 1; } return outputString; } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index e98a0ffacd..fdebc2a15a 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -74,16 +74,14 @@ public void setSocket(String socket) { @Override public String toString() { - return "CPU{" + - "\nname='" + super.getName() + "\' " + - ",\n brand='" + super.getBrand() + "\' " + - ",\n price=" + super.getPrice() + - ",\n cores=" + cores + - ",\n threads=" + threads + - ",\n baseClock=" + baseClock + - ",\n boostClock=" + boostClock + - ",\n power=" + power + - ",\n socket='" + socket + '\'' + - "\n}\n"; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nCORES: " + cores + + "\nTHREADS: " + threads + + "\nBASECLOCK: " + baseClock + + "\nBOOSTCLOCK: " + boostClock + + "\nPOWER: " + power + + "\nSOCKET: " + socket; } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java index c6cf507af0..06e21d0474 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -43,13 +43,11 @@ public void setPower(float power) { @Override public String toString() { - return "CPUCooler{\n" + - "\nname='" + super.getName() + '\'' + - ",\n brand='" + super.getBrand() + '\'' + - ",\n price=" + super.getPrice() + - ",\n rpm=" + rpm + - ",\n noise=" + noise + - ",\n power=" + power + - "\n}\n"; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nRPM: " + rpm + + "\nNOISE: " + noise + + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index 91e6ee283f..0945fea644 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -33,12 +33,10 @@ public void setSize(String size) { @Override public String toString() { - return "GPU{" + - "\nname='" + super.getName() + '\'' + - ",\n brand='" + super.getBrand() + '\'' + - ",\n price=" + super.getPrice() + - ",\n power=" + power + - ",\n size='" + size + '\'' + - "\n}\n"; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nPOWER: " + power + + "\nSIZE: " + size; } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index 5ba1b17d4a..b852c25e4e 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -43,14 +43,12 @@ public void setPower(float power) { @Override public String toString() { - return "Motherboard{\n" + - "\nname='" + super.getName() + '\'' + - ",\n brand='" + super.getBrand() + '\'' + - ",\n price=" + super.getPrice() + - ",\n formFactor='" + formFactor + '\'' + - ",\n socket='" + socket + '\'' + - ",\n power=" + power + - "\n}\n"; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nFORMFACTOR: " + formFactor + + "\nSOCKET: " + socket + + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index 8022871ef6..ea83d4dc08 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -43,13 +43,11 @@ public void setPower(float power) { @Override public String toString() { - return "PSU{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", efficiency='" + efficiency + '\'' + - ", formFactor='" + formFactor + '\'' + - ", power=" + power + - '}'; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nEFFICIENCY: " + efficiency + + "\nFORMFACTOR: " + formFactor + + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java index 9d7f2a7046..7be6c71cf0 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAM.java +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -53,14 +53,12 @@ public void setPower(float power) { @Override public String toString() { - return "RAM{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", memory=" + memory + - ", sticks=" + sticks + - ", speed=" + speed + - ", power=" + power + - '}'; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nMEMORY: " + memory + + "\nSTICKS: " + sticks + + "\nSPEED: " + speed + + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index f410336a81..839cc340ee 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -44,13 +44,11 @@ public void setPower(float power) { @Override public String toString() { - return "Storage{" + - "name='" + super.getName() + '\'' + - ", brand='" + super.getBrand() + '\'' + - ", price=" + super.getPrice() + - ", type='" + type + '\'' + - ", size=" + size + - ", power=" + power + - '}'; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nTYPE: " + type + '\'' + + "\nSIZE: " + size + + "\nPOWER: " + power; } } From de313faf2c1a873439ed01e3bef7c4dd4f28cc0b Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 01:14:01 +0800 Subject: [PATCH 109/420] Fix checkstyle errors --- .../buildercommand/BuilderListComponentCommand.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 27debc64a6..a4501e4ce5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -3,14 +3,9 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.Component; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.pc.PCList; -import seedu.bigpp.ui.UI; - -import javax.xml.crypto.Data; -import java.util.Map; import java.util.ArrayList; -public class BuilderListComponentCommand extends Command { +public class BuilderListComponentCommand extends Command { public BuilderListComponentCommand(String arguments) { setArguments(arguments); @@ -24,7 +19,7 @@ public BuilderListComponentCommand(String arguments) { @Override public String executeCommand() { String componentTypeString = getArguments(); - String outputString = "Here are all available components of type \'" + componentTypeString + "\': \n"; + String outputString = "Here are all available components of type '" + componentTypeString + "': \n"; ArrayList componentList = DataStorage.stringToComponentListMap.get(componentTypeString); int componentNumber = 1; for (Component component : componentList) { From 5749f83ecc7cda9e335aea41052a7b12e91de1cf Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 01:19:40 +0800 Subject: [PATCH 110/420] Fix more checkstyle errors --- src/main/java/seedu/bigpp/datastorage/DataStorage.java | 10 +--------- src/main/java/seedu/bigpp/parser/Parser.java | 3 --- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index b1081345c1..ca390af0b9 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -11,21 +11,13 @@ import java.io.BufferedReader; import seedu.bigpp.component.chassis.Chassis; -import seedu.bigpp.component.chassis.ChassisList; import seedu.bigpp.component.cpu.CPU; -import seedu.bigpp.component.cpu.CPUList; import seedu.bigpp.component.cpucooler.CPUCooler; -import seedu.bigpp.component.cpucooler.CPUCoolerList; import seedu.bigpp.component.gpu.GPU; -import seedu.bigpp.component.gpu.GPUList; import seedu.bigpp.component.motherboard.Motherboard; -import seedu.bigpp.component.motherboard.MotherboardList; import seedu.bigpp.component.psu.PSU; -import seedu.bigpp.component.psu.PSUList; import seedu.bigpp.component.ram.RAM; -import seedu.bigpp.component.ram.RAMList; import seedu.bigpp.component.storage.Storage; -import seedu.bigpp.component.storage.StorageList; public abstract class DataStorage { public static Map stringToComponentListMap = new HashMap(); @@ -38,7 +30,7 @@ public abstract class DataStorage { private static final String RAM_PATH = "ram.json"; private static final String STORAGE_PATH = "storage.json"; - private static final String PREBUILT_PATH = "prebuilt.json"; + //private static final String PREBUILT_PATH = "prebuilt.json"; private static final Gson GSON = new Gson(); diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 5613d65a14..b64b1fde70 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -4,13 +4,10 @@ import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; -import seedu.bigpp.command.commoncommand.BackCommand; -import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; -import seedu.bigpp.ui.UI; public class Parser { From 7f2d9ffa905bdbf7cac7d343ea22f1f074a59ea0 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 01:29:42 +0800 Subject: [PATCH 111/420] Fix bugs in Parser.java --- src/main/java/seedu/bigpp/parser/Parser.java | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index b64b1fde70..65d2bcdcdf 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -4,15 +4,39 @@ import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; +import seedu.bigpp.command.commoncommand.BackCommand; +import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; +import seedu.bigpp.ui.UI; public class Parser { public Command parseCommand(String userInput) { - return parseBuilderCommand(userInput); + + // try common commands first + if (userInput.equals("back")) { + return new BackCommand(); + } + + if (userInput.equals("bye")) { + return new ByeCommand(); + } + + // once common commands are tried, try menu specific commands + switch (UI.getUiState()) { + + case PCVIEWER: + return parseViewerCommand(userInput); + + case PCBUILDER: + return parseBuilderCommand(userInput); + + default: + return null; + } } private Command parseViewerCommand(String userInput) { @@ -50,6 +74,5 @@ private Command parseBuilderCommand(String userInput) { default: return null; } - } } From b827cab87d77565e0d967fcfb54586d0bffbe814 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 01:40:43 +0800 Subject: [PATCH 112/420] Change arraylists to separate classes in DataStorage --- .../seedu/bigpp/component/ComponentList.java | 6 +++++ .../bigpp/component/chassis/ChassisList.java | 13 +++------- .../seedu/bigpp/component/cpu/CPUList.java | 13 ++-------- .../component/cpucooler/CPUCoolerList.java | 13 ++-------- .../seedu/bigpp/component/gpu/GPUList.java | 13 ++-------- .../motherboard/MotherboardList.java | 13 ++-------- .../seedu/bigpp/component/psu/PSUList.java | 13 ++-------- .../seedu/bigpp/component/ram/RAMList.java | 13 ++-------- .../bigpp/component/storage/StorageList.java | 13 ++-------- .../seedu/bigpp/datastorage/DataStorage.java | 24 ++++++++++++------- .../BuilderListComponentCommandTest.java | 13 ++++++++++ 11 files changed, 52 insertions(+), 95 deletions(-) create mode 100644 src/main/java/seedu/bigpp/component/ComponentList.java create mode 100644 src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java new file mode 100644 index 0000000000..bc28834aa2 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -0,0 +1,6 @@ +package seedu.bigpp.component; + +import java.util.ArrayList; + +public class ComponentList extends ArrayList { +} diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java index ddc9c79a28..512483d6da 100644 --- a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -1,15 +1,8 @@ package seedu.bigpp.component.chassis; -import java.util.ArrayList; - -public abstract class ChassisList { - private static ArrayList chassisList = new ArrayList<>(); +import seedu.bigpp.component.ComponentList; - public static void addChassis(Chassis chassis) { - chassisList.add(chassis); - } +import java.util.ArrayList; - public static ArrayList getChassisList() { - return chassisList; - } +public class ChassisList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java index 3bd462d42d..10146d7d8c 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPUList.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -1,16 +1,7 @@ package seedu.bigpp.component.cpu; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class CPUList { - private static ArrayList cpuList = new ArrayList<>(); - - public static void addCPU(CPU cpu) { - cpuList.add(cpu); - } - - public static ArrayList getCpuList() { - return cpuList; - } +public class CPUList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java index 6376e5b7f2..bc05790f69 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCoolerList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.cpucooler; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class CPUCoolerList { - private static ArrayList cpuCoolerList = new ArrayList<>(); - - public static void addCPUCooler(CPUCooler cpuCooler) { - cpuCoolerList.add(cpuCooler); - } - - public static ArrayList getCPUCoolerList() { - return cpuCoolerList; - } +public class CPUCoolerList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPUList.java b/src/main/java/seedu/bigpp/component/gpu/GPUList.java index 275cfcf8f0..d8c663e57e 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPUList.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPUList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.gpu; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class GPUList { - private static ArrayList gpuList = new ArrayList<>(); - - public static void addGPU(GPU gpu) { - gpuList.add(gpu); - } - - public static ArrayList getGpuList() { - return gpuList; - } +public class GPUList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java index 88c3532d61..1b01247871 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java +++ b/src/main/java/seedu/bigpp/component/motherboard/MotherboardList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.motherboard; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class MotherboardList { - private static ArrayList motherboardList = new ArrayList<>(); - - public static void addMotherboard(Motherboard motherboard) { - motherboardList.add(motherboard); - } - - public static ArrayList getMotherboardList() { - return motherboardList; - } +public class MotherboardList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/psu/PSUList.java b/src/main/java/seedu/bigpp/component/psu/PSUList.java index 048541628a..a78b81a02b 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSUList.java +++ b/src/main/java/seedu/bigpp/component/psu/PSUList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.psu; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class PSUList { - private static ArrayList psuList = new ArrayList<>(); - - public static void addPSU(PSU psu) { - psuList.add(psu); - } - - public static ArrayList getPsuList() { - return psuList; - } +public class PSUList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/ram/RAMList.java b/src/main/java/seedu/bigpp/component/ram/RAMList.java index 0992c18a88..7854b7232f 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAMList.java +++ b/src/main/java/seedu/bigpp/component/ram/RAMList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.ram; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class RAMList { - private static ArrayList ramList = new ArrayList<>(); - - public static void addRAM(RAM ram) { - ramList.add(ram); - } - - public static ArrayList getRamList() { - return ramList; - } +public class RAMList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/component/storage/StorageList.java b/src/main/java/seedu/bigpp/component/storage/StorageList.java index c8114f80e3..15748ee348 100644 --- a/src/main/java/seedu/bigpp/component/storage/StorageList.java +++ b/src/main/java/seedu/bigpp/component/storage/StorageList.java @@ -1,15 +1,6 @@ package seedu.bigpp.component.storage; -import java.util.ArrayList; +import seedu.bigpp.component.ComponentList; -public abstract class StorageList { - private static ArrayList storageList = new ArrayList<>(); - - public static void addStorage(Storage storage) { - storageList.add(storage); - } - - public static ArrayList getStorageList() { - return storageList; - } +public class StorageList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index ca390af0b9..2c54b67dc8 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -11,13 +11,21 @@ import java.io.BufferedReader; import seedu.bigpp.component.chassis.Chassis; +import seedu.bigpp.component.chassis.ChassisList; import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.component.cpu.CPUList; import seedu.bigpp.component.cpucooler.CPUCooler; +import seedu.bigpp.component.cpucooler.CPUCoolerList; import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.component.gpu.GPUList; import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.component.motherboard.MotherboardList; import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.component.psu.PSUList; import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.component.ram.RAMList; import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.component.storage.StorageList; public abstract class DataStorage { public static Map stringToComponentListMap = new HashMap(); @@ -50,14 +58,14 @@ public static void loadAll() { } public static void initStringToComponentListMap() { - stringToComponentListMap.put("cpu", new ArrayList()); - stringToComponentListMap.put("gpu", new ArrayList()); - stringToComponentListMap.put("chassis", new ArrayList()); - stringToComponentListMap.put("cpu-cooler", new ArrayList()); - stringToComponentListMap.put("psu", new ArrayList()); - stringToComponentListMap.put("ram", new ArrayList()); - stringToComponentListMap.put("storage", new ArrayList()); - stringToComponentListMap.put("motherboard", new ArrayList()); + stringToComponentListMap.put("cpu", new CPUList()); + stringToComponentListMap.put("gpu", new GPUList()); + stringToComponentListMap.put("chassis", new ChassisList()); + stringToComponentListMap.put("cpu-cooler", new CPUCoolerList()); + stringToComponentListMap.put("psu", new PSUList()); + stringToComponentListMap.put("ram", new RAMList()); + stringToComponentListMap.put("storage", new StorageList()); + stringToComponentListMap.put("motherboard", new MotherboardList()); } /** diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java new file mode 100644 index 0000000000..7cfba52393 --- /dev/null +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -0,0 +1,13 @@ +package seedu.bigpp.command.buildercommand; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BuilderListComponentCommandTest { + @Test + public void executeCommand_listComponentCommand_success() { + String editNameCommandResult = new BuilderListComponentCommand("cpu").executeCommand(); + assertEquals("Current build name is now: PC2", editNameCommandResult); + } +} From 7bbb16e29b7d66f30beac946e6143b999335101b Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 13 Mar 2023 02:17:37 +0800 Subject: [PATCH 113/420] Add new Builder exceptions --- src/main/java/seedu/bigpp/BigPP.java | 8 ++++++- .../java/seedu/bigpp/command/Command.java | 3 ++- .../BuilderEditBudgetCommand.java | 23 +++++++++++++------ .../BuilderEditNameCommand.java | 6 +++-- .../BuilderInvalidNumberBudgetException.java | 10 ++++++++ .../BuilderInvalidTypeBudgetException.java | 10 ++++++++ .../BuilderMissingBudgetException.java | 11 +++++++++ .../BuilderMissingNameException.java | 11 +++++++++ .../BuilderEditBudgetCommandTest.java | 3 ++- .../BuilderEditNameCommandTest.java | 3 ++- 10 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index c33135cb33..750e7a4b13 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -5,6 +5,7 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; +import seedu.bigpp.exceptions.PPException; public class BigPP { @@ -30,7 +31,12 @@ private void runLoopUntilExit() { do { String userInput = UI.getInput(); command = new Parser().parseCommand(userInput); - String result = command.executeCommand(); + String result = ""; + try { + result = command.executeCommand(); + } catch (PPException e) { + result = e.getMessage(); + } UI.updateUI(false); UI.showResult(result); } while (!(command instanceof ByeCommand)); diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java index 46dd5346f8..c3329f68dc 100644 --- a/src/main/java/seedu/bigpp/command/Command.java +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -1,10 +1,11 @@ package seedu.bigpp.command; +import seedu.bigpp.exceptions.PPException; public abstract class Command { private String arguments; - public abstract String executeCommand(); + public abstract String executeCommand() throws PPException; public void setArguments(String arguments) { this.arguments = arguments; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index d1e10761c5..e099670f99 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -1,11 +1,15 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberBudgetException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class BuilderEditBudgetCommand extends Command { - + public BuilderEditBudgetCommand(String arguments) { super.setArguments(arguments); } @@ -16,16 +20,21 @@ public BuilderEditBudgetCommand(String arguments) { * @return the new budget of the PC */ @Override - public String executeCommand() { - try { - Integer.parseInt(super.getArguments()); - } catch (NumberFormatException e) { - return "Please enter a valid budget as an integer"; + public String executeCommand() throws PPException { + String argument = super.getArguments(); + if (argument.equals("")) { + throw new BuilderMissingBudgetException(); + } + if (argument.matches(".*\\D.*")) { + throw new BuilderInvalidTypeBudgetException(); } + int budget = Integer.parseInt(super.getArguments()); + if (budget <= 0) { - return "Please enter a valid budget that is greater than 0"; + throw new BuilderInvalidNumberBudgetException(); } + int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex).setBudget(budget); return "Current build budget is now: " + budget; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 3b9be95a94..ba99f067db 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -3,6 +3,8 @@ import seedu.bigpp.command.Command; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; public class BuilderEditNameCommand extends Command { @@ -16,10 +18,10 @@ public BuilderEditNameCommand(String arguments) { * @return the new name of the PC */ @Override - public String executeCommand() { + public String executeCommand() throws PPException{ String name = super.getArguments(); if (name.equals("")) { - return "Please enter a name for your PC"; + throw new BuilderMissingNameException(); } int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex).setName(name); diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java new file mode 100644 index 0000000000..f4b2c8ace3 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidNumberBudgetException extends PPException { + @Override + public String getMessage() { + return "Please enter a budget that is greater than 0"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java new file mode 100644 index 0000000000..d27b0b46f5 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidTypeBudgetException extends PPException { + @Override + public String getMessage() { + return "Please enter a budget that an integer"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java new file mode 100644 index 0000000000..805fedb13a --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java @@ -0,0 +1,11 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingBudgetException extends PPException { + + @Override + public String getMessage() { + return "Please enter a budget"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java new file mode 100644 index 0000000000..ef0e1cd71e --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java @@ -0,0 +1,11 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingNameException extends PPException { + + @Override + public String getMessage() { + return "Please enter a name"; + } +} diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java index 7e5abdce29..7c882c746f 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -10,7 +11,7 @@ public class BuilderEditBudgetCommandTest { @Test - public void executeCommand_editBudgetCommand_success() { + public void executeCommand_editBudgetCommand_success() throws PPException{ PC pc = new PC("PC1", true); PCList.addPC(pc); UI.setPCBuilderMode(0); diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java index 434fa133d2..d2e359d687 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -10,7 +11,7 @@ public class BuilderEditNameCommandTest { @Test - public void executeCommand_editNameCommand_success() { + public void executeCommand_editNameCommand_success() throws PPException{ PC pc = new PC("PC1", true); PCList.addPC(pc); UI.setPCBuilderMode(0); From 47623dec40706d5fab9b1d851135c07e38f948cb Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 13 Mar 2023 14:19:28 +0800 Subject: [PATCH 114/420] Add jUnit test for listComponentCommand --- .../BuilderListComponentCommand.java | 2 + .../bigpp/component/chassis/ChassisList.java | 2 - .../BuilderListComponentCommandTest.java | 139 +++++++++++++++++- 3 files changed, 139 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index a4501e4ce5..04c833f2fb 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -26,6 +26,8 @@ public String executeCommand() { outputString += componentNumber + "." + "\n" + component.toString() + "\n" + "================\n"; componentNumber += 1; } + System.out.println(outputString); + return outputString; } } diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java index 512483d6da..cc6dfcc21a 100644 --- a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -2,7 +2,5 @@ import seedu.bigpp.component.ComponentList; -import java.util.ArrayList; - public class ChassisList extends ComponentList { } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 7cfba52393..9f1bb5734b 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -1,13 +1,148 @@ package seedu.bigpp.command.buildercommand; import org.junit.jupiter.api.Test; +import seedu.bigpp.datastorage.DataStorage; import static org.junit.jupiter.api.Assertions.assertEquals; public class BuilderListComponentCommandTest { + private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + + "1.\n" + + "NAME: Intel core i3-10100\n" + + "BRAND: Intel\n" + + "PRICE: 99.5\n" + + "CORES: 4\n" + + "THREADS: 8\n" + + "BASECLOCK: 3.6\n" + + "BOOSTCLOCK: 4.3\n" + + "POWER: 65.0\n" + + "SOCKET: LGA1200\n" + + "================\n" + + "2.\n" + + "NAME: Intel core i5-10600k\n" + + "BRAND: Intel\n" + + "PRICE: 182.47\n" + + "CORES: 6\n" + + "THREADS: 12\n" + + "BASECLOCK: 4.1\n" + + "BOOSTCLOCK: 4.8\n" + + "POWER: 125.0\n" + + "SOCKET: LGA1200\n" + + "================\n" + + "3.\n" + + "NAME: Intel core i7-10700k\n" + + "BRAND: Intel\n" + + "PRICE: 269.95\n" + + "CORES: 8\n" + + "THREADS: 16\n" + + "BASECLOCK: 3.8\n" + + "BOOSTCLOCK: 5.1\n" + + "POWER: 125.0\n" + + "SOCKET: LGA1200\n" + + "================\n" + + "4.\n" + + "NAME: Intel core i3-12100f\n" + + "BRAND: Intel\n" + + "PRICE: 106.93\n" + + "CORES: 4\n" + + "THREADS: 8\n" + + "BASECLOCK: 3.3\n" + + "BOOSTCLOCK: 4.3\n" + + "POWER: 58.0\n" + + "SOCKET: LGA1700\n" + + "================\n" + + "5.\n" + + "NAME: Intel core i5-12600k\n" + + "BRAND: Intel\n" + + "PRICE: 213.82\n" + + "CORES: 10\n" + + "THREADS: 20\n" + + "BASECLOCK: 3.7\n" + + "BOOSTCLOCK: 4.9\n" + + "POWER: 125.0\n" + + "SOCKET: LGA1700\n" + + "================\n" + + "6.\n" + + "NAME: Intel core i7-12700k\n" + + "BRAND: Intel\n" + + "PRICE: 312.88\n" + + "CORES: 12\n" + + "THREADS: 24\n" + + "BASECLOCK: 3.6\n" + + "BOOSTCLOCK: 5.0\n" + + "POWER: 125.0\n" + + "SOCKET: LGA1700\n" + + "================\n" + + "7.\n" + + "NAME: AMD Ryzen 3 3200G\n" + + "BRAND: AMD\n" + + "PRICE: 97.5\n" + + "CORES: 4\n" + + "THREADS: 4\n" + + "BASECLOCK: 3.6\n" + + "BOOSTCLOCK: 4.0\n" + + "POWER: 65.0\n" + + "SOCKET: AM4\n" + + "================\n" + + "8.\n" + + "NAME: AMD Ryzen 5 5600X\n" + + "BRAND: AMD\n" + + "PRICE: 156.64\n" + + "CORES: 6\n" + + "THREADS: 12\n" + + "BASECLOCK: 3.7\n" + + "BOOSTCLOCK: 4.6\n" + + "POWER: 65.0\n" + + "SOCKET: AM4\n" + + "================\n" + + "9.\n" + + "NAME: AMD Ryzen 7 5800X\n" + + "BRAND: AMD\n" + + "PRICE: 211.33\n" + + "CORES: 8\n" + + "THREADS: 16\n" + + "BASECLOCK: 3.8\n" + + "BOOSTCLOCK: 4.7\n" + + "POWER: 105.0\n" + + "SOCKET: AM4\n" + + "================\n" + + "10.\n" + + "NAME: AMD Ryzen 5 7600X\n" + + "BRAND: AMD\n" + + "PRICE: 240.86\n" + + "CORES: 6\n" + + "THREADS: 12\n" + + "BASECLOCK: 4.7\n" + + "BOOSTCLOCK: 5.3\n" + + "POWER: 105.0\n" + + "SOCKET: AM5\n" + + "================\n" + + "11.\n" + + "NAME: AMD Ryzen 7 7700X\n" + + "BRAND: AMD\n" + + "PRICE: 341.29\n" + + "CORES: 8\n" + + "THREADS: 16\n" + + "BASECLOCK: 4.5\n" + + "BOOSTCLOCK: 5.4\n" + + "POWER: 105.0\n" + + "SOCKET: AM5\n" + + "================\n" + + "12.\n" + + "NAME: AMD Ryzen 9 7950X\n" + + "BRAND: AMD\n" + + "PRICE: 589.0\n" + + "CORES: 16\n" + + "THREADS: 32\n" + + "BASECLOCK: 4.5\n" + + "BOOSTCLOCK: 5.7\n" + + "POWER: 170.0\n" + + "SOCKET: AM5\n" + + "================\n"; @Test public void executeCommand_listComponentCommand_success() { - String editNameCommandResult = new BuilderListComponentCommand("cpu").executeCommand(); - assertEquals("Current build name is now: PC2", editNameCommandResult); + DataStorage.loadAll(); + String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(); + assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } } From 3c787f3e0c7c8fc266735ce676d863c56d2ed014 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 14 Mar 2023 00:30:28 +0800 Subject: [PATCH 115/420] -Add functionality to change components of a PC in the builder. -Do exception handling for commands to select components. -Update viewComponents() method in PC class to show chassis. --- src/main/java/seedu/bigpp/BigPP.java | 2 +- .../BuilderListComponentCommand.java | 2 - .../buildercommand/BuilderSelectCommand.java | 59 +++++++++++++++++++ .../java/seedu/bigpp/component/cpu/CPU.java | 2 +- .../PPIndexOutOfBoundsException.java | 8 +++ .../BuilderIncorrectComponentException.java | 10 ++++ .../BuilderMissingIndexException.java | 10 ++++ .../BuilderMissingSelectException.java | 10 ++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 + src/main/java/seedu/bigpp/pc/PC.java | 39 ++++++++++-- 10 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java create mode 100644 src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 750e7a4b13..0590ffd5e7 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -3,9 +3,9 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; -import seedu.bigpp.exceptions.PPException; public class BigPP { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 04c833f2fb..a4501e4ce5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -26,8 +26,6 @@ public String executeCommand() { outputString += componentNumber + "." + "\n" + component.toString() + "\n" + "================\n"; componentNumber += 1; } - System.out.println(outputString); - return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java new file mode 100644 index 0000000000..674af935eb --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -0,0 +1,59 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.Component; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + +import static seedu.bigpp.datastorage.DataStorage.stringToComponentListMap; + +public class BuilderSelectCommand extends Command { + + public BuilderSelectCommand(String arguments) { + setArguments(arguments); + } + + /* + * Change the Component of the PC that the builder is working on + * + * @return Added Component message + */ + @Override + public String executeCommand() throws PPException { + String inputString = getArguments(); + //throw exception if no component is selected eg. "select" + if (inputString.equals("")) { + throw new BuilderMissingSelectException(); + } + String[] inputArray = inputString.split(" ", 2); + String componentTypeString = inputArray[0]; + componentTypeString = componentTypeString.toLowerCase(); + + //throw exception if component type is not valid eg. "select jfk" + if (!stringToComponentListMap.containsKey(componentTypeString)) { + throw new BuilderIncorrectComponentException(); + } + + int componentIndex; + if (inputArray.length == 2) { + componentIndex = Integer.parseInt(inputArray[1]) - 1; + } else { + //throw exception if no index is selected eg. "select cpu" + throw new BuilderMissingIndexException(); + } + if (componentIndex < 0 || componentIndex >= stringToComponentListMap.get(inputArray[0]).size()) { + //throw exception if index is out of bounds eg. "select cpu 100" + throw new PPIndexOutOfBoundsException(); + } + + int pcIndex = UI.builderMenu.getPCIndex(); + PCList.getPC(pcIndex) + .setComponent((Component) stringToComponentListMap.get(componentTypeString).get(componentIndex)); + return "Component added!"; + } +} diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index fdebc2a15a..98bdc4504e 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -3,7 +3,7 @@ import seedu.bigpp.component.Component; public class CPU extends Component { - public static String COMPONENT_STRING = "cpu"; + public static final String COMPONENT_STRING = "cpu"; private int cores; private int threads; private float baseClock; diff --git a/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java b/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java new file mode 100644 index 0000000000..ee7eecd383 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java @@ -0,0 +1,8 @@ +package seedu.bigpp.exceptions; + +public class PPIndexOutOfBoundsException extends PPException{ + @Override + public String getMessage() { + return "Please enter a valid index"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java new file mode 100644 index 0000000000..5363ce1619 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderIncorrectComponentException extends PPException { + @Override + public String getMessage() { + return "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java new file mode 100644 index 0000000000..e34d14bfbf --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingIndexException extends PPException { + @Override + public String getMessage() { + return "Please input an index"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java new file mode 100644 index 0000000000..a923a453b6 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingSelectException extends PPException { + @Override + public String getMessage() { + return "Please select a component"; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index d14024c5a4..a9bc760d9d 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -4,6 +4,7 @@ import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; +import seedu.bigpp.command.buildercommand.BuilderSelectCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; @@ -74,6 +75,8 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return new BuilderEditNameCommand(arguments); case "budget": return new BuilderEditBudgetCommand(arguments); + case "select": + return new BuilderSelectCommand(arguments); default: return new UnrecognizedCommand(); } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 58fa9e2a99..02c2b513e2 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -1,6 +1,7 @@ package seedu.bigpp.pc; import seedu.bigpp.component.Component; +import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.component.cpucooler.CPUCooler; import seedu.bigpp.component.gpu.GPU; @@ -9,6 +10,8 @@ import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; +import java.text.DecimalFormat; + public class PC { private String name; private Boolean isPrebuilt; @@ -19,6 +22,7 @@ public class PC { private RAM ram = null; private Storage storage = null; private PSU psu = null; + private Chassis chassis = null; private int budget; @@ -55,6 +59,26 @@ public void setStorage(Storage storage) { public void setPsu(PSU psu) { this.psu = psu; } + + public void setComponent(Component component) { + if (component instanceof CPU) { + this.cpu = (CPU) component; + } else if (component instanceof CPUCooler) { + this.cpuCooler = (CPUCooler) component; + } else if (component instanceof GPU) { + this.gpu = (GPU) component; + } else if (component instanceof Motherboard) { + this.motherboard = (Motherboard) component; + } else if (component instanceof RAM) { + this.ram = (RAM) component; + } else if (component instanceof Storage) { + this.storage = (Storage) component; + } else if (component instanceof PSU) { + this.psu = (PSU) component; + } else if (component instanceof Chassis) { + this.chassis = (Chassis) component; + } + } public void setName(String name) { this.name = name; @@ -81,13 +105,16 @@ public int getBudget() { * @return totalCost */ public float getCost() { - float totalCost = 0.00F; + float totalCost = 0.00f; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; for (Component component : components) { if (component != null) { totalCost += component.getPrice(); } } + //give price to 2 dp + DecimalFormat df = new DecimalFormat("#.00"); + totalCost = Float.parseFloat(df.format(totalCost)); return totalCost; } @@ -107,17 +134,17 @@ public String viewComponents() { String componentString = ""; componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); - String[] componentNames = { "CPU ", "CPU Cooler ", "GPU ", "Motherboard", "RAM ", - "Storage ", "PSU " }; - Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; + String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", + "Storage :", "PSU :", "Chassis :" }; + Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; int index = 0; for (Component component : components) { if (component != null) { // out.println(componentNames[index] + component.getName()); - componentString += (componentNames[index] + component.getName() + '\n'); + componentString += (componentNames[index] + " " + component.getName() + '\n'); } else { // out.println(componentNames[index] + ": - Not Selected -"); - componentString += (componentNames[index] + ": - Not Selected -" + '\n'); + componentString += (componentNames[index] + " - Not Selected -" + '\n'); } index++; } From 8db1b1f54fc313d0d3cbb1f5add7ad8c5a570c90 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 14 Mar 2023 14:44:52 +0800 Subject: [PATCH 116/420] Resolve #34 Create exceptions for PCViewerCommand Error Handling Reformat code documentation to comply with checkstyle --- .../buildercommand/BuilderEditBudgetCommand.java | 2 +- .../buildercommand/BuilderEditNameCommand.java | 2 +- .../BuilderListComponentCommand.java | 2 +- .../buildercommand/BuilderSelectCommand.java | 2 +- .../command/viewercommand/ViewerAddCommand.java | 8 +++++++- .../viewercommand/ViewerDeleteCommand.java | 13 ++++++++++++- .../command/viewercommand/ViewerEditCommand.java | 15 +++++++++++++-- .../command/viewercommand/ViewerViewCommand.java | 13 ++++++++++++- .../ViewerInvalidIndexException.java | 14 ++++++++++++++ .../ViewerMissingIndexException.java | 10 ++++++++++ .../ViewerMissingNameException.java | 14 ++++++++++++++ 11 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index e099670f99..d614cae660 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -14,7 +14,7 @@ public BuilderEditBudgetCommand(String arguments) { super.setArguments(arguments); } - /* + /** * Change the budget of the current PC that the builder is working on * * @return the new budget of the PC diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index ba99f067db..94a77538eb 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -12,7 +12,7 @@ public BuilderEditNameCommand(String arguments) { super.setArguments(arguments); } - /* + /** * Change the name of the current PC that the builder is working on * * @return the new name of the PC diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index a4501e4ce5..5b88f48b98 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -11,7 +11,7 @@ public BuilderListComponentCommand(String arguments) { setArguments(arguments); } - /* + /** * Change the budget of the current PC that the builder is working on * * @return the new budget of the PC diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 674af935eb..0cea7df1d2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -18,7 +18,7 @@ public BuilderSelectCommand(String arguments) { setArguments(arguments); } - /* + /** * Change the Component of the PC that the builder is working on * * @return Added Component message diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index a47aed4da4..6ca79886d4 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -1,6 +1,8 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingNameException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -15,8 +17,12 @@ public ViewerAddCommand(String arguments) { * @return the name of the PC created */ @Override - public String executeCommand() { + public String executeCommand() throws PPException { String name = super.getArguments(); + // throw exception if no name is provided + if (name.equals("")) { + throw new ViewerMissingNameException(); + } PC pc = new PC(name, false); PCList.addPC(pc); return "Custom PC: [ " + name + " ] has been created"; diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 584f7ac55e..de6d6873ec 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -1,6 +1,9 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -16,8 +19,16 @@ public ViewerDeleteCommand(String arguments) { * print the name of the PC deleted */ @Override - public String executeCommand() { + public String executeCommand() throws PPException { + // throw exception if no index is selected + if (super.getArguments().equals("")) { + throw new ViewerMissingIndexException(); + } int index = Integer.parseInt(super.getArguments()) - 1; + // throw exception if index selected is out of the PCList range + if (index < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + throw new ViewerInvalidIndexException(); + } PC pc = (PCList.getList()).get(index); if (pc.getIsPreBuilt()) { return "Unable to delete Prebuilt PC"; diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 60f52d0ef3..47b4028e38 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -1,6 +1,9 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -10,12 +13,20 @@ public ViewerEditCommand(String arguments) { } /** - * Add new PC of a given name to the PC list + * Edit a PC of the given index from the PC list * @return the name of the PC created */ @Override - public String executeCommand() { + public String executeCommand() throws PPException { + // throw exception if no index is selected + if (super.getArguments().equals("")) { + throw new ViewerMissingIndexException(); + } int pcIndex = Integer.parseInt(super.getArguments()) - 1; + // throw exception if index selected is out of the PCList range + if (pcIndex < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + throw new ViewerInvalidIndexException(); + } UI.setPCBuilderMode(pcIndex); return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 25731997ab..98cd56e5ef 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -1,6 +1,9 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -15,8 +18,16 @@ public ViewerViewCommand(String arguments) { * @return the components of the PC of that index */ @Override - public String executeCommand() { + public String executeCommand() throws PPException { String index = super.getArguments(); + // throw exception if no index is selected + if (index.equals("")) { + throw new ViewerMissingIndexException(); + } + // throw exception if index selected is out of the PCList range + if (Integer.parseInt(index) < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + throw new ViewerInvalidIndexException(); + } PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); return pc.viewComponents(); } diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java new file mode 100644 index 0000000000..685d6edda7 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java @@ -0,0 +1,14 @@ +package seedu.bigpp.exceptions.viewerexceptions; + +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; + +public class ViewerInvalidIndexException extends PPIndexOutOfBoundsException { + + /** + * Return a message to inform the user that the index being accessed is out of the list range + */ + @Override + public String getMessage() { + return "Please enter a valid index"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java new file mode 100644 index 0000000000..5e100089e8 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.viewerexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class ViewerMissingIndexException extends PPException { + @Override + public String getMessage() { + return "Please input an index"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java new file mode 100644 index 0000000000..922b9c7313 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java @@ -0,0 +1,14 @@ +package seedu.bigpp.exceptions.viewerexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class ViewerMissingNameException extends PPException { + + /** + * Return a message to inform the user that the name is missing from the input command + */ + @Override + public String getMessage() { + return "Please enter a name"; + } +} From 60fd41785bcc1fa30f006d9650c36423230c761e Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 14 Mar 2023 14:52:40 +0800 Subject: [PATCH 117/420] Update JUnit test file with exception handling --- .../java/seedu/bigpp/command/viewercommand/AddCommandTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java index 026acc8958..755db8bd20 100644 --- a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java +++ b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java @@ -1,12 +1,13 @@ package seedu.bigpp.command.viewercommand; import org.junit.jupiter.api.Test; +import seedu.bigpp.exceptions.PPException; import static org.junit.jupiter.api.Assertions.assertEquals; public class AddCommandTest { @Test - public void executeCommand_addCommand_success() { + public void executeCommand_addCommand_success() throws PPException { String pcName = "Test PC"; ViewerAddCommand viewerAddCommand = new ViewerAddCommand(pcName); String commandResult = viewerAddCommand.executeCommand(); From 78d41f4ee0d8688dff24e936426a5df99ccdf9b2 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 14 Mar 2023 15:03:00 +0800 Subject: [PATCH 118/420] Update index out of bound exception and remove ViewerInvalidIndexException --- .../command/viewercommand/ViewerDeleteCommand.java | 4 ++-- .../command/viewercommand/ViewerEditCommand.java | 4 ++-- .../command/viewercommand/ViewerViewCommand.java | 4 ++-- .../ViewerInvalidIndexException.java | 14 -------------- 4 files changed, 6 insertions(+), 20 deletions(-) delete mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index de6d6873ec..6106b42395 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -2,7 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -27,7 +27,7 @@ public String executeCommand() throws PPException { int index = Integer.parseInt(super.getArguments()) - 1; // throw exception if index selected is out of the PCList range if (index < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { - throw new ViewerInvalidIndexException(); + throw new PPIndexOutOfBoundsException(); } PC pc = (PCList.getList()).get(index); if (pc.getIsPreBuilt()) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 47b4028e38..ec1a5fcd47 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -2,7 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -25,7 +25,7 @@ public String executeCommand() throws PPException { int pcIndex = Integer.parseInt(super.getArguments()) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { - throw new ViewerInvalidIndexException(); + throw new PPIndexOutOfBoundsException(); } UI.setPCBuilderMode(pcIndex); return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 98cd56e5ef..52d87b95f6 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -2,7 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidIndexException; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -26,7 +26,7 @@ public String executeCommand() throws PPException { } // throw exception if index selected is out of the PCList range if (Integer.parseInt(index) < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { - throw new ViewerInvalidIndexException(); + throw new PPIndexOutOfBoundsException(); } PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); return pc.viewComponents(); diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java deleted file mode 100644 index 685d6edda7..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidIndexException.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.exceptions.viewerexceptions; - -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; - -public class ViewerInvalidIndexException extends PPIndexOutOfBoundsException { - - /** - * Return a message to inform the user that the index being accessed is out of the list range - */ - @Override - public String getMessage() { - return "Please enter a valid index"; - } -} From 49575873380b5860e4e4b2405b8b938f4b1541ce Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:10:02 +0800 Subject: [PATCH 119/420] - Add exception handling for Builder List command - Change DataStorage into an object to reduce the excessive use of abstract classes --- src/main/java/seedu/bigpp/BigPP.java | 11 +- .../java/seedu/bigpp/command/Command.java | 4 +- .../java/seedu/bigpp/command/CommandType.java | 5 - .../BuilderEditBudgetCommand.java | 4 +- .../BuilderEditNameCommand.java | 4 +- .../BuilderListComponentCommand.java | 25 ++- .../buildercommand/BuilderSelectCommand.java | 16 +- .../command/commoncommand/BackCommand.java | 3 +- .../command/commoncommand/ByeCommand.java | 3 +- .../commoncommand/UnrecognizedCommand.java | 3 +- .../viewercommand/ViewerAddCommand.java | 3 +- .../viewercommand/ViewerDeleteCommand.java | 3 +- .../viewercommand/ViewerEditCommand.java | 3 +- .../viewercommand/ViewerViewCommand.java | 3 +- .../seedu/bigpp/datastorage/DataStorage.java | 29 +-- .../BuilderMissingListException.java | 11 ++ .../BuilderEditBudgetCommandTest.java | 9 +- .../BuilderEditNameCommandTest.java | 7 +- .../BuilderListComponentCommandTest.java | 173 ++++-------------- .../commoncommand/BackCommandTest.java | 7 +- .../command/commoncommand/ByeCommandTest.java | 6 +- .../command/viewercommand/AddCommandTest.java | 6 +- 22 files changed, 146 insertions(+), 192 deletions(-) delete mode 100644 src/main/java/seedu/bigpp/command/CommandType.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 0590ffd5e7..46d77555b5 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -9,6 +9,8 @@ public class BigPP { + public static DataStorage dataStorage; + /** * Main entry-point for the java.duke.Duke application. */ @@ -17,7 +19,10 @@ public static void main(String[] args) { } public void run() { - DataStorage.loadAll(); + // Initialize the DataStorage + dataStorage = new DataStorage(); + + dataStorage.loadAll(); UI.showWelcome(); UI.updateUI(true); runLoopUntilExit(); @@ -32,11 +37,13 @@ private void runLoopUntilExit() { String userInput = UI.getInput(); command = new Parser().parseCommand(userInput); String result = ""; + try { - result = command.executeCommand(); + result = command.executeCommand(dataStorage); } catch (PPException e) { result = e.getMessage(); } + UI.updateUI(false); UI.showResult(result); } while (!(command instanceof ByeCommand)); diff --git a/src/main/java/seedu/bigpp/command/Command.java b/src/main/java/seedu/bigpp/command/Command.java index c3329f68dc..a504d0cd16 100644 --- a/src/main/java/seedu/bigpp/command/Command.java +++ b/src/main/java/seedu/bigpp/command/Command.java @@ -1,11 +1,13 @@ package seedu.bigpp.command; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; + public abstract class Command { private String arguments; - public abstract String executeCommand() throws PPException; + public abstract String executeCommand(DataStorage dataStorage) throws PPException; public void setArguments(String arguments) { this.arguments = arguments; diff --git a/src/main/java/seedu/bigpp/command/CommandType.java b/src/main/java/seedu/bigpp/command/CommandType.java deleted file mode 100644 index 92be425c11..0000000000 --- a/src/main/java/seedu/bigpp/command/CommandType.java +++ /dev/null @@ -1,5 +0,0 @@ -package seedu.bigpp.command; - -public enum CommandType { - BACK -} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index d614cae660..9c27d5e13f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; @@ -16,11 +17,10 @@ public BuilderEditBudgetCommand(String arguments) { /** * Change the budget of the current PC that the builder is working on - * * @return the new budget of the PC */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws PPException { String argument = super.getArguments(); if (argument.equals("")) { throw new BuilderMissingBudgetException(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 94a77538eb..f2e2b0d002 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; public class BuilderEditNameCommand extends Command { @@ -14,11 +15,10 @@ public BuilderEditNameCommand(String arguments) { /** * Change the name of the current PC that the builder is working on - * * @return the new name of the PC */ @Override - public String executeCommand() throws PPException{ + public String executeCommand(DataStorage dataStorage) throws PPException { String name = super.getArguments(); if (name.equals("")) { throw new BuilderMissingNameException(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 5b88f48b98..571ebe2c84 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -3,6 +3,9 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.Component; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; + import java.util.ArrayList; public class BuilderListComponentCommand extends Command { @@ -13,14 +16,27 @@ public BuilderListComponentCommand(String arguments) { /** * Change the budget of the current PC that the builder is working on - * * @return the new budget of the PC */ @Override - public String executeCommand() { + public String executeCommand(DataStorage dataStorage) throws BuilderMissingListException, + BuilderIncorrectComponentException { String componentTypeString = getArguments(); + + //throw exception if no component type is specified eg. "list" + if (componentTypeString.equals("")) { + throw new BuilderMissingListException(); + } + + componentTypeString = componentTypeString.toLowerCase(); + + //throw exception if component type is not valid eg. "list jfk" + if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { + throw new BuilderIncorrectComponentException(); + } + String outputString = "Here are all available components of type '" + componentTypeString + "': \n"; - ArrayList componentList = DataStorage.stringToComponentListMap.get(componentTypeString); + ArrayList componentList = dataStorage.stringToComponentListMap.get(componentTypeString); int componentNumber = 1; for (Component component : componentList) { outputString += componentNumber + "." + "\n" + component.toString() + "\n" + "================\n"; @@ -29,6 +45,3 @@ public String executeCommand() { return outputString; } } - - - diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 0cea7df1d2..caef06f632 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -2,7 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.Component; -import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; @@ -10,8 +10,6 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; -import static seedu.bigpp.datastorage.DataStorage.stringToComponentListMap; - public class BuilderSelectCommand extends Command { public BuilderSelectCommand(String arguments) { @@ -20,11 +18,12 @@ public BuilderSelectCommand(String arguments) { /** * Change the Component of the PC that the builder is working on - * * @return Added Component message */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelectException, + BuilderIncorrectComponentException, + BuilderMissingIndexException, PPIndexOutOfBoundsException { String inputString = getArguments(); //throw exception if no component is selected eg. "select" if (inputString.equals("")) { @@ -35,7 +34,7 @@ public String executeCommand() throws PPException { componentTypeString = componentTypeString.toLowerCase(); //throw exception if component type is not valid eg. "select jfk" - if (!stringToComponentListMap.containsKey(componentTypeString)) { + if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { throw new BuilderIncorrectComponentException(); } @@ -46,14 +45,15 @@ public String executeCommand() throws PPException { //throw exception if no index is selected eg. "select cpu" throw new BuilderMissingIndexException(); } - if (componentIndex < 0 || componentIndex >= stringToComponentListMap.get(inputArray[0]).size()) { + if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { //throw exception if index is out of bounds eg. "select cpu 100" throw new PPIndexOutOfBoundsException(); } int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex) - .setComponent((Component) stringToComponentListMap.get(componentTypeString).get(componentIndex)); + .setComponent((Component) dataStorage.stringToComponentListMap.get(componentTypeString).get( + componentIndex)); return "Component added!"; } } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index be3f14868e..890abc0786 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -2,11 +2,12 @@ import seedu.bigpp.command.Command; import seedu.bigpp.ui.UI; +import seedu.bigpp.datastorage.DataStorage; public class BackCommand extends Command { @Override - public String executeCommand() { + public String executeCommand(DataStorage dataStorage) { switch (UI.getUiState()) { case PCVIEWER: return "Cannot go back from PCViewer"; diff --git a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java index d90158da78..4b370ef424 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java @@ -1,11 +1,12 @@ package seedu.bigpp.command.commoncommand; import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; public class ByeCommand extends Command { @Override - public String executeCommand() { + public String executeCommand(DataStorage dataStorage) { return "Bye. Hope to see you again soon!"; } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java index 4d2301fb4f..d98c1547d8 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java @@ -1,10 +1,11 @@ package seedu.bigpp.command.commoncommand; import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; public class UnrecognizedCommand extends Command { @Override - public String executeCommand() { + public String executeCommand(DataStorage dataStorage) { return "Unrecognised command."; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 6ca79886d4..46e6a75cfc 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingNameException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -17,7 +18,7 @@ public ViewerAddCommand(String arguments) { * @return the name of the PC created */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws PPException { String name = super.getArguments(); // throw exception if no name is provided if (name.equals("")) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 6106b42395..006856e1d0 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -19,7 +20,7 @@ public ViewerDeleteCommand(String arguments) { * print the name of the PC deleted */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws PPException { // throw exception if no index is selected if (super.getArguments().equals("")) { throw new ViewerMissingIndexException(); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index ec1a5fcd47..d9b57aa284 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -17,7 +18,7 @@ public ViewerEditCommand(String arguments) { * @return the name of the PC created */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws PPException { // throw exception if no index is selected if (super.getArguments().equals("")) { throw new ViewerMissingIndexException(); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 52d87b95f6..bc9afc4ebe 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -18,7 +19,7 @@ public ViewerViewCommand(String arguments) { * @return the components of the PC of that index */ @Override - public String executeCommand() throws PPException { + public String executeCommand(DataStorage dataStorage) throws PPException { String index = super.getArguments(); // throw exception if no index is selected if (index.equals("")) { diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 2c54b67dc8..6744811c3d 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -3,7 +3,6 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.io.InputStream; @@ -26,9 +25,9 @@ import seedu.bigpp.component.ram.RAMList; import seedu.bigpp.component.storage.Storage; import seedu.bigpp.component.storage.StorageList; +import seedu.bigpp.component.ComponentList; -public abstract class DataStorage { - public static Map stringToComponentListMap = new HashMap(); +public class DataStorage { private static final String CHASSIS_PATH = "chassis.json"; private static final String CPU_PATH = "cpu.json"; private static final String CPU_COOLER_PATH = "cpucooler.json"; @@ -38,14 +37,16 @@ public abstract class DataStorage { private static final String RAM_PATH = "ram.json"; private static final String STORAGE_PATH = "storage.json"; - //private static final String PREBUILT_PATH = "prebuilt.json"; + private static final String PREBUILT_PATH = "prebuilt.json"; private static final Gson GSON = new Gson(); + public Map stringToComponentListMap = new HashMap(); + /** * Loads all the components from the json files. */ - public static void loadAll() { + public void loadAll() { initStringToComponentListMap(); loadChassis(); loadCPU(); @@ -57,7 +58,7 @@ public static void loadAll() { loadStorage(); } - public static void initStringToComponentListMap() { + public void initStringToComponentListMap() { stringToComponentListMap.put("cpu", new CPUList()); stringToComponentListMap.put("gpu", new GPUList()); stringToComponentListMap.put("chassis", new ChassisList()); @@ -71,7 +72,7 @@ public static void initStringToComponentListMap() { /** * Loads all the chassis from the json file into ChassisList. */ - public static void loadChassis() { + public void loadChassis() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(CHASSIS_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -91,7 +92,7 @@ public static void loadChassis() { /** * Loads all the CPUs from the json file into CPUList. */ - public static void loadCPU() { + public void loadCPU() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(CPU_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -111,7 +112,7 @@ public static void loadCPU() { /** * Loads all the CPU coolers from the json file into CPUCoolerList. */ - public static void loadCPUCooler() { + public void loadCPUCooler() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(CPU_COOLER_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -131,7 +132,7 @@ public static void loadCPUCooler() { /** * Loads all the GPUs from the json file into GPUList. */ - public static void loadGPU() { + public void loadGPU() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(GPU_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -151,7 +152,7 @@ public static void loadGPU() { /** * Loads all the motherboards from the json file into MotherboardList. */ - public static void loadMotherboard() { + public void loadMotherboard() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(MOTHERBOARD_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -171,7 +172,7 @@ public static void loadMotherboard() { /** * Loads all the PSUs from the json file into PSUList. */ - public static void loadPSU() { + public void loadPSU() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(PSU_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -191,7 +192,7 @@ public static void loadPSU() { /** * Loads all the RAMs from the json file into RAMList. */ - public static void loadRAM() { + public void loadRAM() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(RAM_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); @@ -211,7 +212,7 @@ public static void loadRAM() { /** * Loads all the storage devices from the json file into StorageList. */ - public static void loadStorage() { + public void loadStorage() { ClassLoader classLoader = DataStorage.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(STORAGE_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java new file mode 100644 index 0000000000..b76f7e49b0 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java @@ -0,0 +1,11 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingListException extends PPException { + + @Override + public String getMessage() { + return "Please enter a component type to list"; + } +} diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java index 7c882c746f..95bea27bb2 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -3,19 +3,22 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; public class BuilderEditBudgetCommandTest { - + + private DataStorage dataStorage = new DataStorage(); + @Test - public void executeCommand_editBudgetCommand_success() throws PPException{ + public void executeCommand_editBudgetCommand_success() throws PPException { PC pc = new PC("PC1", true); PCList.addPC(pc); UI.setPCBuilderMode(0); - String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(); + String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(dataStorage); assertEquals("Current build budget is now: 1000", editBudgetCommandResult); } } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java index d2e359d687..37f981ee21 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -10,12 +11,14 @@ public class BuilderEditNameCommandTest { + private DataStorage dataStorage = new DataStorage(); + @Test - public void executeCommand_editNameCommand_success() throws PPException{ + public void executeCommand_editNameCommand_success() throws PPException { PC pc = new PC("PC1", true); PCList.addPC(pc); UI.setPCBuilderMode(0); - String editNameCommandResult = new BuilderEditNameCommand("PC2").executeCommand(); + String editNameCommandResult = new BuilderEditNameCommand("PC2").executeCommand(dataStorage); assertEquals("Current build name is now: PC2", editNameCommandResult); } } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 9f1bb5734b..861fdaafdc 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -2,147 +2,48 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; import static org.junit.jupiter.api.Assertions.assertEquals; public class BuilderListComponentCommandTest { - private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + - "1.\n" + - "NAME: Intel core i3-10100\n" + - "BRAND: Intel\n" + - "PRICE: 99.5\n" + - "CORES: 4\n" + - "THREADS: 8\n" + - "BASECLOCK: 3.6\n" + - "BOOSTCLOCK: 4.3\n" + - "POWER: 65.0\n" + - "SOCKET: LGA1200\n" + - "================\n" + - "2.\n" + - "NAME: Intel core i5-10600k\n" + - "BRAND: Intel\n" + - "PRICE: 182.47\n" + - "CORES: 6\n" + - "THREADS: 12\n" + - "BASECLOCK: 4.1\n" + - "BOOSTCLOCK: 4.8\n" + - "POWER: 125.0\n" + - "SOCKET: LGA1200\n" + - "================\n" + - "3.\n" + - "NAME: Intel core i7-10700k\n" + - "BRAND: Intel\n" + - "PRICE: 269.95\n" + - "CORES: 8\n" + - "THREADS: 16\n" + - "BASECLOCK: 3.8\n" + - "BOOSTCLOCK: 5.1\n" + - "POWER: 125.0\n" + - "SOCKET: LGA1200\n" + - "================\n" + - "4.\n" + - "NAME: Intel core i3-12100f\n" + - "BRAND: Intel\n" + - "PRICE: 106.93\n" + - "CORES: 4\n" + - "THREADS: 8\n" + - "BASECLOCK: 3.3\n" + - "BOOSTCLOCK: 4.3\n" + - "POWER: 58.0\n" + - "SOCKET: LGA1700\n" + - "================\n" + - "5.\n" + - "NAME: Intel core i5-12600k\n" + - "BRAND: Intel\n" + - "PRICE: 213.82\n" + - "CORES: 10\n" + - "THREADS: 20\n" + - "BASECLOCK: 3.7\n" + - "BOOSTCLOCK: 4.9\n" + - "POWER: 125.0\n" + - "SOCKET: LGA1700\n" + - "================\n" + - "6.\n" + - "NAME: Intel core i7-12700k\n" + - "BRAND: Intel\n" + - "PRICE: 312.88\n" + - "CORES: 12\n" + - "THREADS: 24\n" + - "BASECLOCK: 3.6\n" + - "BOOSTCLOCK: 5.0\n" + - "POWER: 125.0\n" + - "SOCKET: LGA1700\n" + - "================\n" + - "7.\n" + - "NAME: AMD Ryzen 3 3200G\n" + - "BRAND: AMD\n" + - "PRICE: 97.5\n" + - "CORES: 4\n" + - "THREADS: 4\n" + - "BASECLOCK: 3.6\n" + - "BOOSTCLOCK: 4.0\n" + - "POWER: 65.0\n" + - "SOCKET: AM4\n" + - "================\n" + - "8.\n" + - "NAME: AMD Ryzen 5 5600X\n" + - "BRAND: AMD\n" + - "PRICE: 156.64\n" + - "CORES: 6\n" + - "THREADS: 12\n" + - "BASECLOCK: 3.7\n" + - "BOOSTCLOCK: 4.6\n" + - "POWER: 65.0\n" + - "SOCKET: AM4\n" + - "================\n" + - "9.\n" + - "NAME: AMD Ryzen 7 5800X\n" + - "BRAND: AMD\n" + - "PRICE: 211.33\n" + - "CORES: 8\n" + - "THREADS: 16\n" + - "BASECLOCK: 3.8\n" + - "BOOSTCLOCK: 4.7\n" + - "POWER: 105.0\n" + - "SOCKET: AM4\n" + - "================\n" + - "10.\n" + - "NAME: AMD Ryzen 5 7600X\n" + - "BRAND: AMD\n" + - "PRICE: 240.86\n" + - "CORES: 6\n" + - "THREADS: 12\n" + - "BASECLOCK: 4.7\n" + - "BOOSTCLOCK: 5.3\n" + - "POWER: 105.0\n" + - "SOCKET: AM5\n" + - "================\n" + - "11.\n" + - "NAME: AMD Ryzen 7 7700X\n" + - "BRAND: AMD\n" + - "PRICE: 341.29\n" + - "CORES: 8\n" + - "THREADS: 16\n" + - "BASECLOCK: 4.5\n" + - "BOOSTCLOCK: 5.4\n" + - "POWER: 105.0\n" + - "SOCKET: AM5\n" + - "================\n" + - "12.\n" + - "NAME: AMD Ryzen 9 7950X\n" + - "BRAND: AMD\n" + - "PRICE: 589.0\n" + - "CORES: 16\n" + - "THREADS: 32\n" + - "BASECLOCK: 4.5\n" + - "BOOSTCLOCK: 5.7\n" + - "POWER: 170.0\n" + - "SOCKET: AM5\n" + - "================\n"; + private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + "1.\n" + + "NAME: Intel core i3-10100\n" + "BRAND: Intel\n" + "PRICE: 99.5\n" + "CORES: 4\n" + "THREADS: 8\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.3\n" + "POWER: 65.0\n" + "SOCKET: LGA1200\n" + "================\n" + + "2.\n" + "NAME: Intel core i5-10600k\n" + "BRAND: Intel\n" + "PRICE: 182.47\n" + "CORES: 6\n" + + "THREADS: 12\n" + "BASECLOCK: 4.1\n" + "BOOSTCLOCK: 4.8\n" + "POWER: 125.0\n" + "SOCKET: LGA1200\n" + + "================\n" + "3.\n" + "NAME: Intel core i7-10700k\n" + "BRAND: Intel\n" + "PRICE: 269.95\n" + + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 5.1\n" + "POWER: 125.0\n" + + "SOCKET: LGA1200\n" + "================\n" + "4.\n" + "NAME: Intel core i3-12100f\n" + "BRAND: Intel\n" + + "PRICE: 106.93\n" + "CORES: 4\n" + "THREADS: 8\n" + "BASECLOCK: 3.3\n" + "BOOSTCLOCK: 4.3\n" + + "POWER: 58.0\n" + "SOCKET: LGA1700\n" + "================\n" + "5.\n" + "NAME: Intel core i5-12600k\n" + + "BRAND: Intel\n" + "PRICE: 213.82\n" + "CORES: 10\n" + "THREADS: 20\n" + "BASECLOCK: 3.7\n" + + "BOOSTCLOCK: 4.9\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + "6.\n" + + "NAME: Intel core i7-12700k\n" + "BRAND: Intel\n" + "PRICE: 312.88\n" + "CORES: 12\n" + "THREADS: 24\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 5.0\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + + "7.\n" + "NAME: AMD Ryzen 3 3200G\n" + "BRAND: AMD\n" + "PRICE: 97.5\n" + "CORES: 4\n" + "THREADS: 4\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.0\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" + + "8.\n" + "NAME: AMD Ryzen 5 5600X\n" + "BRAND: AMD\n" + "PRICE: 156.64\n" + "CORES: 6\n" + "THREADS: 12\n" + + "BASECLOCK: 3.7\n" + "BOOSTCLOCK: 4.6\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" + + "9.\n" + "NAME: AMD Ryzen 7 5800X\n" + "BRAND: AMD\n" + "PRICE: 211.33\n" + "CORES: 8\n" + "THREADS: 16\n" + + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 4.7\n" + "POWER: 105.0\n" + "SOCKET: AM4\n" + "================\n" + + "10.\n" + "NAME: AMD Ryzen 5 7600X\n" + "BRAND: AMD\n" + "PRICE: 240.86\n" + "CORES: 6\n" + + "THREADS: 12\n" + "BASECLOCK: 4.7\n" + "BOOSTCLOCK: 5.3\n" + "POWER: 105.0\n" + "SOCKET: AM5\n" + + "================\n" + "11.\n" + "NAME: AMD Ryzen 7 7700X\n" + "BRAND: AMD\n" + "PRICE: 341.29\n" + + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.4\n" + "POWER: 105.0\n" + + "SOCKET: AM5\n" + "================\n" + "12.\n" + "NAME: AMD Ryzen 9 7950X\n" + "BRAND: AMD\n" + + "PRICE: 589.0\n" + "CORES: 16\n" + "THREADS: 32\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.7\n" + + "POWER: 170.0\n" + "SOCKET: AM5\n" + "================\n"; + + private DataStorage dataStorage = new DataStorage(); + @Test - public void executeCommand_listComponentCommand_success() { - DataStorage.loadAll(); - String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(); + public void executeCommand_listComponentCommand_success() throws BuilderMissingListException, + BuilderIncorrectComponentException { + + dataStorage.loadAll(); + String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(dataStorage); assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } } diff --git a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java index 5b912acf23..8f95b16156 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/BackCommandTest.java @@ -2,21 +2,24 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.ui.UI; +import seedu.bigpp.datastorage.DataStorage; import static org.junit.jupiter.api.Assertions.assertEquals; public class BackCommandTest { + private DataStorage dataStorage = new DataStorage(); + @Test public void executeCommand_backCommand_success() { BackCommand backCommand = new BackCommand(); UI.setPCViewerMode(); - String pcViewerBackCommandResult = backCommand.executeCommand(); + String pcViewerBackCommandResult = backCommand.executeCommand(dataStorage); assertEquals("Cannot go back from PCViewer", pcViewerBackCommandResult); //edits first pc in pclist UI.setPCBuilderMode(0); - String pcBuilderBackCommandResult = backCommand.executeCommand(); + String pcBuilderBackCommandResult = backCommand.executeCommand(dataStorage); assertEquals("returned to PCViewer", pcBuilderBackCommandResult); } } diff --git a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java index 7336b7217e..33bffab763 100644 --- a/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java +++ b/src/test/java/seedu/bigpp/command/commoncommand/ByeCommandTest.java @@ -3,13 +3,17 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import seedu.bigpp.datastorage.DataStorage; public class ByeCommandTest { + + private DataStorage dataStorage = new DataStorage(); + @Test public void executeCommand_byeCommand_success() { ByeCommand byeCommand = new ByeCommand(); String expectedOutput = "Bye. Hope to see you again soon!"; - String actualOutput = byeCommand.executeCommand(); + String actualOutput = byeCommand.executeCommand(dataStorage); assertEquals(expectedOutput, actualOutput); } } diff --git a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java index 755db8bd20..48d5f5539a 100644 --- a/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java +++ b/src/test/java/seedu/bigpp/command/viewercommand/AddCommandTest.java @@ -4,13 +4,17 @@ import seedu.bigpp.exceptions.PPException; import static org.junit.jupiter.api.Assertions.assertEquals; +import seedu.bigpp.datastorage.DataStorage; public class AddCommandTest { + + private DataStorage dataStorage = new DataStorage(); + @Test public void executeCommand_addCommand_success() throws PPException { String pcName = "Test PC"; ViewerAddCommand viewerAddCommand = new ViewerAddCommand(pcName); - String commandResult = viewerAddCommand.executeCommand(); + String commandResult = viewerAddCommand.executeCommand(dataStorage); assertEquals("Custom PC: [ Test PC ] has been created", commandResult); } } From 11ff3d15d1c5c98d638a114784ba1179fef927d4 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:29:25 +0800 Subject: [PATCH 120/420] Change the getListString into a common method of ComponentList, eventually will need Overrides for individual filters --- .../BuilderListComponentCommand.java | 17 +++++------------ .../seedu/bigpp/component/ComponentList.java | 11 ++++++++++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 571ebe2c84..285efa4fe7 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -1,13 +1,10 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.component.Component; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import java.util.ArrayList; - public class BuilderListComponentCommand extends Command { public BuilderListComponentCommand(String arguments) { @@ -16,6 +13,7 @@ public BuilderListComponentCommand(String arguments) { /** * Change the budget of the current PC that the builder is working on + * * @return the new budget of the PC */ @Override @@ -23,25 +21,20 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE BuilderIncorrectComponentException { String componentTypeString = getArguments(); - //throw exception if no component type is specified eg. "list" + // throw exception if no component type is specified eg. "list" if (componentTypeString.equals("")) { throw new BuilderMissingListException(); } componentTypeString = componentTypeString.toLowerCase(); - //throw exception if component type is not valid eg. "list jfk" + // throw exception if component type is not valid eg. "list jfk" if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { throw new BuilderIncorrectComponentException(); } String outputString = "Here are all available components of type '" + componentTypeString + "': \n"; - ArrayList componentList = dataStorage.stringToComponentListMap.get(componentTypeString); - int componentNumber = 1; - for (Component component : componentList) { - outputString += componentNumber + "." + "\n" + component.toString() + "\n" + "================\n"; - componentNumber += 1; - } - return outputString; + + return outputString + dataStorage.stringToComponentListMap.get(componentTypeString).getListString(); } } diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index bc28834aa2..b7b082b55c 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -2,5 +2,14 @@ import java.util.ArrayList; -public class ComponentList extends ArrayList { +public class ComponentList extends ArrayList { + public String getListString() { + String outputString = ""; + + for (int i = 0; i < this.size(); i++) { + outputString += (i + 1) + "." + "\n" + this.get(i).toString() + "\n" + "================\n"; + } + + return outputString; + } } From 89cfc490d902120f084b1cae02694609fb2dbda8 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 22:50:34 +0800 Subject: [PATCH 121/420] Add logging for bigpp.java --- BigPP.log | 14 ++++++++++++++ src/main/java/seedu/bigpp/BigPP.java | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 BigPP.log diff --git a/BigPP.log b/BigPP.log new file mode 100644 index 0000000000..45325f2931 --- /dev/null +++ b/BigPP.log @@ -0,0 +1,14 @@ +Mar 14, 2023 10:45:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: hello +Mar 14, 2023 10:45:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 10:45:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 10:46:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add pc1 +Mar 14, 2023 10:46:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 10:46:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ pc1 ] has been created +Mar 14, 2023 10:46:05 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: delete pc1 diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 0590ffd5e7..26863527e9 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -7,8 +7,16 @@ import seedu.bigpp.parser.Parser; import seedu.bigpp.ui.UI; +import java.io.IOException; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; + public class BigPP { + private static final Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); + /** * Main entry-point for the java.duke.Duke application. */ @@ -27,15 +35,30 @@ public void run() { * Runs the program until the user issues the exit command. */ private void runLoopUntilExit() { + + LOGGER.setLevel(Level.INFO); + try { + FileHandler handler = new FileHandler("BigPP.log", true); + handler.setFormatter(new SimpleFormatter()); + LOGGER.setUseParentHandlers(false); + LOGGER.addHandler(handler); + + } catch (IOException e) { + LOGGER.log(Level.SEVERE, "File logger not working.", e); + } Command command; do { String userInput = UI.getInput(); + LOGGER.info("User input: " + userInput); command = new Parser().parseCommand(userInput); String result = ""; try { result = command.executeCommand(); + LOGGER.info("Command executed: " + command.getClass().getName()); + LOGGER.info("Result: " + result); } catch (PPException e) { result = e.getMessage(); + LOGGER.warning(e.getMessage()); } UI.updateUI(false); UI.showResult(result); From 8af2be9250a48f6b4da855353630d08e5ef78055 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:03:41 +0800 Subject: [PATCH 122/420] Add documentation for common commands --- .../java/seedu/bigpp/command/commoncommand/BackCommand.java | 6 ++++++ .../java/seedu/bigpp/command/commoncommand/ByeCommand.java | 6 +++++- .../bigpp/command/commoncommand/UnrecognizedCommand.java | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index be3f14868e..3ee5ff938b 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -5,6 +5,12 @@ public class BackCommand extends Command { + /* + * back command to return to the previous menu. Does nothing if already in + * PCVieer menu + * + * @return the message to be displayed to the user + */ @Override public String executeCommand() { switch (UI.getUiState()) { diff --git a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java index d90158da78..a652b73b14 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java @@ -4,9 +4,13 @@ public class ByeCommand extends Command { + /* + * bye command to exit the program + * + * @return the message displaying the exit message + */ @Override public String executeCommand() { - return "Bye. Hope to see you again soon!"; } } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java index 4d2301fb4f..7dc55e629a 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java @@ -3,6 +3,12 @@ import seedu.bigpp.command.Command; public class UnrecognizedCommand extends Command { + + /* + * Unrecognized command to be executed when the user inputs an invalid command + * + * @return the message to be displaying an unrecognised command received + */ @Override public String executeCommand() { return "Unrecognised command."; From ec3d44b883270919e4511f3a414d58a088cc136c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:18:16 +0800 Subject: [PATCH 123/420] Add exceptions for PCViewer and code cleanup for PCViewer --- .../viewercommand/ViewerDeleteCommand.java | 15 ++++++++++----- .../command/viewercommand/ViewerEditCommand.java | 11 ++++++++--- .../command/viewercommand/ViewerViewCommand.java | 13 +++++++++---- .../ViewerInvalidTypeException.java | 10 ++++++++++ 4 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 6106b42395..4ed515617c 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -21,19 +22,23 @@ public ViewerDeleteCommand(String arguments) { @Override public String executeCommand() throws PPException { // throw exception if no index is selected - if (super.getArguments().equals("")) { + String argument = super.getArguments(); + if (argument.equals("")) { throw new ViewerMissingIndexException(); } - int index = Integer.parseInt(super.getArguments()) - 1; + if (argument.matches(".*\\D.*")) { + throw new ViewerInvalidTypeException(); + } + int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (index < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { throw new PPIndexOutOfBoundsException(); } - PC pc = (PCList.getList()).get(index); + PC pc = (PCList.getList()).get(pcIndex); if (pc.getIsPreBuilt()) { return "Unable to delete Prebuilt PC"; } - PCList.deletePC(index); + PCList.deletePC(pcIndex); return "Custom PC: [ " + pc.getName() + " ] has been deleted"; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index ec1a5fcd47..8b72b7ace3 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -18,13 +19,17 @@ public ViewerEditCommand(String arguments) { */ @Override public String executeCommand() throws PPException { + String argument = super.getArguments(); // throw exception if no index is selected - if (super.getArguments().equals("")) { + if (argument.equals("")) { throw new ViewerMissingIndexException(); } - int pcIndex = Integer.parseInt(super.getArguments()) - 1; + if (argument.matches(".*\\D.*")) { + throw new ViewerInvalidTypeException(); + } + int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (pcIndex < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { throw new PPIndexOutOfBoundsException(); } UI.setPCBuilderMode(pcIndex); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 52d87b95f6..4f64448722 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; +import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; @@ -19,16 +20,20 @@ public ViewerViewCommand(String arguments) { */ @Override public String executeCommand() throws PPException { - String index = super.getArguments(); + String argument = super.getArguments(); // throw exception if no index is selected - if (index.equals("")) { + if (argument.equals("")) { throw new ViewerMissingIndexException(); } + if (argument.matches(".*\\D.*")) { + throw new ViewerInvalidTypeException(); + } + int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (Integer.parseInt(index) < 0 || Integer.parseInt(super.getArguments()) > PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { throw new PPIndexOutOfBoundsException(); } - PC pc = (PCList.getList()).get(Integer.parseInt(index) - 1); + PC pc = (PCList.getList()).get(pcIndex); return pc.viewComponents(); } } diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java new file mode 100644 index 0000000000..baa440559b --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.viewerexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class ViewerInvalidTypeException extends PPException{ + @Override + public String getMessage() { + return "Please enter an integer"; + } +} From 2c18d6a073d46ac7f9130c45c1de3e331a354e7c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:26:15 +0800 Subject: [PATCH 124/420] added log files to git ignore --- .gitignore | 1 + BigPP.log | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) diff --git a/.gitignore b/.gitignore index 7c42bd3c98..f752d24498 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ text-ui-test/EXPECTED-UNIX.TXT # ignore class files *.class +*.log #ignore formatter *.xml diff --git a/BigPP.log b/BigPP.log index 45325f2931..876c44cc5b 100644 --- a/BigPP.log +++ b/BigPP.log @@ -12,3 +12,159 @@ Mar 14, 2023 10:46:02 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Result: Custom PC: [ pc1 ] has been created Mar 14, 2023 10:46:05 PM seedu.bigpp.BigPP runLoopUntilExit INFO: User input: delete pc1 +Mar 14, 2023 11:20:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: hello +Mar 14, 2023 11:20:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:20:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:20:07 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add asdl;kfj +Mar 14, 2023 11:20:07 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:20:07 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ asdl;kfj ] has been created +Mar 14, 2023 11:20:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view 1 +Mar 14, 2023 11:20:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerViewCommand +Mar 14, 2023 11:20:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom-PC: [asdl;kfj] - $0.0 +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +Mar 14, 2023 11:20:12 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: veiw +Mar 14, 2023 11:20:12 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:20:12 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:20:14 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: back +Mar 14, 2023 11:20:14 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.BackCommand +Mar 14, 2023 11:20:14 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Cannot go back from PCViewer +Mar 14, 2023 11:20:17 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view a +Mar 14, 2023 11:20:17 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:20:19 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view asdjkl;fh +Mar 14, 2023 11:20:19 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:20:20 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view 2 +Mar 14, 2023 11:20:20 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:20:22 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view 0 +Mar 14, 2023 11:20:22 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:20:54 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view 45 +Mar 14, 2023 11:20:54 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:20:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: veiw asdfa +Mar 14, 2023 11:20:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:20:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:20:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: view asdf +Mar 14, 2023 11:20:58 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:21:01 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit a +Mar 14, 2023 11:21:01 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:21:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 0 +Mar 14, 2023 11:21:04 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:21:06 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:21:06 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:21:06 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: asdl;kfj +Mar 14, 2023 11:21:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: back +Mar 14, 2023 11:21:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.BackCommand +Mar 14, 2023 11:21:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: returned to PCViewer +Mar 14, 2023 11:21:11 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 12 +Mar 14, 2023 11:21:11 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:21:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:21:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:21:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: asdl;kfj +Mar 14, 2023 11:21:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list a +Mar 14, 2023 11:22:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: r +Mar 14, 2023 11:22:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:22:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:22:13 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: name df +Mar 14, 2023 11:22:13 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:22:13 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:22:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add abd +Mar 14, 2023 11:22:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:22:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ abd ] has been created +Mar 14, 2023 11:22:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select 1 +Mar 14, 2023 11:22:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:22:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu 1 +Mar 14, 2023 11:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:22:49 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:22:49 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:22:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: abd +Mar 14, 2023 11:22:51 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select a +Mar 14, 2023 11:22:52 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:22:56 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select adskjf +Mar 14, 2023 11:22:56 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:22:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select 1 +Mar 14, 2023 11:22:58 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:23:00 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu +Mar 14, 2023 11:23:00 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please input an index +Mar 14, 2023 11:23:05 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu a From 4ad8cf76dc031369cee4374470615af64cb7ea4d Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:47:46 +0800 Subject: [PATCH 125/420] Add exceptions for Builder --- BigPP.log | 597 ++++++++++++++++++ .../BuilderListComponentCommand.java | 14 +- .../buildercommand/BuilderSelectCommand.java | 14 +- .../BuilderInvalidTypeException.java | 10 + .../BuilderMissingComponentException.java | 10 + .../BuilderMissingIndexException.java | 2 +- .../BuilderListComponentCommandTest.java | 3 +- 7 files changed, 643 insertions(+), 7 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java diff --git a/BigPP.log b/BigPP.log index 45325f2931..3115e42959 100644 --- a/BigPP.log +++ b/BigPP.log @@ -12,3 +12,600 @@ Mar 14, 2023 10:46:02 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Result: Custom PC: [ pc1 ] has been created Mar 14, 2023 10:46:05 PM seedu.bigpp.BigPP runLoopUntilExit INFO: User input: delete pc1 +Mar 14, 2023 11:38:15 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add adslkfj +Mar 14, 2023 11:38:15 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:38:15 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ adslkfj ] has been created +Mar 14, 2023 11:38:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit q2 +Mar 14, 2023 11:38:16 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:38:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:38:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:38:18 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: adslkfj +Mar 14, 2023 11:38:29 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list +Mar 14, 2023 11:42:42 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add 1 +Mar 14, 2023 11:42:42 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:42:42 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ 1 ] has been created +Mar 14, 2023 11:42:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:42:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:42:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: 1 +Mar 14, 2023 11:42:45 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list +Mar 14, 2023 11:42:45 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a component +Mar 14, 2023 11:42:47 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list f +Mar 14, 2023 11:42:47 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:42:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list cpu +Mar 14, 2023 11:42:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand +Mar 14, 2023 11:42:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Here are all available components of type 'cpu': +1. +NAME: Intel core i3-10100 +BRAND: Intel +PRICE: 99.5 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.3 +POWER: 65.0 +SOCKET: LGA1200 +================ +2. +NAME: Intel core i5-10600k +BRAND: Intel +PRICE: 182.47 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.1 +BOOSTCLOCK: 4.8 +POWER: 125.0 +SOCKET: LGA1200 +================ +3. +NAME: Intel core i7-10700k +BRAND: Intel +PRICE: 269.95 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 5.1 +POWER: 125.0 +SOCKET: LGA1200 +================ +4. +NAME: Intel core i3-12100f +BRAND: Intel +PRICE: 106.93 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.3 +BOOSTCLOCK: 4.3 +POWER: 58.0 +SOCKET: LGA1700 +================ +5. +NAME: Intel core i5-12600k +BRAND: Intel +PRICE: 213.82 +CORES: 10 +THREADS: 20 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.9 +POWER: 125.0 +SOCKET: LGA1700 +================ +6. +NAME: Intel core i7-12700k +BRAND: Intel +PRICE: 312.88 +CORES: 12 +THREADS: 24 +BASECLOCK: 3.6 +BOOSTCLOCK: 5.0 +POWER: 125.0 +SOCKET: LGA1700 +================ +7. +NAME: AMD Ryzen 3 3200G +BRAND: AMD +PRICE: 97.5 +CORES: 4 +THREADS: 4 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.0 +POWER: 65.0 +SOCKET: AM4 +================ +8. +NAME: AMD Ryzen 5 5600X +BRAND: AMD +PRICE: 156.64 +CORES: 6 +THREADS: 12 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.6 +POWER: 65.0 +SOCKET: AM4 +================ +9. +NAME: AMD Ryzen 7 5800X +BRAND: AMD +PRICE: 211.33 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 4.7 +POWER: 105.0 +SOCKET: AM4 +================ +10. +NAME: AMD Ryzen 5 7600X +BRAND: AMD +PRICE: 240.86 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.7 +BOOSTCLOCK: 5.3 +POWER: 105.0 +SOCKET: AM5 +================ +11. +NAME: AMD Ryzen 7 7700X +BRAND: AMD +PRICE: 341.29 +CORES: 8 +THREADS: 16 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.4 +POWER: 105.0 +SOCKET: AM5 +================ +12. +NAME: AMD Ryzen 9 7950X +BRAND: AMD +PRICE: 589.0 +CORES: 16 +THREADS: 32 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.7 +POWER: 170.0 +SOCKET: AM5 +================ + +Mar 14, 2023 11:42:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list +Mar 14, 2023 11:42:52 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a component +Mar 14, 2023 11:42:53 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list a +Mar 14, 2023 11:42:53 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:42:55 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list 1 +Mar 14, 2023 11:42:55 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:42:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list f;lsdiakjf;lkdsj +Mar 14, 2023 11:42:57 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:43:00 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list cpu +Mar 14, 2023 11:43:00 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand +Mar 14, 2023 11:43:00 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Here are all available components of type 'cpu': +1. +NAME: Intel core i3-10100 +BRAND: Intel +PRICE: 99.5 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.3 +POWER: 65.0 +SOCKET: LGA1200 +================ +2. +NAME: Intel core i5-10600k +BRAND: Intel +PRICE: 182.47 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.1 +BOOSTCLOCK: 4.8 +POWER: 125.0 +SOCKET: LGA1200 +================ +3. +NAME: Intel core i7-10700k +BRAND: Intel +PRICE: 269.95 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 5.1 +POWER: 125.0 +SOCKET: LGA1200 +================ +4. +NAME: Intel core i3-12100f +BRAND: Intel +PRICE: 106.93 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.3 +BOOSTCLOCK: 4.3 +POWER: 58.0 +SOCKET: LGA1700 +================ +5. +NAME: Intel core i5-12600k +BRAND: Intel +PRICE: 213.82 +CORES: 10 +THREADS: 20 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.9 +POWER: 125.0 +SOCKET: LGA1700 +================ +6. +NAME: Intel core i7-12700k +BRAND: Intel +PRICE: 312.88 +CORES: 12 +THREADS: 24 +BASECLOCK: 3.6 +BOOSTCLOCK: 5.0 +POWER: 125.0 +SOCKET: LGA1700 +================ +7. +NAME: AMD Ryzen 3 3200G +BRAND: AMD +PRICE: 97.5 +CORES: 4 +THREADS: 4 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.0 +POWER: 65.0 +SOCKET: AM4 +================ +8. +NAME: AMD Ryzen 5 5600X +BRAND: AMD +PRICE: 156.64 +CORES: 6 +THREADS: 12 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.6 +POWER: 65.0 +SOCKET: AM4 +================ +9. +NAME: AMD Ryzen 7 5800X +BRAND: AMD +PRICE: 211.33 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 4.7 +POWER: 105.0 +SOCKET: AM4 +================ +10. +NAME: AMD Ryzen 5 7600X +BRAND: AMD +PRICE: 240.86 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.7 +BOOSTCLOCK: 5.3 +POWER: 105.0 +SOCKET: AM5 +================ +11. +NAME: AMD Ryzen 7 7700X +BRAND: AMD +PRICE: 341.29 +CORES: 8 +THREADS: 16 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.4 +POWER: 105.0 +SOCKET: AM5 +================ +12. +NAME: AMD Ryzen 9 7950X +BRAND: AMD +PRICE: 589.0 +CORES: 16 +THREADS: 32 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.7 +POWER: 170.0 +SOCKET: AM5 +================ + +Mar 14, 2023 11:43:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list list +Mar 14, 2023 11:43:02 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:43:09 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select +Mar 14, 2023 11:43:09 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a component +Mar 14, 2023 11:43:12 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu +Mar 14, 2023 11:44:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: jkfh +Mar 14, 2023 11:44:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:44:43 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:44:47 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add fld;skaj +Mar 14, 2023 11:44:47 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:44:47 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ fld;skaj ] has been created +Mar 14, 2023 11:44:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:44:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:44:50 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: fld;skaj +Mar 14, 2023 11:44:51 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list +Mar 14, 2023 11:44:51 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a component +Mar 14, 2023 11:44:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select +Mar 14, 2023 11:44:52 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a component +Mar 14, 2023 11:44:55 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select a +Mar 14, 2023 11:44:55 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:45:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu +Mar 14, 2023 11:45:02 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please input an index +Mar 14, 2023 11:45:30 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select f +Mar 14, 2023 11:45:30 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:45:33 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select +Mar 14, 2023 11:45:33 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a component +Mar 14, 2023 11:45:36 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select f +Mar 14, 2023 11:45:36 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:45:39 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu +Mar 14, 2023 11:45:39 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please input an index +Mar 14, 2023 11:46:33 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu a +Mar 14, 2023 11:46:33 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter an integer +Mar 14, 2023 11:46:37 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu 1234234 +Mar 14, 2023 11:46:37 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 14, 2023 11:46:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list cpu a +Mar 14, 2023 11:46:44 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis) +Mar 14, 2023 11:46:49 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list cpu +Mar 14, 2023 11:46:49 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand +Mar 14, 2023 11:46:49 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Here are all available components of type 'cpu': +1. +NAME: Intel core i3-10100 +BRAND: Intel +PRICE: 99.5 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.3 +POWER: 65.0 +SOCKET: LGA1200 +================ +2. +NAME: Intel core i5-10600k +BRAND: Intel +PRICE: 182.47 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.1 +BOOSTCLOCK: 4.8 +POWER: 125.0 +SOCKET: LGA1200 +================ +3. +NAME: Intel core i7-10700k +BRAND: Intel +PRICE: 269.95 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 5.1 +POWER: 125.0 +SOCKET: LGA1200 +================ +4. +NAME: Intel core i3-12100f +BRAND: Intel +PRICE: 106.93 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.3 +BOOSTCLOCK: 4.3 +POWER: 58.0 +SOCKET: LGA1700 +================ +5. +NAME: Intel core i5-12600k +BRAND: Intel +PRICE: 213.82 +CORES: 10 +THREADS: 20 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.9 +POWER: 125.0 +SOCKET: LGA1700 +================ +6. +NAME: Intel core i7-12700k +BRAND: Intel +PRICE: 312.88 +CORES: 12 +THREADS: 24 +BASECLOCK: 3.6 +BOOSTCLOCK: 5.0 +POWER: 125.0 +SOCKET: LGA1700 +================ +7. +NAME: AMD Ryzen 3 3200G +BRAND: AMD +PRICE: 97.5 +CORES: 4 +THREADS: 4 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.0 +POWER: 65.0 +SOCKET: AM4 +================ +8. +NAME: AMD Ryzen 5 5600X +BRAND: AMD +PRICE: 156.64 +CORES: 6 +THREADS: 12 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.6 +POWER: 65.0 +SOCKET: AM4 +================ +9. +NAME: AMD Ryzen 7 5800X +BRAND: AMD +PRICE: 211.33 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 4.7 +POWER: 105.0 +SOCKET: AM4 +================ +10. +NAME: AMD Ryzen 5 7600X +BRAND: AMD +PRICE: 240.86 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.7 +BOOSTCLOCK: 5.3 +POWER: 105.0 +SOCKET: AM5 +================ +11. +NAME: AMD Ryzen 7 7700X +BRAND: AMD +PRICE: 341.29 +CORES: 8 +THREADS: 16 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.4 +POWER: 105.0 +SOCKET: AM5 +================ +12. +NAME: AMD Ryzen 9 7950X +BRAND: AMD +PRICE: 589.0 +CORES: 16 +THREADS: 32 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.7 +POWER: 170.0 +SOCKET: AM5 +================ + +Mar 14, 2023 11:46:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: select cpu 1 +Mar 14, 2023 11:46:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderSelectCommand +Mar 14, 2023 11:46:52 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Component added! +Mar 14, 2023 11:47:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bfdasfasd\ +Mar 14, 2023 11:47:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:02 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: dfasdfdasf +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: sdf +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: asdf +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: asd +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: f +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: asdf +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bye +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand +Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Bye. Hope to see you again soon! diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 5b88f48b98..582773695d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -3,6 +3,11 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.Component; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import static seedu.bigpp.datastorage.DataStorage.stringToComponentListMap; + import java.util.ArrayList; public class BuilderListComponentCommand extends Command { @@ -17,8 +22,15 @@ public BuilderListComponentCommand(String arguments) { * @return the new budget of the PC */ @Override - public String executeCommand() { + public String executeCommand() throws PPException { String componentTypeString = getArguments(); + if (componentTypeString.equals("")) { + throw new BuilderMissingComponentException(); + } + if (!stringToComponentListMap.containsKey(componentTypeString)) { + throw new BuilderIncorrectComponentException(); + } + String outputString = "Here are all available components of type '" + componentTypeString + "': \n"; ArrayList componentList = DataStorage.stringToComponentListMap.get(componentTypeString); int componentNumber = 1; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 0cea7df1d2..d0a62fbeb5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -7,6 +7,7 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -20,7 +21,6 @@ public BuilderSelectCommand(String arguments) { /** * Change the Component of the PC that the builder is working on - * * @return Added Component message */ @Override @@ -40,12 +40,18 @@ public String executeCommand() throws PPException { } int componentIndex; - if (inputArray.length == 2) { - componentIndex = Integer.parseInt(inputArray[1]) - 1; - } else { + + if (inputArray.length == 1) { //throw exception if no index is selected eg. "select cpu" throw new BuilderMissingIndexException(); } + + if (inputArray[1].matches(".*\\D.*")) { + throw new BuilderInvalidTypeException(); + } + + componentIndex = Integer.parseInt(inputArray[1]) - 1; + if (componentIndex < 0 || componentIndex >= stringToComponentListMap.get(inputArray[0]).size()) { //throw exception if index is out of bounds eg. "select cpu 100" throw new PPIndexOutOfBoundsException(); diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java new file mode 100644 index 0000000000..16ece4007e --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidTypeException extends PPException{ + @Override + public String getMessage() { + return "Please enter an integer"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java new file mode 100644 index 0000000000..8852f20630 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingComponentException extends PPException { + @Override + public String getMessage() { + return "Please enter a component"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java index e34d14bfbf..a6c9c22694 100644 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java @@ -5,6 +5,6 @@ public class BuilderMissingIndexException extends PPException { @Override public String getMessage() { - return "Please input an index"; + return "Please input an index after selecting a component"; } } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 9f1bb5734b..34db82b89a 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -140,7 +141,7 @@ public class BuilderListComponentCommandTest { "SOCKET: AM5\n" + "================\n"; @Test - public void executeCommand_listComponentCommand_success() { + public void executeCommand_listComponentCommand_success() throws PPException { DataStorage.loadAll(); String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(); assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); From 61a91c3ac318353c47099e75bb9794aa7065cbde Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:53:46 +0800 Subject: [PATCH 126/420] Change menu contents to be more coherent with commands --- BigPP.log | 18 ++++++++++++++++++ BigPP.log.lck | 0 .../java/seedu/bigpp/menu/PCBuilderMenu.java | 3 +++ .../java/seedu/bigpp/menu/PCViewerMenu.java | 4 +++- 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 BigPP.log.lck diff --git a/BigPP.log b/BigPP.log index 3115e42959..1537935e83 100644 --- a/BigPP.log +++ b/BigPP.log @@ -609,3 +609,21 @@ Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand Mar 14, 2023 11:47:04 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Result: Bye. Hope to see you again soon! +Mar 14, 2023 11:49:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: g +Mar 14, 2023 11:49:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 14, 2023 11:49:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 14, 2023 11:49:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add abc +Mar 14, 2023 11:49:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 14, 2023 11:49:44 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ abc ] has been created +Mar 14, 2023 11:49:46 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 14, 2023 11:49:46 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 14, 2023 11:49:46 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: abc diff --git a/BigPP.log.lck b/BigPP.log.lck new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index a643fbb5d8..3b8bfa4d62 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -19,8 +19,11 @@ public int getPCIndex() { public void printMenu() { out.println("PC builder"); out.println(PCList.getPC(pcIndex).viewComponents()); + out.println("What would you like to do?"); out.println("Edit name"); out.println("Set budget"); + out.println("List components"); + out.println("Select components"); out.println("back"); } } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 2c8296b83c..7222e12257 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -10,8 +10,10 @@ public void printMenu() { out.println("PC viewer"); PCList.printPcList(); out.println("What would you like to do?"); + out.println("Add PC"); out.println("View PC"); - out.println("Build PC"); + out.println("Edit PC"); + out.println("Delete PC"); out.println("back"); out.println("exit"); } From 5669ad2b1080bd13ba8deab962626de760712d9a Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 14 Mar 2023 23:58:40 +0800 Subject: [PATCH 127/420] Fix expectedtxt file --- BigPP.log | 6 ++++++ BigPP.log.lck | 0 text-ui-test/EXPECTED.TXT | 16 ++++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log b/BigPP.log index 1537935e83..f62018c91e 100644 --- a/BigPP.log +++ b/BigPP.log @@ -627,3 +627,9 @@ Mar 14, 2023 11:49:46 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand Mar 14, 2023 11:49:46 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Result: Currently editing PC: abc +Mar 14, 2023 11:57:37 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bye +Mar 14, 2023 11:57:37 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand +Mar 14, 2023 11:57:37 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Bye. Hope to see you again soon! diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 3eebaae94c..5096a8631d 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -26,8 +26,10 @@ Welcome to BigPP! PC viewer List currently empty! What would you like to do? +Add PC View PC -Build PC +Edit PC +Delete PC back exit =================================================== @@ -37,8 +39,10 @@ PC viewer Here is the list of PC Builds: 1.Custom-PC: [newpc1] - $0.0 What would you like to do? +Add PC View PC -Build PC +Edit PC +Delete PC back exit =================================================== @@ -50,8 +54,10 @@ Here is the list of PC Builds: 1.Custom-PC: [newpc1] - $0.0 2.Custom-PC: [newpc2] - $0.0 What would you like to do? +Add PC View PC -Build PC +Edit PC +Delete PC back exit =================================================== @@ -62,8 +68,10 @@ PC viewer Here is the list of PC Builds: 1.Custom-PC: [newpc2] - $0.0 What would you like to do? +Add PC View PC -Build PC +Edit PC +Delete PC back exit =================================================== From 69a39bbf0ce3368d2cde629f978cf444127c146b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 03:16:29 +0800 Subject: [PATCH 128/420] Adhere to checkstyle --- .../bigpp/command/viewercommand/ViewerViewCommand.java | 1 - src/main/java/seedu/bigpp/pc/PC.java | 7 +++++-- .../buildercommand/BuilderListComponentCommandTest.java | 1 - 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 89f6576488..a505b8a67d 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -1,7 +1,6 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.exceptions.PPException; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index f4d84a8ed6..bfac513bd8 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -159,7 +159,6 @@ public int getBudget() { /** * Gets the cost of each of the components in the PC and returns the total. - * * @return totalCost */ public float getCost() { @@ -189,11 +188,15 @@ public String buildType(Boolean isPrebuilt) { */ public String viewComponents() { String componentString = ""; + componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); componentString += ("Components:" + '\n'); + String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; + Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; + int index = 0; for (Component component : components) { if (component != null) { diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 76199a8aaa..19db5b00d6 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -5,7 +5,6 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; -import seedu.bigpp.exceptions.PPException; import static org.junit.jupiter.api.Assertions.assertEquals; From 944ce49ae3423d1809d3c4747683e999b9251ffd Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Wed, 15 Mar 2023 15:36:22 +0800 Subject: [PATCH 129/420] Add user guide with command list --- docs/UserGuide.md | 50 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index abd9fbe891..e0632580e5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -2,41 +2,39 @@ ## Introduction -{Give a product intro} +PC Part Picker is a command line application for planning your own PC builds. -## Quick Start - -{Give steps to get started quickly} - -1. Ensure that you have Java 11 or above installed. -1. Down the latest version of `Duke` from [here](http://link.to/duke). - -## Features - -{Give detailed description of each feature} - -### Adding a todo: `todo` -Adds a new item to the list of todo items. +## Command Summary +### From PCViewer +#### `add PC_NAME` +**Functionality:** Adds a PC with the name `PC_NAME` to your PC list -Format: `todo n/TODO_NAME d/DEADLINE` +#### `view PC_INDEX` +**Functionality:** Views the PC with index `PC_INDEX` -* The `DEADLINE` can be in a natural language format. -* The `TODO_NAME` cannot contain punctuation. +#### `edit PC_INDEX` +**Functionality:** Enters PCBuilder mode for the PC with index `PC_INDEX` -Example of usage: +#### `delete PC_INDEX` +**Functionality:** Deletes the PC with index `PC_INDEX` -`todo n/Write the rest of the User Guide d/next week` +#### `exit` +**Functionality:** Exits the application -`todo n/Refactor the User Guide to remove passive voice d/13/04/2020` +### From PCBuilder +#### `list COMPONENT_TYPE` +**Functionality:** Lists all components of type `COMPONENT_TYPE` -## FAQ +#### `select COMPONENT_TYPE INDEX` +**Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build -**Q**: How do I transfer my data to another computer? +#### `budget INTEGER` +**Functionality:** Sets the budget of the current PC build to `INTEGER` -**A**: {your answer here} +#### `name NEW_NAME` +**Functionality:** Sets the name of the current PC build to `NEW_NAME` -## Command Summary +#### `back` +**Functionality:** Goes back to PCViewer menu -{Give a 'cheat sheet' of commands here} -* Add todo `todo n/TODO_NAME d/DEADLINE` From 22a58c26fc86459923b4ea20ae679c04833b0911 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Wed, 15 Mar 2023 18:32:01 +0800 Subject: [PATCH 130/420] Add budget to PC display string --- .../buildercommand/BuilderEditBudgetCommand.java | 2 +- .../command/viewercommand/ViewerEditCommand.java | 2 +- src/main/java/seedu/bigpp/pc/PC.java | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 9c27d5e13f..918c497dcd 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -37,6 +37,6 @@ public String executeCommand(DataStorage dataStorage) throws PPException { int pcIndex = UI.builderMenu.getPCIndex(); PCList.getPC(pcIndex).setBudget(budget); - return "Current build budget is now: " + budget; + return "Current build budget is now: " + PCList.getPC(pcIndex).getBudgetString(); } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index aac27f3154..d936ec0557 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -41,6 +41,6 @@ public String executeCommand(DataStorage dataStorage) } UI.setPCBuilderMode(pcIndex); - return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); + return "Currently editing - " + PCList.getPC(pcIndex); } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index bfac513bd8..da25583cd8 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -24,7 +24,9 @@ public class PC { private PSU psu = null; private Chassis chassis = null; - private int budget; + private int budget = -1; + + private DecimalFormat moneyDecimalFormat = new DecimalFormat("#.00"); public PC(String name, Boolean isPrebuilt) { this.name = name; @@ -156,6 +158,9 @@ public boolean getIsPreBuilt() { public int getBudget() { return budget; } + public String getBudgetString() { + return (budget == -1) ? "infinite" : "$" +moneyDecimalFormat.format(budget); + } /** * Gets the cost of each of the components in the PC and returns the total. @@ -170,8 +175,7 @@ public float getCost() { } } // give price to 2 dp - DecimalFormat df = new DecimalFormat("#.00"); - totalCost = Float.parseFloat(df.format(totalCost)); + totalCost = Float.parseFloat(moneyDecimalFormat.format(totalCost)); return totalCost; } @@ -189,7 +193,7 @@ public String buildType(Boolean isPrebuilt) { public String viewComponents() { String componentString = ""; - componentString += (buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + '\n'); + componentString += this.toString() + "\n"; componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", @@ -213,6 +217,6 @@ public String viewComponents() { @Override public String toString() { - return buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost(); + return buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + "/" + getBudgetString(); } } From 449f36f48a508a27523aa41c6f0bdc7ca30aae01 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Wed, 15 Mar 2023 18:39:06 +0800 Subject: [PATCH 131/420] Fix editBudgetCommand testcase --- .../command/buildercommand/BuilderEditBudgetCommandTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java index 95bea27bb2..8992006a3d 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -19,6 +19,6 @@ public void executeCommand_editBudgetCommand_success() throws PPException { PCList.addPC(pc); UI.setPCBuilderMode(0); String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(dataStorage); - assertEquals("Current build budget is now: 1000", editBudgetCommandResult); + assertEquals("Current build budget is now: $1000.00", editBudgetCommandResult); } } From a0bf8ee3dfe1cd96f70ee5030f26c4056e345fe3 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 19:32:28 +0800 Subject: [PATCH 132/420] Change exit to bye --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index e0632580e5..2692000f52 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -18,7 +18,7 @@ PC Part Picker is a command line application for planning your own PC builds. #### `delete PC_INDEX` **Functionality:** Deletes the PC with index `PC_INDEX` -#### `exit` +#### `bye` **Functionality:** Exits the application ### From PCBuilder From 40bf91b79aedd74c1dd21d509ce12ec8cc257a9a Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Wed, 15 Mar 2023 20:24:43 +0800 Subject: [PATCH 133/420] Add functionality to unselect component from builder menu via command 'unselect ' and also handle exceptions --- .../BuilderUnselectCommand.java | 51 +++++++++++++++++++ .../BuilderNullComponentException.java | 10 ++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 ++ src/main/java/seedu/bigpp/pc/PC.java | 19 +++++++ 4 files changed, 83 insertions(+) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java new file mode 100644 index 0000000000..4065efd066 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -0,0 +1,51 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderNullComponentException; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + +public class BuilderUnselectCommand extends Command { + + public BuilderUnselectCommand(String arguments) { + setArguments(arguments); + } + + /** + * Change the Component of the PC that the builder is working on + * @return Added Component message + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderNullComponentException { + + String componentTypeString = getArguments(); + // throw exception if no component is selected .eg. "Unselect" + if (componentTypeString.equals("")) { + throw new BuilderMissingComponentException(); + } + + componentTypeString = componentTypeString.toLowerCase(); + componentTypeString = componentTypeString.trim(); + + // throw exception if component type is not valid .eg. "unselect jfk" + if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { + throw new BuilderIncorrectComponentException(); + } + + int pcIndex = UI.builderMenu.getPCIndex(); + + if (PCList.getPC(pcIndex).getComponent(componentTypeString) == null) { + throw new BuilderNullComponentException(); + } + + PCList.getPC(pcIndex).setNullComponent(componentTypeString); + + assert PCList.getPC(pcIndex).getComponent(componentTypeString) == null : "Component should be null"; + + return componentTypeString + " removed!"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java new file mode 100644 index 0000000000..7e9892fb6e --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderNullComponentException extends PPException { + @Override + public String getMessage() { + return "Component is already unselected!"; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index a9bc760d9d..5937bbddd9 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -5,6 +5,7 @@ import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; import seedu.bigpp.command.buildercommand.BuilderSelectCommand; +import seedu.bigpp.command.buildercommand.BuilderUnselectCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; @@ -77,6 +78,8 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return new BuilderEditBudgetCommand(arguments); case "select": return new BuilderSelectCommand(arguments); + case "unselect": + return new BuilderUnselectCommand(arguments); default: return new UnrecognizedCommand(); } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index bfac513bd8..458f6dd18f 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -82,6 +82,25 @@ public void setComponent(Component component) { setChassis((Chassis) component); } } + public void setNullComponent(String componentType){ + if (componentType.equals("cpu")) { + setCPU(null); + } else if (componentType.equals("cpu-cooler")) { + setCpuCooler(null); + } else if (componentType.equals("gpu")) { + setGpu(null); + } else if (componentType.equals("motherboard")) { + setMotherboard(null); + } else if (componentType.equals("ram")) { + setRam(null); + } else if (componentType.equals("storage")) { + setStorage(null); + } else if (componentType.equals("psu")) { + setPsu(null); + } else if (componentType.equals("chassis")) { + setChassis(null); + } + } public CPU getCpu() { return cpu; From c7d001e2466ce24563584778a60d0deed6860139 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Wed, 15 Mar 2023 20:35:28 +0800 Subject: [PATCH 134/420] Update documentation for executeCommand() --- .../bigpp/command/buildercommand/BuilderUnselectCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java index 4065efd066..b550685c06 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -15,8 +15,8 @@ public BuilderUnselectCommand(String arguments) { } /** - * Change the Component of the PC that the builder is working on - * @return Added Component message + * Change the Component of the PC to null + * @return component removed message */ @Override public String executeCommand(DataStorage dataStorage) From 2fd9549637cc873521c1767d41671a30a4dc2d8a Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:51:09 +0800 Subject: [PATCH 135/420] Add saving and loading mechanisms to BigPP --- src/main/java/seedu/bigpp/BigPP.java | 2 +- .../command/commoncommand/ByeCommand.java | 1 + .../seedu/bigpp/datastorage/DataStorage.java | 108 ++++++++++++++++++ src/main/java/seedu/bigpp/pc/PCList.java | 10 ++ user.json | 1 + 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 user.json diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index f84c93852d..7708ca47a5 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -15,8 +15,8 @@ public class BigPP { - public static DataStorage dataStorage; private static final Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); + private static DataStorage dataStorage; /** * Main entry-point for the java.duke.Duke application. diff --git a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java index 2b20be4950..94b90b5326 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java @@ -12,6 +12,7 @@ public class ByeCommand extends Command { */ @Override public String executeCommand(DataStorage dataStorage) { + dataStorage.saveUserPcs(); return "Bye. Hope to see you again soon!"; } } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 6744811c3d..6024fd755f 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -3,11 +3,19 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.System.Logger; +import java.nio.file.Files; +import java.nio.file.Path; import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.component.chassis.ChassisList; @@ -25,7 +33,10 @@ import seedu.bigpp.component.ram.RAMList; import seedu.bigpp.component.storage.Storage; import seedu.bigpp.component.storage.StorageList; +import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; import seedu.bigpp.component.ComponentList; +import static seedu.bigpp.ui.UI.out; public class DataStorage { private static final String CHASSIS_PATH = "chassis.json"; @@ -38,15 +49,41 @@ public class DataStorage { private static final String STORAGE_PATH = "storage.json"; private static final String PREBUILT_PATH = "prebuilt.json"; + private static final String USER_PATH = "./user.json"; private static final Gson GSON = new Gson(); public Map stringToComponentListMap = new HashMap(); + /** + * Saves all the user's PCs to a json file. + */ + public void saveUserPcs() { + // open user file + File file = new File(USER_PATH); + try { + file.createNewFile(); + } catch (IOException e) { + out.println("Error creating user file, data will not be saved."); + } + + try (FileWriter fileWriter = new FileWriter(file)) { + fileWriter.write(GSON.toJson(PCList.getList())); + } catch (IOException e) { + out.println("Error writing to user file, data will not be saved."); + } + + } + /** * Loads all the components from the json files. */ public void loadAll() { + // load prebuilt PCs, then load user PCs + loadPrebuiltPcs(); + loadUserPcs(); + + // load all components initStringToComponentListMap(); loadChassis(); loadCPU(); @@ -229,4 +266,75 @@ public void loadStorage() { storageMap.forEach((name, storage) -> stringToComponentListMap.get("storage").add(storage)); } + /** + * Loads all the user's PCs from the json file into PCList. + * This will append all user's PCs to the PCList. + * + */ + public void loadUserPcs() { + File userFile = new File(USER_PATH); + + // If file does not exist, create user file + try { + if (!userFile.exists()) { + out.println("User file does not exist. Creating new user file."); + userFile.createNewFile(); + + FileWriter writer = new FileWriter(userFile); + writer.write("[]"); + writer.close(); + } + } catch (IOException e) { + out.println("Error creating user file. Please try again."); + System.exit(1); + } + + // If file exists, but is empty, add empty array + if (userFile.length() == 0) { + try { + FileWriter writer = new FileWriter(userFile); + writer.write("[]"); + writer.close(); + } catch (IOException e) { + out.println("Error creating user file. Please try again."); + System.exit(1); + } + } + + // Read entire file into string + String json = ""; + try { + json = Files.readString(userFile.toPath()); + } catch (IOException e) { + out.println("Error reading user file. Please try again."); + System.exit(1); + } + + out.println("User PCs found, loading..."); + PCList.appendList(GSON.fromJson(json, new TypeToken>() { + }.getType())); + } + + /** + * Loads all the prebuilt PCs from the json file into PCList. + * Important to call this first as this will overwrite the user's PCs. + * + */ + public void loadPrebuiltPcs() { + ClassLoader classLoader = DataStorage.class.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream(PREBUILT_PATH); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + + // read entire file into string + String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); + + PCList.setList(GSON.fromJson(json, new TypeToken>() { + }.getType())); + + // If there are no prebuilt PCs, ensure that PCList is not null + if (PCList.getList() == null) { + PCList.setList(new ArrayList<>()); + } + } + } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index ce44d0ad24..7b7e9836b6 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -11,8 +11,17 @@ public static ArrayList getList() { return pcList; } + public static void setList(ArrayList pcList) { + PCList.pcList = pcList; + } + + public static void appendList(ArrayList pcList) { + PCList.pcList.addAll(pcList); + } + /** * Add PC to the PC list + * * @param pc the PC that will be added to the list */ public static void addPC(PC pc) { @@ -21,6 +30,7 @@ public static void addPC(PC pc) { /** * Remove PC from the PC list + * * @param index the position of the PC in the PC list */ public static void deletePC(int index) { diff --git a/user.json b/user.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/user.json @@ -0,0 +1 @@ +[] \ No newline at end of file From 48a15e17fb4927eb1a52e5049c837bb6d699040d Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:52:29 +0800 Subject: [PATCH 136/420] Remove user.json --- .gitignore | 2 ++ user.json | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 user.json diff --git a/.gitignore b/.gitignore index f752d24498..532620762d 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ text-ui-test/EXPECTED-UNIX.TXT #ignore formatter *.xml +#ignore user files +user.json \ No newline at end of file diff --git a/user.json b/user.json deleted file mode 100644 index 0637a088a0..0000000000 --- a/user.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file From 65a985efbeaeddfc06ca5cb6ecdd65093016e34b Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 15 Mar 2023 21:39:31 +0800 Subject: [PATCH 137/420] Add assertion for bigpp.java --- src/main/java/seedu/bigpp/BigPP.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index f84c93852d..e531c1a828 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -66,6 +66,8 @@ private void runLoopUntilExit() { LOGGER.warning(e.getMessage()); } + assert command != null : "Command should not be null"; + UI.updateUI(false); UI.showResult(result); } while (!(command instanceof ByeCommand)); From f925d07dd51374791983b1056007717d3e343d29 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:04:30 +0800 Subject: [PATCH 138/420] -Change PCList class to inherit ArrayList -Change stringToComponentListMap to have type to avoid warning --- src/main/java/seedu/bigpp/BigPP.java | 4 +- .../BuilderEditBudgetCommand.java | 3 +- .../BuilderEditNameCommand.java | 3 +- .../buildercommand/BuilderSelectCommand.java | 12 +-- .../viewercommand/ViewerAddCommand.java | 3 +- .../viewercommand/ViewerDeleteCommand.java | 7 +- .../viewercommand/ViewerEditCommand.java | 6 +- .../viewercommand/ViewerViewCommand.java | 6 +- .../seedu/bigpp/datastorage/DataStorage.java | 18 ++-- .../java/seedu/bigpp/menu/PCBuilderMenu.java | 6 +- .../java/seedu/bigpp/menu/PCViewerMenu.java | 8 +- src/main/java/seedu/bigpp/pc/PCList.java | 45 +-------- src/main/java/seedu/bigpp/ui/UI.java | 97 ++++++++++--------- .../BuilderEditBudgetCommandTest.java | 3 +- .../BuilderEditNameCommandTest.java | 3 +- 15 files changed, 88 insertions(+), 136 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 7708ca47a5..d4eb19eeed 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -31,7 +31,7 @@ public void run() { dataStorage.loadAll(); UI.showWelcome(); - UI.updateUI(true); + UI.updateUI(true, dataStorage); runLoopUntilExit(); } @@ -66,7 +66,7 @@ private void runLoopUntilExit() { LOGGER.warning(e.getMessage()); } - UI.updateUI(false); + UI.updateUI(false, dataStorage); UI.showResult(result); } while (!(command instanceof ByeCommand)); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 9c27d5e13f..21c7b001db 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -6,7 +6,6 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class BuilderEditBudgetCommand extends Command { @@ -36,7 +35,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } int pcIndex = UI.builderMenu.getPCIndex(); - PCList.getPC(pcIndex).setBudget(budget); + dataStorage.pcList.get(pcIndex).setBudget(budget); return "Current build budget is now: " + budget; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index f2e2b0d002..931ed0e434 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -1,7 +1,6 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; @@ -24,7 +23,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new BuilderMissingNameException(); } int pcIndex = UI.builderMenu.getPCIndex(); - PCList.getPC(pcIndex).setName(name); + dataStorage.pcList.get(pcIndex).setName(name); return "Current build name is now: " + name; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index e1e8cb6ae3..cf0494ab32 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -8,7 +8,6 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class BuilderSelectCommand extends Command { @@ -19,7 +18,6 @@ public BuilderSelectCommand(String arguments) { /** * Change the Component of the PC that the builder is working on - * * @return Added Component message */ @Override @@ -61,9 +59,11 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec } int pcIndex = UI.builderMenu.getPCIndex(); - PCList.getPC(pcIndex) - .setComponent((Component) dataStorage.stringToComponentListMap.get(componentTypeString).get( - componentIndex)); - return componentTypeString + " added! : " + PCList.getPC(pcIndex).getComponent(componentTypeString); + Component selectedComponent = (Component) dataStorage.stringToComponentListMap.get(componentTypeString) + .get(componentIndex); + + dataStorage.pcList.get(pcIndex).setComponent(selectedComponent); + + return componentTypeString + " added! : " + selectedComponent.getName(); } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 46e6a75cfc..f1502a9669 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -5,7 +5,6 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingNameException; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerAddCommand extends Command { @@ -25,7 +24,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new ViewerMissingNameException(); } PC pc = new PC(name, false); - PCList.addPC(pc); + dataStorage.pcList.add(pc); return "Custom PC: [ " + name + " ] has been created"; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index a23e5557a3..0a4cab7dab 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -7,7 +7,6 @@ import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerDeleteCommand extends Command { @@ -32,14 +31,14 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPIndexOutOfBoundsException(); } - PC pc = (PCList.getList()).get(pcIndex); + PC pc = (dataStorage.pcList).get(pcIndex); if (pc.getIsPreBuilt()) { return "Unable to delete Prebuilt PC"; } - PCList.deletePC(pcIndex); + dataStorage.pcList.remove(pcIndex); return "Custom PC: [ " + pc.getName() + " ] has been deleted"; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index aac27f3154..f48c85c8ff 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -5,7 +5,6 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class ViewerEditCommand extends Command { @@ -15,7 +14,6 @@ public ViewerEditCommand(String arguments) { /** * Edit a PC of the given index from the PC list - * * @return the name of the PC created */ @Override @@ -36,11 +34,11 @@ public String executeCommand(DataStorage dataStorage) int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPIndexOutOfBoundsException(); } UI.setPCBuilderMode(pcIndex); - return "Currently editing PC: " + PCList.getPC(pcIndex).getName(); + return "Currently editing PC: " + dataStorage.pcList.get(pcIndex).getName(); } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index a505b8a67d..69142fa417 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -6,7 +6,6 @@ import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerViewCommand extends Command { @@ -16,7 +15,6 @@ public ViewerViewCommand(String arguments) { /** * Display all the components of the PC of a given index - * * @return the components of the PC of that index */ @Override @@ -37,11 +35,11 @@ public String executeCommand(DataStorage dataStorage) throws ViewerMissingIndexE int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range - if (pcIndex < 0 || pcIndex >= PCList.getList().size()) { + if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPIndexOutOfBoundsException(); } - PC pc = (PCList.getList()).get(pcIndex); + PC pc = (dataStorage.pcList).get(pcIndex); return pc.viewComponents(); } } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 6024fd755f..abb3eb7e6d 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -8,12 +8,9 @@ import java.util.Map; import java.io.InputStream; import java.io.InputStreamReader; -import java.lang.System.Logger; import java.nio.file.Files; -import java.nio.file.Path; import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; @@ -53,7 +50,8 @@ public class DataStorage { private static final Gson GSON = new Gson(); - public Map stringToComponentListMap = new HashMap(); + public Map> stringToComponentListMap = new HashMap>(); + public PCList pcList = new PCList(); /** * Saves all the user's PCs to a json file. @@ -68,7 +66,7 @@ public void saveUserPcs() { } try (FileWriter fileWriter = new FileWriter(file)) { - fileWriter.write(GSON.toJson(PCList.getList())); + fileWriter.write(GSON.toJson(pcList)); } catch (IOException e) { out.println("Error writing to user file, data will not be saved."); } @@ -269,7 +267,6 @@ public void loadStorage() { /** * Loads all the user's PCs from the json file into PCList. * This will append all user's PCs to the PCList. - * */ public void loadUserPcs() { File userFile = new File(USER_PATH); @@ -311,14 +308,13 @@ public void loadUserPcs() { } out.println("User PCs found, loading..."); - PCList.appendList(GSON.fromJson(json, new TypeToken>() { + pcList.addAll(GSON.fromJson(json, new TypeToken>() { }.getType())); } /** * Loads all the prebuilt PCs from the json file into PCList. * Important to call this first as this will overwrite the user's PCs. - * */ public void loadPrebuiltPcs() { ClassLoader classLoader = DataStorage.class.getClassLoader(); @@ -328,12 +324,12 @@ public void loadPrebuiltPcs() { // read entire file into string String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - PCList.setList(GSON.fromJson(json, new TypeToken>() { + pcList = (GSON.fromJson(json, new TypeToken>() { }.getType())); // If there are no prebuilt PCs, ensure that PCList is not null - if (PCList.getList() == null) { - PCList.setList(new ArrayList<>()); + if (pcList == null) { + pcList = new PCList(); } } diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 3b8bfa4d62..505c7e161a 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -1,6 +1,6 @@ package seedu.bigpp.menu; -import seedu.bigpp.pc.PCList; +import seedu.bigpp.datastorage.DataStorage; import static seedu.bigpp.ui.UI.out; @@ -16,9 +16,9 @@ public int getPCIndex() { return pcIndex; } - public void printMenu() { + public void printMenu(DataStorage dataStorage) { out.println("PC builder"); - out.println(PCList.getPC(pcIndex).viewComponents()); + out.println(dataStorage.pcList.get(pcIndex).viewComponents()); out.println("What would you like to do?"); out.println("Edit name"); out.println("Set budget"); diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 7222e12257..6b98198890 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -1,14 +1,14 @@ package seedu.bigpp.menu; -import seedu.bigpp.pc.PCList; - import static seedu.bigpp.ui.UI.out; +import seedu.bigpp.datastorage.DataStorage; + public class PCViewerMenu extends Menu { - public void printMenu() { + public void printMenu(DataStorage dataStorage) { out.println("PC viewer"); - PCList.printPcList(); + dataStorage.pcList.printPcList(); out.println("What would you like to do?"); out.println("Add PC"); out.println("View PC"); diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 7b7e9836b6..54ea003487 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -4,51 +4,16 @@ import static seedu.bigpp.ui.UI.out; -public abstract class PCList { - private static ArrayList pcList = new ArrayList<>(); +public class PCList extends ArrayList { - public static ArrayList getList() { - return pcList; - } - - public static void setList(ArrayList pcList) { - PCList.pcList = pcList; - } - - public static void appendList(ArrayList pcList) { - PCList.pcList.addAll(pcList); - } - - /** - * Add PC to the PC list - * - * @param pc the PC that will be added to the list - */ - public static void addPC(PC pc) { - pcList.add(pc); - } - - /** - * Remove PC from the PC list - * - * @param index the position of the PC in the PC list - */ - public static void deletePC(int index) { - pcList.remove(index); - } - - public static void printPcList() { - if (pcList.size() > 0) { + public void printPcList() { + if (this.size() > 0) { out.println("Here is the list of PC Builds:"); - for (int i = 0; i < pcList.size(); i++) { - out.println((i + 1) + "." + pcList.get(i)); + for (int i = 0; i < this.size(); i++) { + out.println((i + 1) + "." + this.get(i)); } } else { out.println("List currently empty!"); } } - - public static PC getPC(int index) { - return pcList.get(index); - } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index e5b97d030f..1319cfa859 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -1,5 +1,6 @@ package seedu.bigpp.ui; +import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.menu.PCBuilderMenu; import seedu.bigpp.menu.PCViewerMenu; @@ -10,51 +11,51 @@ public abstract class UI { public static PrintStream out = System.out; public static PCBuilderMenu builderMenu = null; - private static final String LOGO1 = - " _____ _____ _____ _____ " + - " _____ \n" + - " /\\ \\ /\\ \\ /\\ \\ " + - " /\\ \\ /\\ \\ \n" + - " /::\\ \\ /::\\ \\ /::\\ \\ " + - " /::\\ \\ /::\\ \\ \n" + - " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + - " /::::\\ \\ /::::\\ \\ \n" + - " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + - "/::::::\\ \\ /::::::\\ \\ \n" + - " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + - " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + - " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + - "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; - private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + - " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + - " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + - " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + - " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + - "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + - "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + - "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + - "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + - "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + - " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + - "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + - " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + - "\\::::::/ / \\::::::/ / \n"; - private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + - "\\:::\\____\\ \\::::/ / \\::::/ / \n" + - " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + - "\\::/____/ \\::/____/ \n" + - " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + - "~~ ~~ \n" + - " \\::::::/ / \\:::\\ \\ \\::::::/ / " + - " \n" + - " \\::::/ / \\:::\\____\\ \\::::/ / " + - " \n" + - " \\::/____/ \\::/ / \\::/____/ " + - " \n" + - " ~~ \\/____/ " + - " \n" + - " " + - " \n"; + private static final String LOGO1 = " _____ _____ " + + " _____ _____ " + + " _____ \n" + + " /\\ \\ /\\ \\ /\\ \\ " + + " /\\ \\ /\\ \\ \n" + + " /::\\ \\ /::\\ \\ /::\\ \\ " + + " /::\\ \\ /::\\ \\ \n" + + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + + " /::::\\ \\ /::::\\ \\ \n" + + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + + "/::::::\\ \\ /::::::\\ \\ \n" + + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; + private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + + "\\::::::/ / \\::::::/ / \n"; + private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + + "\\:::\\____\\ \\::::/ / \\::::/ / \n" + + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + + "\\::/____/ \\::/____/ \n" + + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + + "~~ ~~ \n" + + " \\::::::/ / \\:::\\ \\ \\::::::/ / " + + " \n" + + " \\::::/ / \\:::\\____\\ \\::::/ / " + + " \n" + + " \\::/____/ \\::/ / \\::/____/ " + + " \n" + + " ~~ \\/____/ " + + " \n" + + " " + + " \n"; private static final String DIVIDER = "==================================================="; private static UIState uiState = UIState.PCVIEWER; @@ -83,7 +84,7 @@ public static void showWelcome() { } } - public static void updateUI(boolean isInitial) { + public static void updateUI(boolean isInitial, DataStorage dataStorage) { if (!isInitial) { clearTerminal(); } @@ -91,10 +92,10 @@ public static void updateUI(boolean isInitial) { switch (uiState) { case PCVIEWER: - viewerMenu.printMenu(); + viewerMenu.printMenu(dataStorage); break; case PCBUILDER: - builderMenu.printMenu(); + builderMenu.printMenu(dataStorage); break; default: break; diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java index 95bea27bb2..1ca29281b0 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -5,7 +5,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -16,7 +15,7 @@ public class BuilderEditBudgetCommandTest { @Test public void executeCommand_editBudgetCommand_success() throws PPException { PC pc = new PC("PC1", true); - PCList.addPC(pc); + dataStorage.pcList.add(pc); UI.setPCBuilderMode(0); String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(dataStorage); assertEquals("Current build budget is now: 1000", editBudgetCommandResult); diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java index 37f981ee21..6da8603c15 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java @@ -5,7 +5,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -16,7 +15,7 @@ public class BuilderEditNameCommandTest { @Test public void executeCommand_editNameCommand_success() throws PPException { PC pc = new PC("PC1", true); - PCList.addPC(pc); + dataStorage.pcList.add(pc); UI.setPCBuilderMode(0); String editNameCommandResult = new BuilderEditNameCommand("PC2").executeCommand(dataStorage); assertEquals("Current build name is now: PC2", editNameCommandResult); From 0a1e722b8b4412abaeb0d11778e02ecce3000047 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:10:16 +0800 Subject: [PATCH 139/420] Add assertion for buildercommands --- .../command/buildercommand/BuilderEditBudgetCommand.java | 3 +++ .../command/buildercommand/BuilderEditNameCommand.java | 4 ++++ .../command/buildercommand/BuilderListComponentCommand.java | 6 +++++- .../bigpp/command/buildercommand/BuilderSelectCommand.java | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 21c7b001db..5179a99061 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -7,6 +7,7 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; public class BuilderEditBudgetCommand extends Command { @@ -20,6 +21,8 @@ public BuilderEditBudgetCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { + assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; + String argument = super.getArguments(); if (argument.equals("")) { throw new BuilderMissingBudgetException(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 931ed0e434..8c29ca9c7b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -5,6 +5,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; +import seedu.bigpp.ui.UIState; public class BuilderEditNameCommand extends Command { @@ -18,10 +19,13 @@ public BuilderEditNameCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { + assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; + String name = super.getArguments(); if (name.equals("")) { throw new BuilderMissingNameException(); } + int pcIndex = UI.builderMenu.getPCIndex(); dataStorage.pcList.get(pcIndex).setName(name); return "Current build name is now: " + name; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 7d2a4562da..bf7a7be5ab 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -5,6 +5,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; public class BuilderListComponentCommand extends Command { @@ -14,12 +16,14 @@ public BuilderListComponentCommand(String arguments) { /** * Change the budget of the current PC that the builder is working on - * * @return the new budget of the PC */ @Override public String executeCommand(DataStorage dataStorage) throws BuilderMissingListException, BuilderIncorrectComponentException, BuilderMissingComponentException { + + assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; + String componentTypeString = getArguments(); if (componentTypeString.equals("")) { throw new BuilderMissingComponentException(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index cf0494ab32..809c9263c9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -9,6 +9,7 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; public class BuilderSelectCommand extends Command { @@ -24,6 +25,7 @@ public BuilderSelectCommand(String arguments) { public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelectException, BuilderIncorrectComponentException, BuilderMissingIndexException, PPIndexOutOfBoundsException, BuilderInvalidTypeException { + assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; String inputString = getArguments(); // throw exception if no component is selected eg. "select" From 73a43c5ee5070f08de2da3f80fc5060d3db5a4cc Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 16 Mar 2023 00:58:59 +0800 Subject: [PATCH 140/420] Error handling: Handle whitespaces in input --- .../command/buildercommand/BuilderSelectCommand.java | 10 ++++++---- src/main/java/seedu/bigpp/parser/Parser.java | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index e1e8cb6ae3..e667387be1 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -5,9 +5,9 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; @@ -19,7 +19,6 @@ public BuilderSelectCommand(String arguments) { /** * Change the Component of the PC that the builder is working on - * * @return Added Component message */ @Override @@ -36,6 +35,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec String[] inputArray = inputString.split(" ", 2); String componentTypeString = inputArray[0]; componentTypeString = componentTypeString.toLowerCase(); + componentTypeString = componentTypeString.trim(); // throw exception if component type is not valid eg. "select jfk" if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { @@ -48,12 +48,14 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec throw new BuilderMissingIndexException(); } + String indexString = inputArray[1].trim(); + // throw exception if index is not a number eg. "select cpu a" - if (inputArray[1].matches(".*\\D.*")) { + if (indexString.matches(".*\\D.*")) { throw new BuilderInvalidTypeException(); } - int componentIndex = Integer.parseInt(inputArray[1]) - 1; + int componentIndex = Integer.parseInt(indexString) - 1; // throw exception if index is out of bounds eg. "select cpu 100" if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 5937bbddd9..464653237b 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -19,14 +19,17 @@ public class Parser { public Command parseCommand(String userInput) { - String[] inputList = userInput.split(" ", 2); + String trimmedInput = userInput.trim(); + String[] inputList = trimmedInput.split(" ", 2); String arguments = ""; if (inputList.length == 2) { arguments = inputList[1]; + arguments = arguments.trim(); } String commandWord = inputList[0]; commandWord = commandWord.toLowerCase(); + commandWord = commandWord.trim(); // try common commands first if (userInput.equals("back")) { From c616116be91f2d9355b061d2c1579a0d17237c54 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 16 Mar 2023 01:26:34 +0800 Subject: [PATCH 141/420] Add functionality to see specifications of selected components in pc build through info command --- .../buildercommand/BuilderInfoCommand.java | 47 +++++++++++++++++++ .../BuilderNoInfoException.java | 10 ++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 ++ 3 files changed, 60 insertions(+) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java new file mode 100644 index 0000000000..43ff2fc07f --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java @@ -0,0 +1,47 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderNoInfoException; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; + +public class BuilderInfoCommand extends Command { + + public BuilderInfoCommand(String arguments) { + setArguments(arguments); + } + + /** + * View all the specifications of a component in the pc build + * @return the specifications of the component + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingComponentException, BuilderIncorrectComponentException, BuilderNoInfoException { + + String componentTypeString = getArguments(); + componentTypeString = componentTypeString.toLowerCase(); + componentTypeString = componentTypeString.trim(); + + if (componentTypeString.equals("")) { + throw new BuilderMissingComponentException(); + } + + // throw exception if component type is not valid eg. "list jfk" + if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { + throw new BuilderIncorrectComponentException(); + } + + int pcIndex = UI.builderMenu.getPCIndex(); + if (PCList.getPC(pcIndex).getComponent(componentTypeString) == null) { + throw new BuilderNoInfoException(); + } + + String outputString = "Here is the specifications of your selected " + componentTypeString + ": \n"; + return outputString + PCList.getPC(pcIndex).getComponent(componentTypeString); + + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java new file mode 100644 index 0000000000..cf62944b8b --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderNoInfoException extends PPException { + @Override + public String getMessage() { + return "You have not have selected anything for this component"; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index a9bc760d9d..ea7cea7dfd 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderInfoCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; import seedu.bigpp.command.buildercommand.BuilderSelectCommand; import seedu.bigpp.command.commoncommand.BackCommand; @@ -77,6 +78,8 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return new BuilderEditBudgetCommand(arguments); case "select": return new BuilderSelectCommand(arguments); + case "info": + return new BuilderInfoCommand(arguments); default: return new UnrecognizedCommand(); } From 37786d9df976d3726ce88599555a85ae8005a942 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 02:11:46 +0800 Subject: [PATCH 142/420] Add resources folder to test --- build.gradle | 1 + .../buildercommand/BuilderSelectCommand.java | 9 +- .../java/seedu/bigpp/component/Component.java | 6 +- .../seedu/bigpp/component/ComponentList.java | 5 +- .../bigpp/component/chassis/ChassisList.java | 1 + .../seedu/bigpp/component/cpu/CPUList.java | 1 - .../seedu/bigpp/datastorage/DataStorage.java | 64 ++++----- .../BuilderListComponentCommandTest.java | 5 + src/test/resources/chassis.json | 22 ++++ src/test/resources/cpu.json | 122 ++++++++++++++++++ src/test/resources/cpucooler.json | 30 +++++ src/test/resources/gpu.json | 26 ++++ src/test/resources/motherboard.json | 86 ++++++++++++ src/test/resources/prebuilt.json | 0 src/test/resources/psu.json | 9 ++ src/test/resources/ram.json | 34 +++++ src/test/resources/storage.json | 30 +++++ 17 files changed, 411 insertions(+), 40 deletions(-) create mode 100644 src/test/resources/chassis.json create mode 100644 src/test/resources/cpu.json create mode 100644 src/test/resources/cpucooler.json create mode 100644 src/test/resources/gpu.json create mode 100644 src/test/resources/motherboard.json create mode 100644 src/test/resources/prebuilt.json create mode 100644 src/test/resources/psu.json create mode 100644 src/test/resources/ram.json create mode 100644 src/test/resources/storage.json diff --git a/build.gradle b/build.gradle index db7b8096f4..840fc0efc9 100644 --- a/build.gradle +++ b/build.gradle @@ -62,4 +62,5 @@ sourceSets { main.java.srcDirs 'src/main/java' main.resources.srcDirs 'src/main/resources' test.java.srcDirs 'src/test/java' + test.resources.srcDirs 'src/test/resources' } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 809c9263c9..24562b9a31 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -61,11 +61,12 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec } int pcIndex = UI.builderMenu.getPCIndex(); - Component selectedComponent = (Component) dataStorage.stringToComponentListMap.get(componentTypeString) - .get(componentIndex); - dataStorage.pcList.get(pcIndex).setComponent(selectedComponent); + dataStorage.pcList.get(pcIndex) + .setComponent((Component) dataStorage.stringToComponentListMap.get(componentTypeString) + .get(componentIndex)); - return componentTypeString + " added! : " + selectedComponent.getName(); + return componentTypeString + " added! : " + + dataStorage.stringToComponentListMap.get(componentTypeString).get(componentIndex).getName(); } } diff --git a/src/main/java/seedu/bigpp/component/Component.java b/src/main/java/seedu/bigpp/component/Component.java index e8b05aa4c5..4ee5f88d40 100644 --- a/src/main/java/seedu/bigpp/component/Component.java +++ b/src/main/java/seedu/bigpp/component/Component.java @@ -1,6 +1,6 @@ package seedu.bigpp.component; -public abstract class Component { +public class Component { protected String name; protected String brand; protected float price; @@ -29,5 +29,7 @@ public void setPrice(float price) { this.price = price; } - public abstract String toString(); + public String toString() { + return "Name: " + this.name + "\nBrand: " + this.brand + "\nPrice: " + this.price; + } } diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index b7b082b55c..3b495e1f6b 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -3,11 +3,12 @@ import java.util.ArrayList; public class ComponentList extends ArrayList { + public String getListString() { String outputString = ""; - for (int i = 0; i < this.size(); i++) { - outputString += (i + 1) + "." + "\n" + this.get(i).toString() + "\n" + "================\n"; + for (int i = 0; i < super.size(); i++) { + outputString += (i + 1) + "." + "\n" + super.get(i).toString() + "\n" + "================\n"; } return outputString; diff --git a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java index cc6dfcc21a..c4c7d3823d 100644 --- a/src/main/java/seedu/bigpp/component/chassis/ChassisList.java +++ b/src/main/java/seedu/bigpp/component/chassis/ChassisList.java @@ -3,4 +3,5 @@ import seedu.bigpp.component.ComponentList; public class ChassisList extends ComponentList { + } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPUList.java b/src/main/java/seedu/bigpp/component/cpu/CPUList.java index 10146d7d8c..d754e02b57 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPUList.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPUList.java @@ -2,6 +2,5 @@ import seedu.bigpp.component.ComponentList; - public class CPUList extends ComponentList { } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index abb3eb7e6d..930e6980bb 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -78,19 +78,19 @@ public void saveUserPcs() { */ public void loadAll() { // load prebuilt PCs, then load user PCs - loadPrebuiltPcs(); - loadUserPcs(); + loadPrebuiltPcs(PREBUILT_PATH); + loadUserPcs(USER_PATH); // load all components initStringToComponentListMap(); - loadChassis(); - loadCPU(); - loadCPUCooler(); - loadGPU(); - loadMotherboard(); - loadPSU(); - loadRAM(); - loadStorage(); + loadChassis(CHASSIS_PATH); + loadCPU(CPU_PATH); + loadCPUCooler(CPU_COOLER_PATH); + loadGPU(GPU_PATH); + loadMotherboard(MOTHERBOARD_PATH); + loadPSU(PSU_PATH); + loadRAM(RAM_PATH); + loadStorage(STORAGE_PATH); } public void initStringToComponentListMap() { @@ -107,9 +107,9 @@ public void initStringToComponentListMap() { /** * Loads all the chassis from the json file into ChassisList. */ - public void loadChassis() { + public void loadChassis(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(CHASSIS_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -127,9 +127,9 @@ public void loadChassis() { /** * Loads all the CPUs from the json file into CPUList. */ - public void loadCPU() { + public void loadCPU(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(CPU_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -147,9 +147,9 @@ public void loadCPU() { /** * Loads all the CPU coolers from the json file into CPUCoolerList. */ - public void loadCPUCooler() { + public void loadCPUCooler(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(CPU_COOLER_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -167,9 +167,9 @@ public void loadCPUCooler() { /** * Loads all the GPUs from the json file into GPUList. */ - public void loadGPU() { + public void loadGPU(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(GPU_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -187,9 +187,9 @@ public void loadGPU() { /** * Loads all the motherboards from the json file into MotherboardList. */ - public void loadMotherboard() { + public void loadMotherboard(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(MOTHERBOARD_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -207,9 +207,9 @@ public void loadMotherboard() { /** * Loads all the PSUs from the json file into PSUList. */ - public void loadPSU() { + public void loadPSU(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(PSU_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -227,9 +227,9 @@ public void loadPSU() { /** * Loads all the RAMs from the json file into RAMList. */ - public void loadRAM() { + public void loadRAM(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(RAM_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -247,9 +247,9 @@ public void loadRAM() { /** * Loads all the storage devices from the json file into StorageList. */ - public void loadStorage() { + public void loadStorage(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(STORAGE_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string @@ -260,7 +260,7 @@ public void loadStorage() { storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); - // Add each ram to the ram list + // Add each storage to the storage list storageMap.forEach((name, storage) -> stringToComponentListMap.get("storage").add(storage)); } @@ -268,8 +268,8 @@ public void loadStorage() { * Loads all the user's PCs from the json file into PCList. * This will append all user's PCs to the PCList. */ - public void loadUserPcs() { - File userFile = new File(USER_PATH); + public void loadUserPcs(String path) { + File userFile = new File(path); // If file does not exist, create user file try { @@ -308,17 +308,19 @@ public void loadUserPcs() { } out.println("User PCs found, loading..."); + pcList.addAll(GSON.fromJson(json, new TypeToken>() { }.getType())); + } /** * Loads all the prebuilt PCs from the json file into PCList. * Important to call this first as this will overwrite the user's PCs. */ - public void loadPrebuiltPcs() { + public void loadPrebuiltPcs(String path) { ClassLoader classLoader = DataStorage.class.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(PREBUILT_PATH); + InputStream inputStream = classLoader.getResourceAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // read entire file into string diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 19db5b00d6..5f042080c8 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -4,6 +4,7 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; +import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -44,7 +45,11 @@ public void executeCommand_listComponentCommand_success() throws BuilderMissingL BuilderIncorrectComponentException, BuilderMissingComponentException { + dataStorage.initStringToComponentListMap(); dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(dataStorage); assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } diff --git a/src/test/resources/chassis.json b/src/test/resources/chassis.json new file mode 100644 index 0000000000..8b99193a65 --- /dev/null +++ b/src/test/resources/chassis.json @@ -0,0 +1,22 @@ +{ + "Fractal Design Pop XL Air": { + "brand": "Fractal Design", + "price": 124.98, + "size": "full" + }, + "Corsair iCUE 4000X RGB": { + "brand": "Corsair", + "price": 144.99, + "size": "mid" + }, + "Cooler Master MasterBox MB311L ARGB": { + "brand": "Cooler Master", + "price": 74.98, + "size": "micro" + }, + "Silverstone SUGO 14": { + "brand": "Silverstone", + "price": 139.36, + "size": "mini" + } +} diff --git a/src/test/resources/cpu.json b/src/test/resources/cpu.json new file mode 100644 index 0000000000..3a169fe01f --- /dev/null +++ b/src/test/resources/cpu.json @@ -0,0 +1,122 @@ +{ + "Intel core i3-10100": { + "price": 99.5, + "cores": 4, + "threads": 8, + "baseClock": 3.6, + "boostClock": 4.3, + "power": 65, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i5-10600k": { + "price": 182.47, + "cores": 6, + "threads": 12, + "baseClock": 4.1, + "boostClock": 4.8, + "power": 125, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i7-10700k": { + "price": 269.95, + "cores": 8, + "threads": 16, + "baseClock": 3.8, + "boostClock": 5.1, + "power": 125, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel core i3-12100f": { + "price": 106.93, + "cores": 4, + "threads": 8, + "baseClock": 3.3, + "boostClock": 4.3, + "power": 58, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel core i5-12600k": { + "price": 213.82, + "cores": 10, + "threads": 20, + "baseClock": 3.7, + "boostClock": 4.9, + "power": 125, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel core i7-12700k": { + "price": 312.88, + "cores": 12, + "threads": 24, + "baseClock": 3.6, + "boostClock": 5.0, + "power": 125, + "brand": "Intel", + "socket": "LGA1700" + }, + "AMD Ryzen 3 3200G": { + "price": 97.5, + "cores": 4, + "threads": 4, + "baseClock": 3.6, + "boostClock": 4.0, + "power": 65, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 5 5600X": { + "price": 156.64, + "cores": 6, + "threads": 12, + "baseClock": 3.7, + "boostClock": 4.6, + "power": 65, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 7 5800X": { + "price": 211.33, + "cores": 8, + "threads": 16, + "baseClock": 3.8, + "boostClock": 4.7, + "power": 105, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 5 7600X": { + "price": 240.86, + "cores": 6, + "threads": 12, + "baseClock": 4.7, + "boostClock": 5.3, + "power": 105, + "brand": "AMD", + "socket": "AM5" + }, + "AMD Ryzen 7 7700X": { + "price": 341.29, + "cores": 8, + "threads": 16, + "baseClock": 4.5, + "boostClock": 5.4, + "power": 105, + "brand": "AMD", + "socket": "AM5" + }, + "AMD Ryzen 9 7950X": { + "price": 589.0, + "cores": 16, + "threads": 32, + "baseClock": 4.5, + "boostClock": 5.7, + "power": 170, + "brand": "AMD", + "socket": "AM5" + } +} diff --git a/src/test/resources/cpucooler.json b/src/test/resources/cpucooler.json new file mode 100644 index 0000000000..d2c77bad70 --- /dev/null +++ b/src/test/resources/cpucooler.json @@ -0,0 +1,30 @@ +{ + "Thermalright AXP90-X36": { + "rpm": 2700, + "noise": 22.4, + "price": 22.9, + "brand": "Thermalright", + "power": 2 + }, + "Noctua NH-L9i": { + "rpm": 2500, + "noise": 23.6, + "price": 44.95, + "brand": "Noctua", + "power": 2 + }, + "NZXT T120 RGB": { + "rpm": 1800, + "noise": 27.5, + "price": 59.9, + "brand": "NZXT", + "power": 2 + }, + "Cooler Master MASTERLIQUID ML120L RGB V2": { + "rpm": 1800, + "noise": 27, + "price": 86.78, + "brand": "Cooler Master", + "power": 2 + } +} diff --git a/src/test/resources/gpu.json b/src/test/resources/gpu.json new file mode 100644 index 0000000000..590ca71cb5 --- /dev/null +++ b/src/test/resources/gpu.json @@ -0,0 +1,26 @@ +{ + "Gigabyte GAMING OC RTX3050": { + "brand": "Gigabyte", + "price": 309.99, + "power": 115, + "size": "mini" + }, + "MSI GeForce RTX 3060 Gaming X12G": { + "brand": "MSI", + "price": 379.99, + "power": 170, + "size": "micro" + }, + "Asus TUF GAMING OC RTX3070 Ti": { + "brand": "Asus", + "price": 786.99, + "power": 290, + "size": "atx" + }, + "MSI GAMING Z TRIO RTX3080": { + "brand": "MSI", + "price": 934.06, + "power": 350, + "size": "atx" + } +} diff --git a/src/test/resources/motherboard.json b/src/test/resources/motherboard.json new file mode 100644 index 0000000000..47a6ecfd27 --- /dev/null +++ b/src/test/resources/motherboard.json @@ -0,0 +1,86 @@ +{ + "Asus Prime Z590-P WiFi": { + "price": 121.99, + "brand": "Asus", + "formFactor": "ATX", + "socket": "LGA1200", + "power": 45 + }, + "MSI MAG Z690 TOMAHAWK WIFI DDR4": { + "price": 239.99, + "brand": "MSI", + "formFactor": "ATX", + "socket": "LGA1700", + "power": 47 + }, + "Asus TUF GAMING X570-PLUS (WI-FI)": { + "price": 209.99, + "brand": "Asus", + "formFactor": "ATX", + "socket": "AM4", + "power": 48 + }, + "Gigabyte B650 AORUS ELITE AX": { + "price": 219.99, + "brand": "Gigabyte", + "formFactor": "ATX", + "socket": "AM5", + "power": 42 + }, + "Asus TUF GAMING B560M-PLUS WIFI": { + "price": 149.99, + "brand": "Asus", + "formFactor": "Micro", + "socket": "LGA1200", + "power": 45 + }, + "ASRock B760M Steel Legend WiFi": { + "price": 139.99, + "brand": "ASRock", + "formFactor": "Micro", + "socket": "LGA1700", + "power": 46 + }, + "MSI B550M PRO-VDH WIFI": { + "price": 119.99, + "brand": "MSI", + "formFactor": "Micro", + "socket": "AM4", + "power": 43 + }, + "Gigabyte B650M DS3H": { + "price": 149.99, + "brand": "Gigabyte", + "formFactor": "Micro", + "socket": "AM5", + "power": 47 + }, + "MSI MPG B560I GAMING EDGE WIFI": { + "price": 149.99, + "brand": "MSI", + "formFactor": "Mini", + "socket": "LGA1200", + "power": 46 + }, + "Asus ROG STRIX B760-I GAMING WIFI": { + "price": 219.99, + "brand": "Asus", + "formFactor": "Mini", + "socket": "LGA1700", + "power": 42 + }, + "ASRock B550M-ITX/ac": { + "price": 119.99, + "brand": "ASRock", + "formFactor": "Mini", + "socket": "AM4", + "power": 45 + }, + "Gigabyte B650I AORUS ULTRA": { + "price": 159.99, + "brand": "Gigabyte", + "formFactor": "Mini", + "socket": "AM5", + "power": 49 + } +} diff --git a/src/test/resources/prebuilt.json b/src/test/resources/prebuilt.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/test/resources/psu.json b/src/test/resources/psu.json new file mode 100644 index 0000000000..f843680c51 --- /dev/null +++ b/src/test/resources/psu.json @@ -0,0 +1,9 @@ +{ + "SeaSonic FOCUS PLUS 850 Gold": { + "brand": "SeaSonic", + "efficiency": "Gold", + "formFactor": "atx", + "power": 850, + "price": 159.94 + } +} diff --git a/src/test/resources/ram.json b/src/test/resources/ram.json new file mode 100644 index 0000000000..eb075d2e9a --- /dev/null +++ b/src/test/resources/ram.json @@ -0,0 +1,34 @@ +{ + "Kingston FURY Beast 16 GB": { + "price": 43.98, + "memory": 8, + "sticks": 2, + "speed": 3200, + "brand": "Kingston", + "power": 5 + }, + "G.Skill Ripjaws X 8 GB": { + "price": 22.99, + "memory": 8, + "sticks": 1, + "speed": 1600, + "brand": "G.Skill", + "power": 3 + }, + "Corsair Vengeance RGB Pro 32 GB": { + "price": 104.99, + "memory": 16, + "sticks": 2, + "speed": 3600, + "brand": "Corsair", + "power": 8 + }, + "G.Skill Trident Z RGB 64 GB": { + "price": 164.99, + "memory": 32, + "sticks": 2, + "speed": 3200, + "brand": "G.Skill", + "power": 10 + } +} diff --git a/src/test/resources/storage.json b/src/test/resources/storage.json new file mode 100644 index 0000000000..11f53c23ce --- /dev/null +++ b/src/test/resources/storage.json @@ -0,0 +1,30 @@ +{ + "ADATA XPG SPECTRIX S40G RGB": { + "type": "M.2 SSD", + "size": 512, + "price": 54.99, + "brand": "ADATA", + "power": 4.5 + }, + "Seagate BarraCuda": { + "type": "HDD", + "size": 1024, + "price": 95.0, + "brand": "Seagate", + "power": 6.8 + }, + "Samsung 980 Pro": { + "type": "M.2 SSD", + "size": 2048, + "price": 159.99, + "brand": "Samsung", + "power": 5.2 + }, + "Western Digital Blue": { + "type": "SATA SSD", + "size": 4096, + "price": 229.96, + "brand": "Western Digital", + "power": 2.8 + } +} From 6015bd81809a756a79c4dfb494d0b420bd6063a0 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 02:22:14 +0800 Subject: [PATCH 143/420] Added prebuilts to app --- .../seedu/bigpp/datastorage/DataStorage.java | 2 +- src/main/resources/prebuilt.json | 212 ++++++++++++++++++ src/test/resources/prebuilt.json | 212 ++++++++++++++++++ 3 files changed, 425 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 930e6980bb..bcfccbbdf0 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -326,7 +326,7 @@ public void loadPrebuiltPcs(String path) { // read entire file into string String json = reader.lines().reduce("", (accumulator, actual) -> accumulator + actual); - pcList = (GSON.fromJson(json, new TypeToken>() { + pcList = (GSON.fromJson(json, new TypeToken() { }.getType())); // If there are no prebuilt PCs, ensure that PCList is not null diff --git a/src/main/resources/prebuilt.json b/src/main/resources/prebuilt.json index e69de29bb2..d8b5da9015 100644 --- a/src/main/resources/prebuilt.json +++ b/src/main/resources/prebuilt.json @@ -0,0 +1,212 @@ +[ + { + "name": "beginner", + "isPrebuilt": true, + "cpu": { + "cores": 4, + "threads": 8, + "baseClock": 3.6, + "boostClock": 4.3, + "power": 65.0, + "socket": "LGA1200", + "name": "Intel core i3-10100", + "brand": "Intel", + "price": 99.5 + }, + "cpuCooler": { + "rpm": 2700, + "noise": 22.4, + "power": 2.0, + "name": "Thermalright AXP90-X36", + "brand": "Thermalright", + "price": 22.9 + }, + "gpu": { + "power": 115.0, + "size": "mini", + "name": "Gigabyte GAMING OC RTX3050", + "brand": "Gigabyte", + "price": 309.99 + }, + "motherboard": { + "formFactor": "ATX", + "socket": "LGA1200", + "power": 45.0, + "name": "Asus Prime Z590-P WiFi", + "brand": "Asus", + "price": 121.99 + }, + "ram": { + "memory": 8, + "sticks": 2, + "speed": 3200, + "power": 5.0, + "name": "Kingston FURY Beast 16 GB", + "brand": "Kingston", + "price": 43.98 + }, + "storage": { + "type": "M.2 SSD", + "size": 512, + "power": 4.5, + "name": "ADATA XPG SPECTRIX S40G RGB", + "brand": "ADATA", + "price": 54.99 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + }, + { + "name": "intermediate", + "isPrebuilt": true, + "cpu": { + "cores": 4, + "threads": 4, + "baseClock": 3.6, + "boostClock": 4.0, + "power": 65.0, + "socket": "AM4", + "name": "AMD Ryzen 3 3200G", + "brand": "AMD", + "price": 97.5 + }, + "cpuCooler": { + "rpm": 2500, + "noise": 23.6, + "power": 2.0, + "name": "Noctua NH-L9i", + "brand": "Noctua", + "price": 44.95 + }, + "gpu": { + "power": 290.0, + "size": "atx", + "name": "Asus TUF GAMING OC RTX3070 Ti", + "brand": "Asus", + "price": 786.99 + }, + "motherboard": { + "formFactor": "ATX", + "socket": "AM4", + "power": 48.0, + "name": "Asus TUF GAMING X570-PLUS (WI-FI)", + "brand": "Asus", + "price": 209.99 + }, + "ram": { + "memory": 16, + "sticks": 2, + "speed": 3600, + "power": 8.0, + "name": "Corsair Vengeance RGB Pro 32 GB", + "brand": "Corsair", + "price": 104.99 + }, + "storage": { + "type": "HDD", + "size": 1024, + "power": 6.8, + "name": "Seagate BarraCuda", + "brand": "Seagate", + "price": 95.0 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + }, + { + "name": "advanced", + "isPrebuilt": true, + "cpu": { + "cores": 16, + "threads": 32, + "baseClock": 4.5, + "boostClock": 5.7, + "power": 170.0, + "socket": "AM5", + "name": "AMD Ryzen 9 7950X", + "brand": "AMD", + "price": 589.0 + }, + "cpuCooler": { + "rpm": 1800, + "noise": 27.0, + "power": 2.0, + "name": "Cooler Master MASTERLIQUID ML120L RGB V2", + "brand": "Cooler Master", + "price": 86.78 + }, + "gpu": { + "power": 350.0, + "size": "atx", + "name": "MSI GAMING Z TRIO RTX3080", + "brand": "MSI", + "price": 934.06 + }, + "motherboard": { + "formFactor": "Mini", + "socket": "AM5", + "power": 49.0, + "name": "Gigabyte B650I AORUS ULTRA", + "brand": "Gigabyte", + "price": 159.99 + }, + "ram": { + "memory": 32, + "sticks": 2, + "speed": 3200, + "power": 10.0, + "name": "G.Skill Trident Z RGB 64 GB", + "brand": "G.Skill", + "price": 164.99 + }, + "storage": { + "type": "M.2 SSD", + "size": 512, + "power": 4.5, + "name": "ADATA XPG SPECTRIX S40G RGB", + "brand": "ADATA", + "price": 54.99 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + } +] diff --git a/src/test/resources/prebuilt.json b/src/test/resources/prebuilt.json index e69de29bb2..d8b5da9015 100644 --- a/src/test/resources/prebuilt.json +++ b/src/test/resources/prebuilt.json @@ -0,0 +1,212 @@ +[ + { + "name": "beginner", + "isPrebuilt": true, + "cpu": { + "cores": 4, + "threads": 8, + "baseClock": 3.6, + "boostClock": 4.3, + "power": 65.0, + "socket": "LGA1200", + "name": "Intel core i3-10100", + "brand": "Intel", + "price": 99.5 + }, + "cpuCooler": { + "rpm": 2700, + "noise": 22.4, + "power": 2.0, + "name": "Thermalright AXP90-X36", + "brand": "Thermalright", + "price": 22.9 + }, + "gpu": { + "power": 115.0, + "size": "mini", + "name": "Gigabyte GAMING OC RTX3050", + "brand": "Gigabyte", + "price": 309.99 + }, + "motherboard": { + "formFactor": "ATX", + "socket": "LGA1200", + "power": 45.0, + "name": "Asus Prime Z590-P WiFi", + "brand": "Asus", + "price": 121.99 + }, + "ram": { + "memory": 8, + "sticks": 2, + "speed": 3200, + "power": 5.0, + "name": "Kingston FURY Beast 16 GB", + "brand": "Kingston", + "price": 43.98 + }, + "storage": { + "type": "M.2 SSD", + "size": 512, + "power": 4.5, + "name": "ADATA XPG SPECTRIX S40G RGB", + "brand": "ADATA", + "price": 54.99 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + }, + { + "name": "intermediate", + "isPrebuilt": true, + "cpu": { + "cores": 4, + "threads": 4, + "baseClock": 3.6, + "boostClock": 4.0, + "power": 65.0, + "socket": "AM4", + "name": "AMD Ryzen 3 3200G", + "brand": "AMD", + "price": 97.5 + }, + "cpuCooler": { + "rpm": 2500, + "noise": 23.6, + "power": 2.0, + "name": "Noctua NH-L9i", + "brand": "Noctua", + "price": 44.95 + }, + "gpu": { + "power": 290.0, + "size": "atx", + "name": "Asus TUF GAMING OC RTX3070 Ti", + "brand": "Asus", + "price": 786.99 + }, + "motherboard": { + "formFactor": "ATX", + "socket": "AM4", + "power": 48.0, + "name": "Asus TUF GAMING X570-PLUS (WI-FI)", + "brand": "Asus", + "price": 209.99 + }, + "ram": { + "memory": 16, + "sticks": 2, + "speed": 3600, + "power": 8.0, + "name": "Corsair Vengeance RGB Pro 32 GB", + "brand": "Corsair", + "price": 104.99 + }, + "storage": { + "type": "HDD", + "size": 1024, + "power": 6.8, + "name": "Seagate BarraCuda", + "brand": "Seagate", + "price": 95.0 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + }, + { + "name": "advanced", + "isPrebuilt": true, + "cpu": { + "cores": 16, + "threads": 32, + "baseClock": 4.5, + "boostClock": 5.7, + "power": 170.0, + "socket": "AM5", + "name": "AMD Ryzen 9 7950X", + "brand": "AMD", + "price": 589.0 + }, + "cpuCooler": { + "rpm": 1800, + "noise": 27.0, + "power": 2.0, + "name": "Cooler Master MASTERLIQUID ML120L RGB V2", + "brand": "Cooler Master", + "price": 86.78 + }, + "gpu": { + "power": 350.0, + "size": "atx", + "name": "MSI GAMING Z TRIO RTX3080", + "brand": "MSI", + "price": 934.06 + }, + "motherboard": { + "formFactor": "Mini", + "socket": "AM5", + "power": 49.0, + "name": "Gigabyte B650I AORUS ULTRA", + "brand": "Gigabyte", + "price": 159.99 + }, + "ram": { + "memory": 32, + "sticks": 2, + "speed": 3200, + "power": 10.0, + "name": "G.Skill Trident Z RGB 64 GB", + "brand": "G.Skill", + "price": 164.99 + }, + "storage": { + "type": "M.2 SSD", + "size": 512, + "power": 4.5, + "name": "ADATA XPG SPECTRIX S40G RGB", + "brand": "ADATA", + "price": 54.99 + }, + "psu": { + "efficiency": "Gold", + "formFactor": "atx", + "power": 850.0, + "name": "SeaSonic FOCUS PLUS 850 Gold", + "brand": "SeaSonic", + "price": 159.94 + }, + "chassis": { + "size": "full", + "name": "Fractal Design Pop XL Air", + "brand": "Fractal Design", + "price": 124.98 + }, + "budget": 0 + } +] From 58104cd1dc82208e710414f01783a7fcf88f6984 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 02:29:01 +0800 Subject: [PATCH 144/420] Fix bug that saved prebuilts into user folder --- .../seedu/bigpp/datastorage/DataStorage.java | 11 ++++++++ text-ui-test/EXPECTED.TXT | 27 ++++++++++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index bcfccbbdf0..b7067ccc75 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -66,7 +66,18 @@ public void saveUserPcs() { } try (FileWriter fileWriter = new FileWriter(file)) { + + // remove prebuilt PCs from list, we do not want prebuilts to be saved in the + // user file + for (int i = 0; i < pcList.size(); i++) { + if (pcList.get(i).getIsPreBuilt()) { + pcList.remove(i); + i--; + } + } + fileWriter.write(GSON.toJson(pcList)); + } catch (IOException e) { out.println("Error writing to user file, data will not be saved."); } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 5096a8631d..2313840ed3 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,5 @@ +User file does not exist. Creating new user file. +User PCs found, loading... _____ _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /\ \ /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ @@ -24,7 +26,10 @@ Welcome to BigPP! =================================================== PC viewer -List currently empty! +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $813.29 +2.Prebuilt-PC: [intermediate] - $1499.36 +3.Prebuilt-PC: [advanced] - $2149.75 What would you like to do? Add PC View PC @@ -37,7 +42,10 @@ exit =================================================== PC viewer Here is the list of PC Builds: -1.Custom-PC: [newpc1] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29 +2.Prebuilt-PC: [intermediate] - $1499.36 +3.Prebuilt-PC: [advanced] - $2149.75 +4.Custom-PC: [newpc1] - $0.0 What would you like to do? Add PC View PC @@ -51,8 +59,11 @@ Custom PC: [ newpc1 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Custom-PC: [newpc1] - $0.0 -2.Custom-PC: [newpc2] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29 +2.Prebuilt-PC: [intermediate] - $1499.36 +3.Prebuilt-PC: [advanced] - $2149.75 +4.Custom-PC: [newpc1] - $0.0 +5.Custom-PC: [newpc2] - $0.0 What would you like to do? Add PC View PC @@ -66,7 +77,11 @@ Custom PC: [ newpc2 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Custom-PC: [newpc2] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29 +2.Prebuilt-PC: [intermediate] - $1499.36 +3.Prebuilt-PC: [advanced] - $2149.75 +4.Custom-PC: [newpc1] - $0.0 +5.Custom-PC: [newpc2] - $0.0 What would you like to do? Add PC View PC @@ -75,4 +90,4 @@ Delete PC back exit =================================================== -Custom PC: [ newpc1 ] has been deleted +Unable to delete Prebuilt PC From 15cd2b561ef504d6b11c01e7deb8c862a9716d56 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 02:34:15 +0800 Subject: [PATCH 145/420] Change pcList method for additional commands --- .../bigpp/command/buildercommand/BuilderInfoCommand.java | 5 ++--- .../command/buildercommand/BuilderUnselectCommand.java | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java index 43ff2fc07f..b842287396 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java @@ -5,7 +5,6 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderNoInfoException; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class BuilderInfoCommand extends Command { @@ -36,12 +35,12 @@ public String executeCommand(DataStorage dataStorage) } int pcIndex = UI.builderMenu.getPCIndex(); - if (PCList.getPC(pcIndex).getComponent(componentTypeString) == null) { + if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { throw new BuilderNoInfoException(); } String outputString = "Here is the specifications of your selected " + componentTypeString + ": \n"; - return outputString + PCList.getPC(pcIndex).getComponent(componentTypeString); + return outputString + dataStorage.pcList.get(pcIndex).getComponent(componentTypeString); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java index b550685c06..b66941fd43 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -5,7 +5,6 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderNullComponentException; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class BuilderUnselectCommand extends Command { @@ -38,13 +37,13 @@ public String executeCommand(DataStorage dataStorage) int pcIndex = UI.builderMenu.getPCIndex(); - if (PCList.getPC(pcIndex).getComponent(componentTypeString) == null) { + if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { throw new BuilderNullComponentException(); } - PCList.getPC(pcIndex).setNullComponent(componentTypeString); + dataStorage.pcList.get(pcIndex).setNullComponent(componentTypeString); - assert PCList.getPC(pcIndex).getComponent(componentTypeString) == null : "Component should be null"; + assert dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null : "Component should be null"; return componentTypeString + " removed!"; } From db3e3b978fa591410e6f19a280f99631913c0285 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 03:02:56 +0800 Subject: [PATCH 146/420] Solve issue with infinite budget setting, also improved the way we handled saving data --- src/main/java/seedu/bigpp/BigPP.java | 2 -- .../buildercommand/BuilderEditBudgetCommand.java | 4 ++-- .../bigpp/command/commoncommand/ByeCommand.java | 3 ++- .../java/seedu/bigpp/datastorage/DataStorage.java | 9 +++++---- .../BuilderInvalidTypeBudgetException.java | 2 +- src/main/java/seedu/bigpp/pc/PC.java | 13 +++++++------ src/main/java/seedu/bigpp/ui/UI.java | 3 +++ src/main/resources/prebuilt.json | 6 +++--- src/test/resources/prebuilt.json | 6 +++--- 9 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 2d50339262..bce7c37bce 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -68,8 +68,6 @@ private void runLoopUntilExit() { assert command != null : "Command should not be null"; - assert command != null : "Command should not be null"; - UI.updateUI(false, dataStorage); UI.showResult(result); } while (!(command instanceof ByeCommand)); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 720f30c009..fe5b4cd5fb 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -27,13 +27,13 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (argument.equals("")) { throw new BuilderMissingBudgetException(); } - if (argument.matches(".*\\D.*")) { + if (argument.matches(".*\\D.*") && !argument.matches("-1")) { throw new BuilderInvalidTypeBudgetException(); } int budget = Integer.parseInt(super.getArguments()); - if (budget <= 0) { + if (budget <= 0 && budget != -1) { throw new BuilderInvalidNumberBudgetException(); } diff --git a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java index 94b90b5326..7a771ee004 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/ByeCommand.java @@ -2,16 +2,17 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.ui.UI; public class ByeCommand extends Command { /* * bye command to exit the program - * * @return the message displaying the exit message */ @Override public String executeCommand(DataStorage dataStorage) { + UI.setPCViewerMode(); dataStorage.saveUserPcs(); return "Bye. Hope to see you again soon!"; } diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index b7067ccc75..78c85fbddd 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -65,18 +65,19 @@ public void saveUserPcs() { out.println("Error creating user file, data will not be saved."); } + PCList toSaveList = new PCList(); + try (FileWriter fileWriter = new FileWriter(file)) { // remove prebuilt PCs from list, we do not want prebuilts to be saved in the // user file for (int i = 0; i < pcList.size(); i++) { - if (pcList.get(i).getIsPreBuilt()) { - pcList.remove(i); - i--; + if (!pcList.get(i).getIsPreBuilt()) { + toSaveList.add(pcList.get(i)); } } - fileWriter.write(GSON.toJson(pcList)); + fileWriter.write(GSON.toJson(toSaveList)); } catch (IOException e) { out.println("Error writing to user file, data will not be saved."); diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java index d27b0b46f5..b0f28aebbe 100644 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java @@ -5,6 +5,6 @@ public class BuilderInvalidTypeBudgetException extends PPException { @Override public String getMessage() { - return "Please enter a budget that an integer"; + return "Please enter a budget that is an integer"; } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 8071f087f3..36118a1f97 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -9,6 +9,7 @@ import seedu.bigpp.component.psu.PSU; import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.ui.UI; import java.text.DecimalFormat; @@ -26,8 +27,6 @@ public class PC { private int budget = -1; - private DecimalFormat moneyDecimalFormat = new DecimalFormat("#.00"); - public PC(String name, Boolean isPrebuilt) { this.name = name; this.isPrebuilt = isPrebuilt; @@ -84,7 +83,8 @@ public void setComponent(Component component) { setChassis((Chassis) component); } } - public void setNullComponent(String componentType){ + + public void setNullComponent(String componentType) { if (componentType.equals("cpu")) { setCPU(null); } else if (componentType.equals("cpu-cooler")) { @@ -177,8 +177,9 @@ public boolean getIsPreBuilt() { public int getBudget() { return budget; } + public String getBudgetString() { - return (budget == -1) ? "infinite" : "$" +moneyDecimalFormat.format(budget); + return (budget == -1) ? "infinite" : "$" + UI.moneyDecimalFormat.format(budget); } /** @@ -194,7 +195,7 @@ public float getCost() { } } // give price to 2 dp - totalCost = Float.parseFloat(moneyDecimalFormat.format(totalCost)); + totalCost = Float.parseFloat(UI.moneyDecimalFormat.format(totalCost)); return totalCost; } @@ -216,7 +217,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 1319cfa859..cb6bc674f1 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -5,12 +5,15 @@ import seedu.bigpp.menu.PCViewerMenu; import java.io.PrintStream; +import java.text.DecimalFormat; import java.util.Scanner; public abstract class UI { public static PrintStream out = System.out; public static PCBuilderMenu builderMenu = null; + public static DecimalFormat moneyDecimalFormat = new DecimalFormat("#.##"); + private static final String LOGO1 = " _____ _____ " + " _____ _____ " + " _____ \n" diff --git a/src/main/resources/prebuilt.json b/src/main/resources/prebuilt.json index d8b5da9015..377501e19f 100644 --- a/src/main/resources/prebuilt.json +++ b/src/main/resources/prebuilt.json @@ -67,7 +67,7 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 }, { "name": "intermediate", @@ -137,7 +137,7 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 }, { "name": "advanced", @@ -207,6 +207,6 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 } ] diff --git a/src/test/resources/prebuilt.json b/src/test/resources/prebuilt.json index d8b5da9015..377501e19f 100644 --- a/src/test/resources/prebuilt.json +++ b/src/test/resources/prebuilt.json @@ -67,7 +67,7 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 }, { "name": "intermediate", @@ -137,7 +137,7 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 }, { "name": "advanced", @@ -207,6 +207,6 @@ "brand": "Fractal Design", "price": 124.98 }, - "budget": 0 + "budget": -1 } ] From 6e269acee5a70da0ffdcb7c111fe5a1ab132ca87 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 03:06:42 +0800 Subject: [PATCH 147/420] Solve the issue with decimal formatting --- src/main/java/seedu/bigpp/pc/PC.java | 4 +--- src/main/java/seedu/bigpp/ui/UI.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 36118a1f97..8184d5c302 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -11,8 +11,6 @@ import seedu.bigpp.component.storage.Storage; import seedu.bigpp.ui.UI; -import java.text.DecimalFormat; - public class PC { private String name; private Boolean isPrebuilt; @@ -217,7 +215,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index cb6bc674f1..c14afa2fe6 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -12,7 +12,7 @@ public abstract class UI { public static PrintStream out = System.out; public static PCBuilderMenu builderMenu = null; - public static DecimalFormat moneyDecimalFormat = new DecimalFormat("#.##"); + public static DecimalFormat moneyDecimalFormat = new DecimalFormat("#.00"); private static final String LOGO1 = " _____ _____ " + " _____ _____ " From 16282d4e093c210bdd17ca8c16e563e553f80235 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 03:08:42 +0800 Subject: [PATCH 148/420] Change expected.txt to match actual --- text-ui-test/EXPECTED.TXT | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 2313840ed3..dd7bc4b0a6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -27,9 +27,9 @@ Welcome to BigPP! =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29 -2.Prebuilt-PC: [intermediate] - $1499.36 -3.Prebuilt-PC: [advanced] - $2149.75 +1.Prebuilt-PC: [beginner] - $813.29/infinite +2.Prebuilt-PC: [intermediate] - $1499.36/infinite +3.Prebuilt-PC: [advanced] - $2149.75/infinite What would you like to do? Add PC View PC @@ -42,10 +42,10 @@ exit =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29 -2.Prebuilt-PC: [intermediate] - $1499.36 -3.Prebuilt-PC: [advanced] - $2149.75 -4.Custom-PC: [newpc1] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29/infinite +2.Prebuilt-PC: [intermediate] - $1499.36/infinite +3.Prebuilt-PC: [advanced] - $2149.75/infinite +4.Custom-PC: [newpc1] - $0.0/infinite What would you like to do? Add PC View PC @@ -59,11 +59,11 @@ Custom PC: [ newpc1 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29 -2.Prebuilt-PC: [intermediate] - $1499.36 -3.Prebuilt-PC: [advanced] - $2149.75 -4.Custom-PC: [newpc1] - $0.0 -5.Custom-PC: [newpc2] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29/infinite +2.Prebuilt-PC: [intermediate] - $1499.36/infinite +3.Prebuilt-PC: [advanced] - $2149.75/infinite +4.Custom-PC: [newpc1] - $0.0/infinite +5.Custom-PC: [newpc2] - $0.0/infinite What would you like to do? Add PC View PC @@ -77,11 +77,11 @@ Custom PC: [ newpc2 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29 -2.Prebuilt-PC: [intermediate] - $1499.36 -3.Prebuilt-PC: [advanced] - $2149.75 -4.Custom-PC: [newpc1] - $0.0 -5.Custom-PC: [newpc2] - $0.0 +1.Prebuilt-PC: [beginner] - $813.29/infinite +2.Prebuilt-PC: [intermediate] - $1499.36/infinite +3.Prebuilt-PC: [advanced] - $2149.75/infinite +4.Custom-PC: [newpc1] - $0.0/infinite +5.Custom-PC: [newpc2] - $0.0/infinite What would you like to do? Add PC View PC From 75f2011e3c2075694efabd84cf5318418df83719 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 16 Mar 2023 12:16:45 +0800 Subject: [PATCH 149/420] Add assertion checking to gradle --- BigPP.log.lck | 0 build.gradle | 1 + src/main/java/seedu/bigpp/BigPP.java | 1 - 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck new file mode 100644 index 0000000000..e69de29bb2 diff --git a/build.gradle b/build.gradle index 840fc0efc9..f83d0f4674 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,7 @@ checkstyle { run{ standardInput = System.in + enableAssertions = true } jar { diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index bce7c37bce..3154eceadf 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -39,7 +39,6 @@ public void run() { * Runs the program until the user issues the exit command. */ private void runLoopUntilExit() { - LOGGER.setLevel(Level.INFO); try { FileHandler handler = new FileHandler("BigPP.log", true); From 4c6b65068eacfb937d9d3e19634c2ce94c7f1f44 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 16 Mar 2023 12:25:21 +0800 Subject: [PATCH 150/420] ignore log file --- BigPP.log.lck | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 From 1aef37e40d033830fb1a1c3921ef1980534c515c Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 15:48:24 +0800 Subject: [PATCH 151/420] Make editting prebuilt create a copy instead of editting the prebuilt --- BigPP.log.lck | 0 .../viewercommand/ViewerEditCommand.java | 8 +++++++ src/main/java/seedu/bigpp/pc/PC.java | 22 +++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index f48c85c8ff..b3eeacf072 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; +import seedu.bigpp.pc.PC; import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.ui.UI; @@ -38,6 +39,13 @@ public String executeCommand(DataStorage dataStorage) throw new PPIndexOutOfBoundsException(); } + // if the PC is pre-built, create a copy of the PC to edit + if (dataStorage.pcList.get(pcIndex).getIsPreBuilt()) { + PC pcCopy = new PC(dataStorage.pcList.get(pcIndex)); + dataStorage.pcList.add(pcCopy); + pcIndex = dataStorage.pcList.size() - 1; + } + UI.setPCBuilderMode(pcIndex); return "Currently editing PC: " + dataStorage.pcList.get(pcIndex).getName(); } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 8184d5c302..e3a0be593f 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -30,11 +30,25 @@ public PC(String name, Boolean isPrebuilt) { this.isPrebuilt = isPrebuilt; } + public PC(PC pcCopy) { + this.name = pcCopy.getName() + " (copy)"; + this.isPrebuilt = false; + this.cpu = pcCopy.getCpu(); + this.cpuCooler = pcCopy.getCpuCooler(); + this.gpu = pcCopy.getGpu(); + this.motherboard = pcCopy.getMotherboard(); + this.ram = pcCopy.getRam(); + this.storage = pcCopy.getStorage(); + this.psu = pcCopy.getPsu(); + this.chassis = pcCopy.getChassis(); + this.budget = pcCopy.getBudget(); + } + public void setChassis(Chassis chassis) { this.chassis = chassis; } - public void setCPU(CPU cpu) { + public void setCpu(CPU cpu) { this.cpu = cpu; } @@ -64,7 +78,7 @@ public void setPsu(PSU psu) { public void setComponent(Component component) { if (component instanceof CPU) { - setCPU((CPU) component); + setCpu((CPU) component); } else if (component instanceof CPUCooler) { setCpuCooler((CPUCooler) component); } else if (component instanceof GPU) { @@ -84,7 +98,7 @@ public void setComponent(Component component) { public void setNullComponent(String componentType) { if (componentType.equals("cpu")) { - setCPU(null); + setCpu(null); } else if (componentType.equals("cpu-cooler")) { setCpuCooler(null); } else if (componentType.equals("gpu")) { @@ -215,7 +229,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; From b545ca38d1e6edadd36814e2b6ee611febf30863 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 15:50:43 +0800 Subject: [PATCH 152/420] Fix checkstyle --- src/main/java/seedu/bigpp/pc/PC.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index e3a0be593f..6b4090a87d 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -229,7 +229,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; From 76fcb28e5a11e0f70897e4c5a840c286ee1ab11a Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 17:59:03 +0800 Subject: [PATCH 153/420] Custom CPU selection for builder --- BigPP.log.lck | 0 .../BuilderCustomCpuCommand.java | 64 +++++++++++++++++++ .../commoncommand/UnrecognizedCommand.java | 10 ++- .../seedu/bigpp/component/ComponentType.java | 13 ++++ .../bigpp/component/chassis/Chassis.java | 3 +- .../java/seedu/bigpp/component/cpu/CPU.java | 9 +-- .../bigpp/component/cpucooler/CPUCooler.java | 3 +- .../java/seedu/bigpp/component/gpu/GPU.java | 3 +- .../component/motherboard/Motherboard.java | 3 +- .../java/seedu/bigpp/component/psu/PSU.java | 3 +- .../java/seedu/bigpp/component/ram/RAM.java | 3 +- .../bigpp/component/storage/Storage.java | 3 +- .../seedu/bigpp/datastorage/DataStorage.java | 56 +++++++++------- ...rInvalidCustomArgumentLengthException.java | 10 +++ src/main/java/seedu/bigpp/parser/Parser.java | 48 +++++++++++++- src/main/java/seedu/bigpp/pc/PC.java | 48 ++++++++------ .../{cpucooler.json => cpu-cooler.json} | 0 .../BuilderListComponentCommandTest.java | 3 +- .../{cpucooler.json => cpu-cooler.json} | 0 19 files changed, 221 insertions(+), 61 deletions(-) delete mode 100644 BigPP.log.lck create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java create mode 100644 src/main/java/seedu/bigpp/component/ComponentType.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java rename src/main/resources/{cpucooler.json => cpu-cooler.json} (100%) rename src/test/resources/{cpucooler.json => cpu-cooler.json} (100%) diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java new file mode 100644 index 0000000000..c660824508 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -0,0 +1,64 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidCustomArgumentLengthException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomCpuCommand extends Command { + + public BuilderCustomCpuCommand(String arguments) { + super.setArguments(arguments); + } + + @Override + public String executeCommand(DataStorage dataStorage) throws BuilderInvalidCustomArgumentLengthException { + String arguments = super.getArguments(); + String[] argumentList = arguments.split("\\|"); + + if (argumentList.length != 9) { + throw new BuilderInvalidCustomArgumentLengthException(); + } + + String name = argumentList[0].trim(); + if (name.equals("")) { + return "Please enter a valid name for the custom component"; + } + + String brand = argumentList[1].trim(); + if (brand.equals("")) { + return "Please enter a valid brand for the custom component"; + } + + float price = 0; + int cores = 0; + int threads = 0; + float baseClock = 0; + float boostClock = 0; + float power = 0; + + try { + price = Float.parseFloat(argumentList[2]); + cores = Integer.parseInt(argumentList[3]); + threads = Integer.parseInt(argumentList[4]); + baseClock = Float.parseFloat(argumentList[5]); + boostClock = Float.parseFloat(argumentList[6]); + power = Float.parseFloat(argumentList[7]); + } catch (NumberFormatException e) { + return "price, baseClock, boostClock and power should be a float, cores and threads should be an integer"; + } + + String socket = argumentList[8].trim(); + if (socket.equals("")) { + return "Please enter a valid socket for the custom component"; + } + + CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); + + dataStorage.pcList.get(UI.builderMenu.getPCIndex()).setCpu(cpu); + + return "CPU added: " + cpu.getName(); + } + +} diff --git a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java index 15cf0fb6e2..76e8fbeee7 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/UnrecognizedCommand.java @@ -5,13 +5,19 @@ public class UnrecognizedCommand extends Command { + public UnrecognizedCommand(String arguments) { + setArguments(arguments); + } + /* * Unrecognized command to be executed when the user inputs an invalid command - * * @return the message to be displaying an unrecognised command received */ @Override public String executeCommand(DataStorage dataStorage) { - return "Unrecognised command."; + if (super.getArguments().equals("")) { + return "Unrecognised command."; + } + return "Unrecognised command: " + super.getArguments(); } } diff --git a/src/main/java/seedu/bigpp/component/ComponentType.java b/src/main/java/seedu/bigpp/component/ComponentType.java new file mode 100644 index 0000000000..6dddc47390 --- /dev/null +++ b/src/main/java/seedu/bigpp/component/ComponentType.java @@ -0,0 +1,13 @@ +package seedu.bigpp.component; + +public class ComponentType { + public static final String CPU_TYPE = "cpu"; + public static final String GPU_TYPE = "gpu"; + public static final String RAM_TYPE = "ram"; + public static final String STORAGE_TYPE = "storage"; + public static final String PSU_TYPE = "psu"; + public static final String MOTHERBOARD_TYPE = "motherboard"; + public static final String CHASSIS_TYPE = "chassis"; + public static final String CPU_COOLER_TYPE = "cpu-cooler"; + +} diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index 65c09cb6dc..a12b9ddb3e 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.chassis; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; public class Chassis extends Component { - public static final String COMPONENT_STRING = "chassis"; + public static final String COMPONENT_STRING = CHASSIS_TYPE; private String size; diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 98bdc4504e..75d26c4851 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.cpu; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; public class CPU extends Component { - public static final String COMPONENT_STRING = "cpu"; + public static final String COMPONENT_STRING = CPU_TYPE; private int cores; private int threads; private float baseClock; @@ -11,8 +12,8 @@ public class CPU extends Component { private float power; private String socket; - public CPU(String name, float price, int cores, int threads, float baseClock, float boostClock, float power, - String brand, String socket) { + public CPU(String name, String brand, float price, int cores, int threads, float baseClock, float boostClock, + float power, String socket) { super.setName(name); super.setBrand(brand); super.setPrice(price); @@ -74,7 +75,7 @@ public void setSocket(String socket) { @Override public String toString() { - return "NAME: " + super.getName() + + return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nCORES: " + cores + diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java index 06e21d0474..4e0a00e3b5 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.cpucooler; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; public class CPUCooler extends Component { - public static final String COMPONENT_STRING = "cpu-cooler"; + public static final String COMPONENT_STRING = CPU_COOLER_TYPE; private int rpm; private float noise; private float power; diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index 0945fea644..b119acb7f0 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.gpu; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; public class GPU extends Component { - public static final String COMPONENT_STRING = "gpu"; + public static final String COMPONENT_STRING = GPU_TYPE; private float power; private String size; diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index b852c25e4e..05a84dbfe7 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.motherboard; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; public class Motherboard extends Component { - public static final String COMPONENT_STRING = "motherboard"; + public static final String COMPONENT_STRING = MOTHERBOARD_TYPE; private String formFactor; private String socket; private float power; diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index ea83d4dc08..3b404f41c2 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.psu; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; public class PSU extends Component { - public static final String COMPONENT_STRING = "psu"; + public static final String COMPONENT_STRING = PSU_TYPE; private String efficiency; private String formFactor; private float power; diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java index 7be6c71cf0..7d7bd3507f 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAM.java +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.ram; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; public class RAM extends Component { - public static final String COMPONENT_STRING = "ram"; + public static final String COMPONENT_STRING = RAM_TYPE; private int memory; private int sticks; private int speed; diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index 839cc340ee..8ff90b97f5 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -1,9 +1,10 @@ package seedu.bigpp.component.storage; import seedu.bigpp.component.Component; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; public class Storage extends Component { - public static final String COMPONENT_STRING = "storage"; + public static final String COMPONENT_STRING = STORAGE_TYPE; private String type; private int size; // in GB private float power; diff --git a/src/main/java/seedu/bigpp/datastorage/DataStorage.java b/src/main/java/seedu/bigpp/datastorage/DataStorage.java index 78c85fbddd..1f563dd984 100644 --- a/src/main/java/seedu/bigpp/datastorage/DataStorage.java +++ b/src/main/java/seedu/bigpp/datastorage/DataStorage.java @@ -33,17 +33,25 @@ import seedu.bigpp.pc.PC; import seedu.bigpp.pc.PCList; import seedu.bigpp.component.ComponentList; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; import static seedu.bigpp.ui.UI.out; public class DataStorage { - private static final String CHASSIS_PATH = "chassis.json"; - private static final String CPU_PATH = "cpu.json"; - private static final String CPU_COOLER_PATH = "cpucooler.json"; - private static final String GPU_PATH = "gpu.json"; - private static final String MOTHERBOARD_PATH = "motherboard.json"; - private static final String PSU_PATH = "psu.json"; - private static final String RAM_PATH = "ram.json"; - private static final String STORAGE_PATH = "storage.json"; + private static final String CHASSIS_PATH = CHASSIS_TYPE + ".json"; + private static final String CPU_PATH = CPU_TYPE + ".json"; + private static final String CPU_COOLER_PATH = CPU_COOLER_TYPE + ".json"; + private static final String GPU_PATH = GPU_TYPE + ".json"; + private static final String MOTHERBOARD_PATH = MOTHERBOARD_TYPE + ".json"; + private static final String PSU_PATH = PSU_TYPE + ".json"; + private static final String RAM_PATH = RAM_TYPE + ".json"; + private static final String STORAGE_PATH = STORAGE_TYPE + ".json"; private static final String PREBUILT_PATH = "prebuilt.json"; private static final String USER_PATH = "./user.json"; @@ -106,14 +114,14 @@ public void loadAll() { } public void initStringToComponentListMap() { - stringToComponentListMap.put("cpu", new CPUList()); - stringToComponentListMap.put("gpu", new GPUList()); - stringToComponentListMap.put("chassis", new ChassisList()); - stringToComponentListMap.put("cpu-cooler", new CPUCoolerList()); - stringToComponentListMap.put("psu", new PSUList()); - stringToComponentListMap.put("ram", new RAMList()); - stringToComponentListMap.put("storage", new StorageList()); - stringToComponentListMap.put("motherboard", new MotherboardList()); + stringToComponentListMap.put(CPU_TYPE, new CPUList()); + stringToComponentListMap.put(GPU_TYPE, new GPUList()); + stringToComponentListMap.put(CHASSIS_TYPE, new ChassisList()); + stringToComponentListMap.put(CPU_COOLER_TYPE, new CPUCoolerList()); + stringToComponentListMap.put(PSU_TYPE, new PSUList()); + stringToComponentListMap.put(RAM_TYPE, new RAMList()); + stringToComponentListMap.put(STORAGE_TYPE, new StorageList()); + stringToComponentListMap.put(MOTHERBOARD_TYPE, new MotherboardList()); } /** @@ -133,7 +141,7 @@ public void loadChassis(String path) { chassisMap.forEach((name, chassis) -> chassisMap.get(name).setName(name)); // Add each chassis to the chassis list - chassisMap.forEach((name, chassis) -> stringToComponentListMap.get("chassis").add(chassis)); + chassisMap.forEach((name, chassis) -> stringToComponentListMap.get(CHASSIS_TYPE).add(chassis)); } /** @@ -153,7 +161,7 @@ public void loadCPU(String path) { cpuMap.forEach((name, cpu) -> cpuMap.get(name).setName(name)); // Add each cpu to the cpu list - cpuMap.forEach((name, cpu) -> stringToComponentListMap.get("cpu").add(cpu)); + cpuMap.forEach((name, cpu) -> stringToComponentListMap.get(CPU_TYPE).add(cpu)); } /** @@ -173,7 +181,7 @@ public void loadCPUCooler(String path) { cpuCoolerMap.forEach((name, cpuCooler) -> cpuCoolerMap.get(name).setName(name)); // Add each cpu cooler to the cpu cooler list - cpuCoolerMap.forEach((name, cpuCooler) -> stringToComponentListMap.get("cpu-cooler").add(cpuCooler)); + cpuCoolerMap.forEach((name, cpuCooler) -> stringToComponentListMap.get(CPU_COOLER_TYPE).add(cpuCooler)); } /** @@ -193,7 +201,7 @@ public void loadGPU(String path) { gpuMap.forEach((name, gpu) -> gpuMap.get(name).setName(name)); // Add each gpu to the gpu list - gpuMap.forEach((name, gpu) -> stringToComponentListMap.get("gpu").add(gpu)); + gpuMap.forEach((name, gpu) -> stringToComponentListMap.get(GPU_TYPE).add(gpu)); } /** @@ -213,7 +221,7 @@ public void loadMotherboard(String path) { motherboardMap.forEach((name, motherboard) -> motherboardMap.get(name).setName(name)); // Add each motherboard to the motherboard list - motherboardMap.forEach((name, motherboard) -> stringToComponentListMap.get("motherboard").add(motherboard)); + motherboardMap.forEach((name, motherboard) -> stringToComponentListMap.get(MOTHERBOARD_TYPE).add(motherboard)); } /** @@ -233,7 +241,7 @@ public void loadPSU(String path) { psuMap.forEach((name, psu) -> psuMap.get(name).setName(name)); // Add each psu to the psu list - psuMap.forEach((name, psu) -> stringToComponentListMap.get("psu").add(psu)); + psuMap.forEach((name, psu) -> stringToComponentListMap.get(PSU_TYPE).add(psu)); } /** @@ -253,7 +261,7 @@ public void loadRAM(String path) { ramMap.forEach((name, ram) -> ramMap.get(name).setName(name)); // Add each ram to the ram list - ramMap.forEach((name, ram) -> stringToComponentListMap.get("ram").add(ram)); + ramMap.forEach((name, ram) -> stringToComponentListMap.get(RAM_TYPE).add(ram)); } /** @@ -273,7 +281,7 @@ public void loadStorage(String path) { storageMap.forEach((name, storage) -> storageMap.get(name).setName(name)); // Add each storage to the storage list - storageMap.forEach((name, storage) -> stringToComponentListMap.get("storage").add(storage)); + storageMap.forEach((name, storage) -> stringToComponentListMap.get(STORAGE_TYPE).add(storage)); } /** diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java new file mode 100644 index 0000000000..e21c2f27bc --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidCustomArgumentLengthException extends PPException { + @Override + public String getMessage() { + return "Please enter a valid number of arguments for the custom component"; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index c47fa6b5e6..8d87319b12 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,6 +1,7 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderInfoCommand; @@ -15,6 +16,14 @@ import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; public class Parser { @@ -51,7 +60,7 @@ public Command parseCommand(String userInput) { return parseBuilderCommand(commandWord, arguments); default: - return new UnrecognizedCommand(); + return new UnrecognizedCommand(""); } } @@ -67,7 +76,7 @@ private Command parseViewerCommand(String commandWord, String arguments) { case "edit": return new ViewerEditCommand(arguments); default: - return new UnrecognizedCommand(); + return new UnrecognizedCommand(""); } } @@ -86,8 +95,41 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return new BuilderInfoCommand(arguments); case "unselect": return new BuilderUnselectCommand(arguments); + case "custom": + return parseCustomCommand(arguments); default: - return new UnrecognizedCommand(); + return new UnrecognizedCommand(""); + } + } + + private Command parseCustomCommand(String arguments) { + String[] inputList = arguments.split(" ", 2); + String componentType = inputList[0]; + String attributes = ""; + if (inputList.length == 2) { + attributes = inputList[1]; + } + + switch (componentType) { + case CPU_TYPE: + return new BuilderCustomCpuCommand(attributes); + case GPU_TYPE: + // return new UnrecognizedCommand(); + case RAM_TYPE: + // return new UnrecognizedCommand(); + case STORAGE_TYPE: + // return new UnrecognizedCommand(); + case PSU_TYPE: + // return new UnrecognizedCommand(); + case MOTHERBOARD_TYPE: + // return new UnrecognizedCommand(); + case CHASSIS_TYPE: + // return new UnrecognizedCommand(); + case CPU_COOLER_TYPE: + // return new UnrecognizedCommand(); + default: + return new UnrecognizedCommand( + "Invalid component type!, valid types are (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 8184d5c302..8e87ab567f 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -10,6 +10,14 @@ import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; import seedu.bigpp.ui.UI; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; public class PC { private String name; @@ -34,7 +42,7 @@ public void setChassis(Chassis chassis) { this.chassis = chassis; } - public void setCPU(CPU cpu) { + public void setCpu(CPU cpu) { this.cpu = cpu; } @@ -64,7 +72,7 @@ public void setPsu(PSU psu) { public void setComponent(Component component) { if (component instanceof CPU) { - setCPU((CPU) component); + setCpu((CPU) component); } else if (component instanceof CPUCooler) { setCpuCooler((CPUCooler) component); } else if (component instanceof GPU) { @@ -83,21 +91,21 @@ public void setComponent(Component component) { } public void setNullComponent(String componentType) { - if (componentType.equals("cpu")) { - setCPU(null); - } else if (componentType.equals("cpu-cooler")) { + if (componentType.equals(CPU_TYPE)) { + setCpu(null); + } else if (componentType.equals(CPU_COOLER_TYPE)) { setCpuCooler(null); - } else if (componentType.equals("gpu")) { + } else if (componentType.equals(GPU_TYPE)) { setGpu(null); - } else if (componentType.equals("motherboard")) { + } else if (componentType.equals(MOTHERBOARD_TYPE)) { setMotherboard(null); - } else if (componentType.equals("ram")) { + } else if (componentType.equals(RAM_TYPE)) { setRam(null); - } else if (componentType.equals("storage")) { + } else if (componentType.equals(STORAGE_TYPE)) { setStorage(null); - } else if (componentType.equals("psu")) { + } else if (componentType.equals(PSU_TYPE)) { setPsu(null); - } else if (componentType.equals("chassis")) { + } else if (componentType.equals(CHASSIS_TYPE)) { setChassis(null); } } @@ -135,21 +143,21 @@ public Chassis getChassis() { } public Component getComponent(String componentName) { - if (componentName.equals("cpu")) { + if (componentName.equals(CPU_TYPE)) { return getCpu(); - } else if (componentName.equals("cpu-cooler")) { + } else if (componentName.equals(CPU_COOLER_TYPE)) { return getCpuCooler(); - } else if (componentName.equals("gpu")) { + } else if (componentName.equals(GPU_TYPE)) { return getGpu(); - } else if (componentName.equals("motherboard")) { + } else if (componentName.equals(MOTHERBOARD_TYPE)) { return getMotherboard(); - } else if (componentName.equals("ram")) { + } else if (componentName.equals(RAM_TYPE)) { return getRam(); - } else if (componentName.equals("storage")) { + } else if (componentName.equals(STORAGE_TYPE)) { return getStorage(); - } else if (componentName.equals("psu")) { + } else if (componentName.equals(PSU_TYPE)) { return getPsu(); - } else if (componentName.equals("chassis")) { + } else if (componentName.equals(CHASSIS_TYPE)) { return getChassis(); } else { return null; @@ -215,7 +223,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; diff --git a/src/main/resources/cpucooler.json b/src/main/resources/cpu-cooler.json similarity index 100% rename from src/main/resources/cpucooler.json rename to src/main/resources/cpu-cooler.json diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 5f042080c8..849daafeea 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -6,6 +6,7 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -50,7 +51,7 @@ public void executeCommand_listComponentCommand_success() throws BuilderMissingL UI.setPCBuilderMode(0); - String listComponentCommandResult = new BuilderListComponentCommand("cpu").executeCommand(dataStorage); + String listComponentCommandResult = new BuilderListComponentCommand(CPU_TYPE).executeCommand(dataStorage); assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } } diff --git a/src/test/resources/cpucooler.json b/src/test/resources/cpu-cooler.json similarity index 100% rename from src/test/resources/cpucooler.json rename to src/test/resources/cpu-cooler.json From de2dcd47f229c78f64b6f793327979e1b789b9ab Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:01:07 +0800 Subject: [PATCH 154/420] Pass checkstyle requirements --- src/main/java/seedu/bigpp/parser/Parser.java | 3 ++- src/main/java/seedu/bigpp/pc/PC.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 8d87319b12..535bd391f6 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -129,7 +129,8 @@ private Command parseCustomCommand(String arguments) { // return new UnrecognizedCommand(); default: return new UnrecognizedCommand( - "Invalid component type!, valid types are (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); + "Invalid component type!, valid types are " + + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 8e87ab567f..beb85de897 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -223,7 +223,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; From a4f62f86889d5247ad745344f6ec0d14f89b65b8 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 20:37:01 +0800 Subject: [PATCH 155/420] Add JavaDoc for parser --- src/main/java/seedu/bigpp/parser/Parser.java | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 535bd391f6..8ee335675a 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -27,6 +27,12 @@ public class Parser { + /** + * Parses user input into command for execution, separates viewer and builder + * commands. + * @param userInput full user input string + * @return the command + */ public Command parseCommand(String userInput) { String trimmedInput = userInput.trim(); @@ -64,6 +70,12 @@ public Command parseCommand(String userInput) { } } + /** + * Parses user input for viewer commands. + * @param commandWord the command word + * @param arguments the arguments + * @return the command + */ private Command parseViewerCommand(String commandWord, String arguments) { switch (commandWord) { @@ -80,6 +92,12 @@ private Command parseViewerCommand(String commandWord, String arguments) { } } + /** + * Parses user input for builder commands. + * @param commandWord the command word + * @param arguments the arguments + * @return the command + */ private Command parseBuilderCommand(String commandWord, String arguments) { switch (commandWord) { @@ -102,6 +120,11 @@ private Command parseBuilderCommand(String commandWord, String arguments) { } } + /** + * Parses user input for custom component commands. + * @param arguments the arguments + * @return the command + */ private Command parseCustomCommand(String arguments) { String[] inputList = arguments.split(" ", 2); String componentType = inputList[0]; From 88ddc50a04fda200571ed26d835b181e4b58f315 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 20:53:51 +0800 Subject: [PATCH 156/420] Add the isComplete method to PC and update its toString --- BigPP.log.lck | 0 src/main/java/seedu/bigpp/pc/PC.java | 21 +++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 8184d5c302..e0af33f59f 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -205,6 +205,19 @@ public String buildType(Boolean isPrebuilt) { } } + /** + * Method to check if the PC is complete. + * @return true if all components are not null, false otherwise. + */ + public boolean isComplete() { + if (cpu == null || gpu == null || motherboard == null || ram == null || storage == null || psu == null + || chassis == null) { + return false; + } else { + return true; + } + } + /** * Method to print all the components of the PC. */ @@ -215,7 +228,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; @@ -233,8 +246,12 @@ public String viewComponents() { return componentString; } + /** + * Method to print the PC's name and cost and build status. + */ @Override public String toString() { - return buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + "/" + getBudgetString(); + return buildType(isPrebuilt) + " [" + name + "]" + " - $" + getCost() + "/" + getBudgetString() + " - " + + (isComplete() ? "Complete" : "Incomplete"); } } From d5044395dda3300c673cd365db79708c79ec7d0e Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 20:54:40 +0800 Subject: [PATCH 157/420] Adhere to checkstyle indentation --- src/main/java/seedu/bigpp/pc/PC.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index e0af33f59f..d6bb051b8a 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -228,7 +228,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; From 85096cacce4839cc3f1cf19a271609eaf2fd0dce Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 19 Mar 2023 21:19:49 +0800 Subject: [PATCH 158/420] Change EXPECTED.txt to fit ACTUAL --- text-ui-test/EXPECTED.TXT | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index dd7bc4b0a6..35cafbb162 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -27,9 +27,9 @@ Welcome to BigPP! =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite -2.Prebuilt-PC: [intermediate] - $1499.36/infinite -3.Prebuilt-PC: [advanced] - $2149.75/infinite +1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete What would you like to do? Add PC View PC @@ -42,10 +42,10 @@ exit =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite -2.Prebuilt-PC: [intermediate] - $1499.36/infinite -3.Prebuilt-PC: [advanced] - $2149.75/infinite -4.Custom-PC: [newpc1] - $0.0/infinite +1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete What would you like to do? Add PC View PC @@ -59,11 +59,11 @@ Custom PC: [ newpc1 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite -2.Prebuilt-PC: [intermediate] - $1499.36/infinite -3.Prebuilt-PC: [advanced] - $2149.75/infinite -4.Custom-PC: [newpc1] - $0.0/infinite -5.Custom-PC: [newpc2] - $0.0/infinite +1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete +5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? Add PC View PC @@ -77,11 +77,11 @@ Custom PC: [ newpc2 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite -2.Prebuilt-PC: [intermediate] - $1499.36/infinite -3.Prebuilt-PC: [advanced] - $2149.75/infinite -4.Custom-PC: [newpc1] - $0.0/infinite -5.Custom-PC: [newpc2] - $0.0/infinite +1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete +5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? Add PC View PC From 307d42e88c28cfb073f9c47aaf46244a71dc43cc Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 18:02:46 +0800 Subject: [PATCH 159/420] Create method to compare between 2 cpu components and output nicely formatted comparison table --- BigPP.log.1 | 26 +++++++ .../BuilderCompareCpuCommand.java | 78 +++++++++++++++++++ .../BuilderCompareGpuCommand.java | 4 + src/main/java/seedu/bigpp/parser/Parser.java | 37 +++++++++ 4 files changed, 145 insertions(+) create mode 100644 BigPP.log.1 create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java diff --git a/BigPP.log.1 b/BigPP.log.1 new file mode 100644 index 0000000000..51a06a037e --- /dev/null +++ b/BigPP.log.1 @@ -0,0 +1,26 @@ +Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: add pc +Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand +Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Custom PC: [ pc ] has been created +Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 4 +Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: pc +Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare cpu 1 & 2 +Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand +Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: |Intel core i3-10100|Intel core i5-10600k| +|----------|----------| +|99.500000 |182.470001| +Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bye +Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand +Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Bye. Hope to see you again soon! diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java new file mode 100644 index 0000000000..9b403d1d46 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -0,0 +1,78 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareCpuCommand extends Command { + + public BuilderCompareCpuCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected cpu components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain & eg. "compare cpu 1" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + + //check if firstComponent is a number + if (firstComponent.matches(".*\\D.*")) { + throw new BuilderInvalidTypeException(); + } + int firstComponentIndex = Integer.parseInt(firstComponent) - 1; + + //check if secondComponent is a number + String secondComponent = componentIndexes[1].trim(); + if (secondComponent.matches(".*\\D.*")) { + throw new BuilderInvalidTypeException(); + } + int secondComponentIndex = Integer.parseInt(secondComponent) - 1; + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("cpu").size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("cpu") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + CPU firstComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(firstComponentIndex); + CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%n|%-12s|%-20s|%-20s|", "____________", "____________________", "____________________"); + outputString += String.format("|%-12s|%-20s|%-20s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "------------", "--------------------", "--------------------"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "SOCKET", firstComponentObject.getSocket(), + secondComponentObject.getSocket()); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "CORES", firstComponentObject.getCores(), + secondComponentObject.getCores()); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "THREADS", firstComponentObject.getThreads(), + secondComponentObject.getThreads()); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "BASE CLOCK", firstComponentObject.getBaseClock() + "GHz", secondComponentObject.getBaseClock()+ "GHz"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "BOOST CLOCK", firstComponentObject.getBoostClock()+ "GHz", secondComponentObject.getBoostClock()+ "GHz"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "POWER", firstComponentObject.getPower()+ "W", secondComponentObject.getPower()+ "W"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "------------", "--------------------", "--------------------"); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java new file mode 100644 index 0000000000..4ccd6948f7 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java @@ -0,0 +1,4 @@ +package seedu.bigpp.command.buildercommand; + +public class BuilderCompareGpuCommand { +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 8ee335675a..4c23635290 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,6 +1,7 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; @@ -15,6 +16,8 @@ import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_TYPE; @@ -115,6 +118,8 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return new BuilderUnselectCommand(arguments); case "custom": return parseCustomCommand(arguments); + case "compare": + return parseCompareCommand(arguments); default: return new UnrecognizedCommand(""); } @@ -156,4 +161,36 @@ private Command parseCustomCommand(String arguments) { + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } + + private Command parseCompareCommand(String arguments) { + String[] inputList = arguments.split(" ", 2); + String componentType = inputList[0].trim(); + String attributes = ""; + if (inputList.length == 2) { + attributes = inputList[1].trim(); + } + + switch (componentType) { + case CPU_TYPE: + return new BuilderCompareCpuCommand(attributes); + case GPU_TYPE: + return new BuilderCompareGpuCommand(attributes); + case RAM_TYPE: + return new BuilderCompareRamCommand(attributes); + case STORAGE_TYPE: + return new BuilderCompareStorageCommand(attributes); + case PSU_TYPE: + return new BuilderComparePsuCommand(attributes); + case MOTHERBOARD_TYPE: + return new BuilderCompareMotherboardCommand(attributes); + case CHASSIS_TYPE: + return new BuilderCompareChassisCommand(attributes); + case CPU_COOLER_TYPE: + return new BuilderCompareCpuCoolerCommand(attributes); + default: + return new UnrecognizedCommand( + "Invalid component type!, valid types are " + + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); + } + } } From ae2ef2fcf274117d0953e95a93d05a8e9a07b4cb Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 18:34:03 +0800 Subject: [PATCH 160/420] Create method to compare between 2 gpu components in a nicely formatted comparison table --- BigPP.log.1 | 22 ++ BigPP.log.2 | 242 ++++++++++++++++++ .../BuilderCompareCpuCommand.java | 17 +- .../BuilderCompareGpuCommand.java | 70 ++++- src/main/java/seedu/bigpp/parser/Parser.java | 13 +- 5 files changed, 350 insertions(+), 14 deletions(-) create mode 100644 BigPP.log.2 diff --git a/BigPP.log.1 b/BigPP.log.1 index 51a06a037e..1e47550461 100644 --- a/BigPP.log.1 +++ b/BigPP.log.1 @@ -24,3 +24,25 @@ Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit INFO: Result: Bye. Hope to see you again soon! +Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 1 +Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: beginner (copy) +Mar 20, 2023 6:27:00 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare gpu 1 & 5 +Mar 20, 2023 6:27:00 PM seedu.bigpp.BigPP runLoopUntilExit +WARNING: Please enter a valid index +Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare gpu 1 & 2 +Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand +Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ________________________________________________________ +|NAME |Gigabyte GAMING OC RTX3050 |MSI GeForce RTX 3060 Gaming X12G | +|------------|-----------------------------------|-----------------------------------| +|PRICE |$309.99 |$379.99 | +|POWER |115.0W |170.0W | +|SIZE |mini |micro | +________________________________________________________ diff --git a/BigPP.log.2 b/BigPP.log.2 new file mode 100644 index 0000000000..cb44f2d4d8 --- /dev/null +++ b/BigPP.log.2 @@ -0,0 +1,242 @@ +Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 4 +Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: pc +Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare gpu 1 & 2 +Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand +Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ______________________________________________________________________________________ +|NAME |Gigabyte GAMING OC RTX3050 |MSI GeForce RTX 3060 Gaming X12G | +|------------|-----------------------------------|-----------------------------------| +|PRICE |$309.99 |$379.99 | +|POWER |115.0W |170.0W | +|SIZE |mini |micro | +______________________________________________________________________________________ +Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare cpu 1 & 11 +Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand +Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ________________________________________________________ +|NAME |Intel core i3-10100 |AMD Ryzen 7 7700X | +|------------|--------------------|--------------------| +|PRICE |$99.5 |$341.29 | +|SOCKET |LGA1200 |AM5 | +|CORES |4 |8 | +|THREADS |8 |16 | +|BASE CLOCK |3.6GHz |4.5GHz | +|BOOST CLOCK |4.3GHz |5.4GHz | +|POWER |65.0W |105.0W | +________________________________________________________ +Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list gpu +Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand +Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Here are all available components of type 'gpu': +1. +NAME: Gigabyte GAMING OC RTX3050 +BRAND: Gigabyte +PRICE: 309.99 +POWER: 115.0 +SIZE: mini +================ +2. +NAME: MSI GeForce RTX 3060 Gaming X12G +BRAND: MSI +PRICE: 379.99 +POWER: 170.0 +SIZE: micro +================ +3. +NAME: Asus TUF GAMING OC RTX3070 Ti +BRAND: Asus +PRICE: 786.99 +POWER: 290.0 +SIZE: atx +================ +4. +NAME: MSI GAMING Z TRIO RTX3080 +BRAND: MSI +PRICE: 934.06 +POWER: 350.0 +SIZE: atx +================ + +Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare gpu 2 & 3 +Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand +Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ______________________________________________________________________________________ +|NAME |MSI GeForce RTX 3060 Gaming X12G |Asus TUF GAMING OC RTX3070 Ti | +|------------|-----------------------------------|-----------------------------------| +|PRICE |$379.99 |$786.99 | +|POWER |170.0W |290.0W | +|SIZE |micro |atx | +______________________________________________________________________________________ +Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: list cpu +Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand +Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Here are all available components of type 'cpu': +1. +NAME: Intel core i3-10100 +BRAND: Intel +PRICE: 99.5 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.3 +POWER: 65.0 +SOCKET: LGA1200 +================ +2. +NAME: Intel core i5-10600k +BRAND: Intel +PRICE: 182.47 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.1 +BOOSTCLOCK: 4.8 +POWER: 125.0 +SOCKET: LGA1200 +================ +3. +NAME: Intel core i7-10700k +BRAND: Intel +PRICE: 269.95 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 5.1 +POWER: 125.0 +SOCKET: LGA1200 +================ +4. +NAME: Intel core i3-12100f +BRAND: Intel +PRICE: 106.93 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.3 +BOOSTCLOCK: 4.3 +POWER: 58.0 +SOCKET: LGA1700 +================ +5. +NAME: Intel core i5-12600k +BRAND: Intel +PRICE: 213.82 +CORES: 10 +THREADS: 20 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.9 +POWER: 125.0 +SOCKET: LGA1700 +================ +6. +NAME: Intel core i7-12700k +BRAND: Intel +PRICE: 312.88 +CORES: 12 +THREADS: 24 +BASECLOCK: 3.6 +BOOSTCLOCK: 5.0 +POWER: 125.0 +SOCKET: LGA1700 +================ +7. +NAME: AMD Ryzen 3 3200G +BRAND: AMD +PRICE: 97.5 +CORES: 4 +THREADS: 4 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.0 +POWER: 65.0 +SOCKET: AM4 +================ +8. +NAME: AMD Ryzen 5 5600X +BRAND: AMD +PRICE: 156.64 +CORES: 6 +THREADS: 12 +BASECLOCK: 3.7 +BOOSTCLOCK: 4.6 +POWER: 65.0 +SOCKET: AM4 +================ +9. +NAME: AMD Ryzen 7 5800X +BRAND: AMD +PRICE: 211.33 +CORES: 8 +THREADS: 16 +BASECLOCK: 3.8 +BOOSTCLOCK: 4.7 +POWER: 105.0 +SOCKET: AM4 +================ +10. +NAME: AMD Ryzen 5 7600X +BRAND: AMD +PRICE: 240.86 +CORES: 6 +THREADS: 12 +BASECLOCK: 4.7 +BOOSTCLOCK: 5.3 +POWER: 105.0 +SOCKET: AM5 +================ +11. +NAME: AMD Ryzen 7 7700X +BRAND: AMD +PRICE: 341.29 +CORES: 8 +THREADS: 16 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.4 +POWER: 105.0 +SOCKET: AM5 +================ +12. +NAME: AMD Ryzen 9 7950X +BRAND: AMD +PRICE: 589.0 +CORES: 16 +THREADS: 32 +BASECLOCK: 4.5 +BOOSTCLOCK: 5.7 +POWER: 170.0 +SOCKET: AM5 +================ + +Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare cpu 10 & 12 +Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand +Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ________________________________________________________ +|NAME |AMD Ryzen 5 7600X |AMD Ryzen 9 7950X | +|------------|--------------------|--------------------| +|PRICE |$240.86 |$589.0 | +|SOCKET |AM5 |AM5 | +|CORES |6 |16 | +|THREADS |12 |32 | +|BASE CLOCK |4.7GHz |4.5GHz | +|BOOST CLOCK |5.3GHz |5.7GHz | +|POWER |105.0W |170.0W | +________________________________________________________ +Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bye +Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand +Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Bye. Hope to see you again soon! diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java index 9b403d1d46..a22a234f6d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -57,10 +57,10 @@ public String executeCommand(DataStorage dataStorage) CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%n|%-12s|%-20s|%-20s|", "____________", "____________________", "____________________"); - outputString += String.format("|%-12s|%-20s|%-20s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%56s", "_".repeat(56)); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "------------", "--------------------", "--------------------"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "-".repeat(12), "-".repeat(20), "-".repeat(20)); outputString += String.format("%n|%-12s|%-20s|%-20s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); outputString += String.format("%n|%-12s|%-20s|%-20s|", "SOCKET", firstComponentObject.getSocket(), @@ -69,10 +69,13 @@ public String executeCommand(DataStorage dataStorage) secondComponentObject.getCores()); outputString += String.format("%n|%-12s|%-20s|%-20s|", "THREADS", firstComponentObject.getThreads(), secondComponentObject.getThreads()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "BASE CLOCK", firstComponentObject.getBaseClock() + "GHz", secondComponentObject.getBaseClock()+ "GHz"); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "BOOST CLOCK", firstComponentObject.getBoostClock()+ "GHz", secondComponentObject.getBoostClock()+ "GHz"); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "POWER", firstComponentObject.getPower()+ "W", secondComponentObject.getPower()+ "W"); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "------------", "--------------------", "--------------------"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "BASE CLOCK", + firstComponentObject.getBaseClock() + "GHz", secondComponentObject.getBaseClock() + "GHz"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "BOOST CLOCK", + firstComponentObject.getBoostClock() + "GHz", secondComponentObject.getBoostClock() + "GHz"); + outputString += String.format("%n|%-12s|%-20s|%-20s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%-56s", "_".repeat(56)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java index 4ccd6948f7..84fd519c5f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java @@ -1,4 +1,72 @@ package seedu.bigpp.command.buildercommand; -public class BuilderCompareGpuCommand { +import seedu.bigpp.command.Command; +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareGpuCommand extends Command { + public BuilderCompareGpuCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected gpu components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain & eg. "compare cpu 1" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + + //check if firstComponent is a number + if (firstComponent.matches(".*\\D.*")) { + throw new BuilderInvalidTypeException(); + } + int firstComponentIndex = Integer.parseInt(firstComponent) - 1; + + //check if secondComponent is a number + String secondComponent = componentIndexes[1].trim(); + if (secondComponent.matches(".*\\D.*")) { + throw new BuilderInvalidTypeException(); + } + int secondComponentIndex = Integer.parseInt(secondComponent) - 1; + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("gpu").size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("gpu") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + GPU firstComponentObject = (GPU) dataStorage.stringToComponentListMap.get("gpu").get(firstComponentIndex); + GPU secondComponentObject = (GPU) dataStorage.stringToComponentListMap.get("gpu").get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "SIZE", firstComponentObject.getSize(), + secondComponentObject.getSize()); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 4c23635290..44dc69d46b 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -2,6 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; @@ -176,17 +177,17 @@ private Command parseCompareCommand(String arguments) { case GPU_TYPE: return new BuilderCompareGpuCommand(attributes); case RAM_TYPE: - return new BuilderCompareRamCommand(attributes); + //return new BuilderCompareRamCommand(attributes); case STORAGE_TYPE: - return new BuilderCompareStorageCommand(attributes); + //return new BuilderCompareStorageCommand(attributes); case PSU_TYPE: - return new BuilderComparePsuCommand(attributes); + //return new BuilderComparePsuCommand(attributes); case MOTHERBOARD_TYPE: - return new BuilderCompareMotherboardCommand(attributes); + //return new BuilderCompareMotherboardCommand(attributes); case CHASSIS_TYPE: - return new BuilderCompareChassisCommand(attributes); + //return new BuilderCompareChassisCommand(attributes); case CPU_COOLER_TYPE: - return new BuilderCompareCpuCoolerCommand(attributes); + //return new BuilderCompareCpuCoolerCommand(attributes); default: return new UnrecognizedCommand( "Invalid component type!, valid types are " From 4073d31cf04523973d3d4c486b72ca2df362306e Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:06:51 +0800 Subject: [PATCH 161/420] Create method to compare 2 ram components in nicely formatted comparison table. Also edit exception handling method for indexes. --- .../BuilderCompareCpuCommand.java | 18 ++--- .../BuilderCompareGpuCommand.java | 18 ++--- .../BuilderCompareRamCommand.java | 75 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 +- 4 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java index a22a234f6d..0733a8b032 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -29,19 +29,17 @@ public String executeCommand(DataStorage dataStorage) String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); - - //check if firstComponent is a number - if (firstComponent.matches(".*\\D.*")) { - throw new BuilderInvalidTypeException(); - } - int firstComponentIndex = Integer.parseInt(firstComponent) - 1; - - //check if secondComponent is a number String secondComponent = componentIndexes[1].trim(); - if (secondComponent.matches(".*\\D.*")) { + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { throw new BuilderInvalidTypeException(); } - int secondComponentIndex = Integer.parseInt(secondComponent) - 1; //check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("cpu").size()) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java index 84fd519c5f..d959401723 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java @@ -28,19 +28,17 @@ public String executeCommand(DataStorage dataStorage) String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); - - //check if firstComponent is a number - if (firstComponent.matches(".*\\D.*")) { - throw new BuilderInvalidTypeException(); - } - int firstComponentIndex = Integer.parseInt(firstComponent) - 1; - - //check if secondComponent is a number String secondComponent = componentIndexes[1].trim(); - if (secondComponent.matches(".*\\D.*")) { + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { throw new BuilderInvalidTypeException(); } - int secondComponentIndex = Integer.parseInt(secondComponent) - 1; //check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("gpu").size()) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java new file mode 100644 index 0000000000..705bf15a3a --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java @@ -0,0 +1,75 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareRamCommand extends Command { + public BuilderCompareRamCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected ram components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain & eg. "compare cpu 1" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("ram").size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("ram") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + RAM firstComponentObject = (RAM) dataStorage.stringToComponentListMap.get("ram").get(firstComponentIndex); + RAM secondComponentObject = (RAM) dataStorage.stringToComponentListMap.get("ram").get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "MEMORY", firstComponentObject.getMemory() + "GB", + secondComponentObject.getMemory() + "GB"); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "STICKS", firstComponentObject.getSticks(), + secondComponentObject.getSticks()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "SPEED", firstComponentObject.getSpeed() + "MHz", + secondComponentObject.getSpeed() + "MHz"); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 44dc69d46b..2ccffc3922 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCompareRamCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; @@ -177,7 +178,7 @@ private Command parseCompareCommand(String arguments) { case GPU_TYPE: return new BuilderCompareGpuCommand(attributes); case RAM_TYPE: - //return new BuilderCompareRamCommand(attributes); + return new BuilderCompareRamCommand(attributes); case STORAGE_TYPE: //return new BuilderCompareStorageCommand(attributes); case PSU_TYPE: From 54b64020d59f31940fa7e578a24e3259ec2708d2 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:16:48 +0800 Subject: [PATCH 162/420] Create method to compare 2 storage components in a nicely formatted comparison table. --- .../BuilderCompareRamCommand.java | 1 - .../BuilderCompareStorageCommand.java | 75 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 +- 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java index 705bf15a3a..611aa0d432 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java @@ -1,7 +1,6 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.component.gpu.GPU; import seedu.bigpp.component.ram.RAM; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java new file mode 100644 index 0000000000..86bf8aba39 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java @@ -0,0 +1,75 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareStorageCommand extends Command { + public BuilderCompareStorageCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected storage components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain & eg. "compare cpu 1" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("storage") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("storage") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + Storage firstComponentObject = (Storage) dataStorage.stringToComponentListMap.get("storage") + .get(firstComponentIndex); + Storage secondComponentObject = (Storage) dataStorage.stringToComponentListMap.get("storage") + .get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "TYPE", firstComponentObject.getType(), + secondComponentObject.getType()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "SIZE", firstComponentObject.getSize() + "GB", + secondComponentObject.getSize() + "GB"); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 2ccffc3922..fed1c38bdc 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -4,6 +4,7 @@ import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareRamCommand; +import seedu.bigpp.command.buildercommand.BuilderCompareStorageCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; @@ -180,7 +181,7 @@ private Command parseCompareCommand(String arguments) { case RAM_TYPE: return new BuilderCompareRamCommand(attributes); case STORAGE_TYPE: - //return new BuilderCompareStorageCommand(attributes); + return new BuilderCompareStorageCommand(attributes); case PSU_TYPE: //return new BuilderComparePsuCommand(attributes); case MOTHERBOARD_TYPE: From d219b89ae786e795cdcd53561b7494004ce640b2 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:30:35 +0800 Subject: [PATCH 163/420] Create method to compare 2 psu components in a nicely formatted comparison table.Also edited some of the in code comments. --- .../BuilderCompareCpuCommand.java | 2 +- .../BuilderCompareGpuCommand.java | 2 +- .../BuilderComparePsuCommand.java | 72 +++++++++++++++++++ .../BuilderCompareRamCommand.java | 2 +- .../BuilderCompareStorageCommand.java | 2 +- src/main/java/seedu/bigpp/parser/Parser.java | 3 +- 6 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java index 0733a8b032..5dd6996906 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -22,7 +22,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { String inputString = getArguments(); - // throw exception if command does not contain & eg. "compare cpu 1" + // throw exception if command does not contain "&" if (!inputString.contains("&")) { throw new BuilderMissingIndexException(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java index d959401723..e3825c26e4 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java @@ -21,7 +21,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { String inputString = getArguments(); - // throw exception if command does not contain & eg. "compare cpu 1" + // throw exception if command does not contain "&" if (!inputString.contains("&")) { throw new BuilderMissingIndexException(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java new file mode 100644 index 0000000000..3085ccfd39 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java @@ -0,0 +1,72 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderComparePsuCommand extends Command { + public BuilderComparePsuCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected psu components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain "&" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("psu").size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("psu") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + PSU firstComponentObject = (PSU) dataStorage.stringToComponentListMap.get("psu").get(firstComponentIndex); + PSU secondComponentObject = (PSU) dataStorage.stringToComponentListMap.get("psu").get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "EFFICIENCY", firstComponentObject.getEfficiency(), + secondComponentObject.getEfficiency()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getFormFactor(), + secondComponentObject.getFormFactor()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java index 611aa0d432..681c7e6155 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java @@ -21,7 +21,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { String inputString = getArguments(); - // throw exception if command does not contain & eg. "compare cpu 1" + // throw exception if command does not contain "&" if (!inputString.contains("&")) { throw new BuilderMissingIndexException(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java index 86bf8aba39..836d3aee7a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java @@ -21,7 +21,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { String inputString = getArguments(); - // throw exception if command does not contain & eg. "compare cpu 1" + // throw exception if command does not contain "&" if (!inputString.contains("&")) { throw new BuilderMissingIndexException(); } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index fed1c38bdc..5e46cb3afc 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; +import seedu.bigpp.command.buildercommand.BuilderComparePsuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareRamCommand; import seedu.bigpp.command.buildercommand.BuilderCompareStorageCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; @@ -183,7 +184,7 @@ private Command parseCompareCommand(String arguments) { case STORAGE_TYPE: return new BuilderCompareStorageCommand(attributes); case PSU_TYPE: - //return new BuilderComparePsuCommand(attributes); + return new BuilderComparePsuCommand(attributes); case MOTHERBOARD_TYPE: //return new BuilderCompareMotherboardCommand(attributes); case CHASSIS_TYPE: From 8ac13438af2682f40f781664f86ff06ffdc22f15 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:39:51 +0800 Subject: [PATCH 164/420] Create method to compare 2 motherboard components in a nicely formatted comparison table --- .../BuilderCompareMotherboardCommand.java | 75 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 +- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java new file mode 100644 index 0000000000..181364eac2 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java @@ -0,0 +1,75 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareMotherboardCommand extends Command { + public BuilderCompareMotherboardCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected motherboard components + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain "&" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("motherboard") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("motherboard") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + Motherboard firstComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get("motherboard") + .get(firstComponentIndex); + Motherboard secondComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get("motherboard") + .get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "SOCKET", firstComponentObject.getSocket(), + secondComponentObject.getSocket()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getFormFactor(), + secondComponentObject.getFormFactor()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 5e46cb3afc..99befe232d 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCompareMotherboardCommand; import seedu.bigpp.command.buildercommand.BuilderComparePsuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareRamCommand; import seedu.bigpp.command.buildercommand.BuilderCompareStorageCommand; @@ -186,7 +187,7 @@ private Command parseCompareCommand(String arguments) { case PSU_TYPE: return new BuilderComparePsuCommand(attributes); case MOTHERBOARD_TYPE: - //return new BuilderCompareMotherboardCommand(attributes); + return new BuilderCompareMotherboardCommand(attributes); case CHASSIS_TYPE: //return new BuilderCompareChassisCommand(attributes); case CPU_COOLER_TYPE: From c269bdc07e31a044ff5c312bcc9528ef9d6cf7e3 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:43:32 +0800 Subject: [PATCH 165/420] Change table width of comparison table for cpu comparison. --- .../BuilderCompareCpuCommand.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java index 5dd6996906..a2aaad500f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -55,25 +55,25 @@ public String executeCommand(DataStorage dataStorage) CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%56s", "_".repeat(56)); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "-".repeat(12), "-".repeat(20), "-".repeat(20)); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "SOCKET", firstComponentObject.getSocket(), + outputString += String.format("%n|%-12s|%-35s|%-35s|", "SOCKET", firstComponentObject.getSocket(), secondComponentObject.getSocket()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "CORES", firstComponentObject.getCores(), + outputString += String.format("%n|%-12s|%-35s|%-35s|", "CORES", firstComponentObject.getCores(), secondComponentObject.getCores()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "THREADS", firstComponentObject.getThreads(), + outputString += String.format("%n|%-12s|%-35s|%-35s|", "THREADS", firstComponentObject.getThreads(), secondComponentObject.getThreads()); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "BASE CLOCK", + outputString += String.format("%n|%-12s|%-35s|%-35s|", "BASE CLOCK", firstComponentObject.getBaseClock() + "GHz", secondComponentObject.getBaseClock() + "GHz"); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "BOOST CLOCK", + outputString += String.format("%n|%-12s|%-35s|%-35s|", "BOOST CLOCK", firstComponentObject.getBoostClock() + "GHz", secondComponentObject.getBoostClock() + "GHz"); - outputString += String.format("%n|%-12s|%-20s|%-20s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%-56s", "_".repeat(56)); + outputString += String.format("%n%-86s", "_".repeat(86)); return outputString; } } From 713d2f13a0c225da192acf8d60d9a95014fdf343 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 19:55:18 +0800 Subject: [PATCH 166/420] Create method to compare 2 chassis in a nicely formatted comparison table. --- .../BuilderCompareChassisCommand.java | 73 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 3 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java new file mode 100644 index 0000000000..045165a64e --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java @@ -0,0 +1,73 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.chassis.Chassis; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareChassisCommand extends Command { + public BuilderCompareChassisCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected chassis + * @return the comparison table of the 2 chassis + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain "&" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("chassis") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("chassis") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + Chassis firstComponentObject = (Chassis) dataStorage.stringToComponentListMap.get("chassis") + .get(firstComponentIndex); + Chassis secondComponentObject = (Chassis) dataStorage.stringToComponentListMap.get("chassis") + .get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%86s", "_".repeat(86)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "BRAND", firstComponentObject.getBrand(), + secondComponentObject.getBrand()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getSize(), + secondComponentObject.getSize()); + outputString += String.format("%n%86s", "_".repeat(86)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 99befe232d..0aaa617ca6 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,6 +1,7 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.BuilderCompareChassisCommand; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareMotherboardCommand; @@ -189,7 +190,7 @@ private Command parseCompareCommand(String arguments) { case MOTHERBOARD_TYPE: return new BuilderCompareMotherboardCommand(attributes); case CHASSIS_TYPE: - //return new BuilderCompareChassisCommand(attributes); + return new BuilderCompareChassisCommand(attributes); case CPU_COOLER_TYPE: //return new BuilderCompareCpuCoolerCommand(attributes); default: From 51927485a2f4f7299a74388245b5142476fd8cd9 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Mon, 20 Mar 2023 21:26:08 +0800 Subject: [PATCH 167/420] Create method to compare 2 cpu coolers in a nicely formatted comparison table. Also changed the tablbe column width to accomodate long component names --- BigPP.log.1 | 44 +++++++++++ .../BuilderCompareChassisCommand.java | 14 ++-- .../BuilderCompareCpuCommand.java | 22 +++--- .../BuilderCompareCpuCoolerCommand.java | 75 +++++++++++++++++++ .../BuilderCompareGpuCommand.java | 14 ++-- .../BuilderCompareMotherboardCommand.java | 16 ++-- .../BuilderComparePsuCommand.java | 16 ++-- .../BuilderCompareRamCommand.java | 18 ++--- .../BuilderCompareStorageCommand.java | 16 ++-- src/main/java/seedu/bigpp/parser/Parser.java | 15 ++-- 10 files changed, 184 insertions(+), 66 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java diff --git a/BigPP.log.1 b/BigPP.log.1 index 1e47550461..452d22e4b6 100644 --- a/BigPP.log.1 +++ b/BigPP.log.1 @@ -46,3 +46,47 @@ INFO: Result: ____________________________________ |POWER |115.0W |170.0W | |SIZE |mini |micro | ________________________________________________________ +Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: edit 4 +Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand +Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Currently editing PC: pc +Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare cpu-cooler 1 & 3 +Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand +Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ________________________________________________________________________________________________ +|NAME | Thermalright AXP90-X36 | NZXT T120 RGB | +|------------|----------------------------------------|----------------------------------------| +|PRICE | $22.9 | $59.9 | +|RPM | 2700RPM | 1800RPM | +|NOISE | 22.4dB | 27.5dB | +|POWER | 2.0W | 2.0W | +________________________________________________________________________________________________ +Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: comapre cpu-cooler 2 & 4 +Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand +Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Unrecognised command. +Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: compare cpu-cooler 2 & 4 +Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand +Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: ________________________________________________________________________________________________ +|NAME | Noctua NH-L9i | Cooler Master MASTERLIQUID ML120L RGB V2| +|------------|----------------------------------------|----------------------------------------| +|PRICE | $44.95 | $86.78 | +|RPM | 2500RPM | 1800RPM | +|NOISE | 23.6dB | 27.0dB | +|POWER | 2.0W | 2.0W | +________________________________________________________________________________________________ +Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: User input: bye +Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand +Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit +INFO: Result: Bye. Hope to see you again soon! diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java index 045165a64e..2d7a7bfb88 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java @@ -57,17 +57,17 @@ public String executeCommand(DataStorage dataStorage) .get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "BRAND", firstComponentObject.getBrand(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "BRAND", firstComponentObject.getBrand(), secondComponentObject.getBrand()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getSize(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "FORM FACTOR", firstComponentObject.getSize(), secondComponentObject.getSize()); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java index a2aaad500f..e651ec26b9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java @@ -55,25 +55,25 @@ public String executeCommand(DataStorage dataStorage) CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "SOCKET", firstComponentObject.getSocket(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "SOCKET", firstComponentObject.getSocket(), secondComponentObject.getSocket()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "CORES", firstComponentObject.getCores(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "CORES", firstComponentObject.getCores(), secondComponentObject.getCores()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "THREADS", firstComponentObject.getThreads(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "THREADS", firstComponentObject.getThreads(), secondComponentObject.getThreads()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "BASE CLOCK", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "BASE CLOCK", firstComponentObject.getBaseClock() + "GHz", secondComponentObject.getBaseClock() + "GHz"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "BOOST CLOCK", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "BOOST CLOCK", firstComponentObject.getBoostClock() + "GHz", secondComponentObject.getBoostClock() + "GHz"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%-86s", "_".repeat(86)); + outputString += String.format("%n%-96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java new file mode 100644 index 0000000000..e1cc3173ce --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java @@ -0,0 +1,75 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.cpucooler.CPUCooler; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; + +public class BuilderCompareCpuCoolerCommand extends Command { + public BuilderCompareCpuCoolerCommand(String arguments) { + setArguments(arguments); + } + + /** + * Compare all the specifications between 2 selected cpu coolers + * @return the comparison table of the 2 components + */ + @Override + public String executeCommand(DataStorage dataStorage) + throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + String inputString = getArguments(); + + // throw exception if command does not contain "&" + if (!inputString.contains("&")) { + throw new BuilderMissingIndexException(); + } + + String[] componentIndexes = inputString.split("&", 2); + String firstComponent = componentIndexes[0].trim(); + String secondComponent = componentIndexes[1].trim(); + + //check if firstComponent and secondComponent is a number + int firstComponentIndex; + int secondComponentIndex; + try { + firstComponentIndex = Integer.parseInt(firstComponent) - 1; + secondComponentIndex = Integer.parseInt(secondComponent) - 1; + } catch (NumberFormatException e) { + throw new BuilderInvalidTypeException(); + } + + //check if index is out of bounds + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("cpu-cooler") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("cpu-cooler") + .size()) { + throw new PPIndexOutOfBoundsException(); + } + + //get the 2 components + CPUCooler firstComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get("cpu-cooler") + .get(firstComponentIndex); + CPUCooler secondComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get("cpu-cooler") + .get(secondComponentIndex); + + //format the comparison table in outputString + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), + secondComponentObject.getName()); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), + "$" + secondComponentObject.getPrice()); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "RPM", firstComponentObject.getRpm() + "RPM", + secondComponentObject.getRpm() + "RPM"); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NOISE", firstComponentObject.getNoise() + "dB", + secondComponentObject.getNoise() + "dB"); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", + secondComponentObject.getPower() + "W"); + outputString += String.format("%n%96s", "_".repeat(96)); + return outputString; + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java index e3825c26e4..4bc0c86499 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java @@ -54,17 +54,17 @@ public String executeCommand(DataStorage dataStorage) GPU secondComponentObject = (GPU) dataStorage.stringToComponentListMap.get("gpu").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "SIZE", firstComponentObject.getSize(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "SIZE", firstComponentObject.getSize(), secondComponentObject.getSize()); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java index 181364eac2..b360b022d2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java @@ -57,19 +57,19 @@ public String executeCommand(DataStorage dataStorage) .get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "SOCKET", firstComponentObject.getSocket(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "SOCKET", firstComponentObject.getSocket(), secondComponentObject.getSocket()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getFormFactor(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "FORM FACTOR", firstComponentObject.getFormFactor(), secondComponentObject.getFormFactor()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java index 3085ccfd39..cb5dd456de 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java @@ -54,19 +54,19 @@ public String executeCommand(DataStorage dataStorage) PSU secondComponentObject = (PSU) dataStorage.stringToComponentListMap.get("psu").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "EFFICIENCY", firstComponentObject.getEfficiency(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "EFFICIENCY", firstComponentObject.getEfficiency(), secondComponentObject.getEfficiency()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "FORM FACTOR", firstComponentObject.getFormFactor(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "FORM FACTOR", firstComponentObject.getFormFactor(), secondComponentObject.getFormFactor()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java index 681c7e6155..4a8d7db2ae 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java @@ -54,21 +54,21 @@ public String executeCommand(DataStorage dataStorage) RAM secondComponentObject = (RAM) dataStorage.stringToComponentListMap.get("ram").get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "MEMORY", firstComponentObject.getMemory() + "GB", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "MEMORY", firstComponentObject.getMemory() + "GB", secondComponentObject.getMemory() + "GB"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "STICKS", firstComponentObject.getSticks(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "STICKS", firstComponentObject.getSticks(), secondComponentObject.getSticks()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "SPEED", firstComponentObject.getSpeed() + "MHz", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "SPEED", firstComponentObject.getSpeed() + "MHz", secondComponentObject.getSpeed() + "MHz"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java index 836d3aee7a..104ab8f215 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java @@ -57,19 +57,19 @@ public String executeCommand(DataStorage dataStorage) .get(secondComponentIndex); //format the comparison table in outputString - String outputString = String.format("%86s", "_".repeat(86)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "NAME", firstComponentObject.getName(), + String outputString = String.format("%96s", "_".repeat(96)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "-".repeat(12), "-".repeat(35), "-".repeat(35)); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "PRICE", "$" + firstComponentObject.getPrice(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "-".repeat(12), "-".repeat(40), "-".repeat(40)); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "TYPE", firstComponentObject.getType(), + outputString += String.format("%n|%-12s|%-40s|%-40s|", "TYPE", firstComponentObject.getType(), secondComponentObject.getType()); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "SIZE", firstComponentObject.getSize() + "GB", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "SIZE", firstComponentObject.getSize() + "GB", secondComponentObject.getSize() + "GB"); - outputString += String.format("%n|%-12s|%-35s|%-35s|", "POWER", firstComponentObject.getPower() + "W", + outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n%86s", "_".repeat(86)); + outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 0aaa617ca6..ffb02ccad3 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.command.buildercommand.BuilderCompareChassisCommand; import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand; import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; import seedu.bigpp.command.buildercommand.BuilderCompareMotherboardCommand; import seedu.bigpp.command.buildercommand.BuilderComparePsuCommand; @@ -22,12 +23,11 @@ import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.ui.UI; + import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; -import static seedu.bigpp.component.ComponentType.CPU_TYPE; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; import static seedu.bigpp.component.ComponentType.GPU_TYPE; import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; import static seedu.bigpp.component.ComponentType.PSU_TYPE; @@ -37,8 +37,7 @@ public class Parser { /** - * Parses user input into command for execution, separates viewer and builder - * commands. + * Parses user input into command for execution, separates viewer and builder commands. * @param userInput full user input string * @return the command */ @@ -82,7 +81,7 @@ public Command parseCommand(String userInput) { /** * Parses user input for viewer commands. * @param commandWord the command word - * @param arguments the arguments + * @param arguments the arguments * @return the command */ private Command parseViewerCommand(String commandWord, String arguments) { @@ -104,7 +103,7 @@ private Command parseViewerCommand(String commandWord, String arguments) { /** * Parses user input for builder commands. * @param commandWord the command word - * @param arguments the arguments + * @param arguments the arguments * @return the command */ private Command parseBuilderCommand(String commandWord, String arguments) { @@ -192,7 +191,7 @@ private Command parseCompareCommand(String arguments) { case CHASSIS_TYPE: return new BuilderCompareChassisCommand(attributes); case CPU_COOLER_TYPE: - //return new BuilderCompareCpuCoolerCommand(attributes); + return new BuilderCompareCpuCoolerCommand(attributes); default: return new UnrecognizedCommand( "Invalid component type!, valid types are " From 3e3bfc4ae84aebbd597056f32cd1f469591c0f77 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 21 Mar 2023 01:36:35 +0800 Subject: [PATCH 168/420] Add flags to filter component list --- src/main/java/seedu/bigpp/BigPP.java | 2 +- .../BuilderListComponentCommand.java | 135 ++++++++++++++++-- .../BuilderInvalidNumberFlags.java | 11 ++ .../BuilderInvalidPriceNumber.java | 11 ++ .../BuilderInvalidPriceType.java | 10 ++ .../BuilderMissingBrandException.java | 10 ++ .../BuilderPriceFlagException.java | 10 ++ .../BuilderPriceLogicException.java | 10 ++ .../BuilderPriceMissingArguments.java | 10 ++ .../BuilderListComponentCommandTest.java | 14 +- 10 files changed, 211 insertions(+), 12 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java diff --git a/src/main/java/seedu/bigpp/BigPP.java b/src/main/java/seedu/bigpp/BigPP.java index 3154eceadf..d82379f639 100644 --- a/src/main/java/seedu/bigpp/BigPP.java +++ b/src/main/java/seedu/bigpp/BigPP.java @@ -39,7 +39,7 @@ public void run() { * Runs the program until the user issues the exit command. */ private void runLoopUntilExit() { - LOGGER.setLevel(Level.INFO); + LOGGER.setLevel(Level.SEVERE); try { FileHandler handler = new FileHandler("BigPP.log", true); handler.setFormatter(new SimpleFormatter()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index bf7a7be5ab..2a9f4a96b5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -3,13 +3,28 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceFlagException; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberFlags; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceType; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; + import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; +import seedu.bigpp.component.Component; +import seedu.bigpp.component.ComponentList; +import java.util.ArrayList; public class BuilderListComponentCommand extends Command { + public static final String NAME_FLAG = "-name"; + public static final String PRICE_FLAG = "-price"; + public static final String BRAND_FLAG = "-brand"; + public BuilderListComponentCommand(String arguments) { setArguments(arguments); } @@ -20,27 +35,127 @@ public BuilderListComponentCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws BuilderMissingListException, - BuilderIncorrectComponentException, BuilderMissingComponentException { + BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderInvalidNumberFlags, + BuilderInvalidPriceType, BuilderInvalidPriceNumber, BuilderPriceLogicException, + BuilderPriceMissingArguments, BuilderMissingNameException, BuilderPriceFlagException { assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; - String componentTypeString = getArguments(); - if (componentTypeString.equals("")) { + String userInputString = getArguments(); + userInputString = userInputString.toLowerCase(); + + String[] userInputStringArray = userInputString.split(" "); + String componentType = userInputStringArray[0]; + + if (userInputString.equals("")) { throw new BuilderMissingComponentException(); } - if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { + if (!dataStorage.stringToComponentListMap.containsKey(componentType)) { throw new BuilderIncorrectComponentException(); } - componentTypeString = componentTypeString.toLowerCase(); + ComponentList componentList = dataStorage.stringToComponentListMap.get(componentType); + ArrayList flagDescriptionArray = new ArrayList(); + for (int i = 1; i < userInputStringArray.length; i++) { + String flagCommand = userInputStringArray[i].trim(); - // throw exception if component type is not valid eg. "list jfk" - if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { - throw new BuilderIncorrectComponentException(); + switch (flagCommand) { + case NAME_FLAG: + try { + if (userInputStringArray.length < i + 2) { + throw new BuilderMissingNameException(); + } + String flagArgument = userInputStringArray[i + 1].trim(); + componentList = filterByName(componentList, flagArgument); + flagDescriptionArray.add("name: " + flagArgument); + } catch (ArrayIndexOutOfBoundsException e) { + throw new BuilderInvalidNumberFlags(); + } + break; + case BRAND_FLAG: + try { + String flagArgument = userInputStringArray[i + 1].trim(); + componentList = filterByBrand(componentList, flagArgument); + flagDescriptionArray.add("brand: " + flagArgument); + } catch (ArrayIndexOutOfBoundsException e) { + throw new BuilderInvalidNumberFlags(); + } + break; + case PRICE_FLAG: + try { + if (userInputStringArray.length < i + 4) { + throw new BuilderPriceMissingArguments(); + } + if (!(userInputStringArray[i + 1].equals("/from") && userInputStringArray[i + 3].equals("/to"))) { + throw new BuilderPriceFlagException(); + } + String priceFrom = userInputStringArray[i + 2]; + String priceTo = userInputStringArray[i + 4]; + if (priceFrom.matches(".*d.*") || priceTo.matches(".*d.*")) { + throw new BuilderInvalidPriceType(); + } + if (Float.parseFloat(priceFrom) > Float.parseFloat(priceTo)) { + throw new BuilderPriceLogicException(); + } + if (Float.parseFloat(priceFrom) <= 0 || Float.parseFloat(priceTo) <= 0) { + throw new BuilderInvalidPriceNumber(); + } + componentList = filterByPrice(componentList, priceFrom, priceTo); + flagDescriptionArray.add("price: from " + priceFrom + " to " + priceTo); + } catch (ArrayIndexOutOfBoundsException e) { + throw new BuilderInvalidNumberFlags(); + } + break; + default: + break; + } } + String outputString = ""; - String outputString = "Here are all available components of type '" + componentTypeString + "': \n"; + if (componentList.size() == 0) { + outputString = "There are no components of type '" + componentType + "' "; + } else { + outputString = "Here are all available components of type '" + componentType + "': \n"; + } + + if (flagDescriptionArray.size() > 0) { + outputString += "meeting the following criteria: \n"; + for (String flagDescription : flagDescriptionArray) { + outputString += flagDescription + "\n"; + } + } - return outputString + dataStorage.stringToComponentListMap.get(componentTypeString).getListString(); + return outputString + componentList.getListString(); + } + + private ComponentList filterByName(ComponentList componentList, String name) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getName().toLowerCase().contains(name)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; + } + + private ComponentList filterByBrand(ComponentList componentList, String brand) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getBrand().toLowerCase().contains(brand)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; + } + + private ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getPrice() >= Float.parseFloat(priceFrom) && component.getPrice() <= Float.parseFloat( + priceTo)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; } } diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java new file mode 100644 index 0000000000..8821562f04 --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java @@ -0,0 +1,11 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidNumberFlags extends PPException{ + @Override + public String getMessage() { + return "Please enter a valid number of flags"; + } + +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java new file mode 100644 index 0000000000..c512ca714f --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java @@ -0,0 +1,11 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidPriceNumber extends PPException { + @Override + public String getMessage() { + return "Price must be a positive integer"; + } + +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java new file mode 100644 index 0000000000..1aa91509ff --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderInvalidPriceType extends PPException { + @Override + public String getMessage() { + return "Price must be an integer"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java new file mode 100644 index 0000000000..61b4f8ddba --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMissingBrandException extends PPException { + @Override + public String getMessage() { + return "Please enter a brand"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java new file mode 100644 index 0000000000..f1389ee11d --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderPriceFlagException extends PPException { + @Override + public String getMessage() { + return "Please use /from and /to to specify the price range."; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java new file mode 100644 index 0000000000..7ff562e26f --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderPriceLogicException extends PPException { + @Override + public String getMessage() { + return "Price to must be greater than price from"; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java new file mode 100644 index 0000000000..a50f40c2eb --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderPriceMissingArguments extends PPException{ + @Override + public String getMessage() { + return "Please enter description for price from and price to"; + } +} diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 849daafeea..ec619d6251 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -4,8 +4,17 @@ import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceFlagException; import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidCustomArgumentLengthException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberFlags; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; +import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceType; import static seedu.bigpp.component.ComponentType.CPU_TYPE; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -44,7 +53,10 @@ public class BuilderListComponentCommandTest { @Test public void executeCommand_listComponentCommand_success() throws BuilderMissingListException, BuilderIncorrectComponentException, - BuilderMissingComponentException { + BuilderMissingComponentException, BuilderInvalidCustomArgumentLengthException, BuilderInvalidTypeException, + BuilderInvalidNumberFlags, BuilderInvalidPriceNumber, BuilderPriceLogicException, + BuilderPriceMissingArguments, BuilderInvalidPriceType, BuilderMissingNameException, + BuilderPriceFlagException { dataStorage.initStringToComponentListMap(); dataStorage.loadAll(); From 6e23031516f1a0f79a7384f0730e54f7516c175d Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 21 Mar 2023 01:36:56 +0800 Subject: [PATCH 169/420] Delete BigPP.log.1 --- BigPP.log.1 | 92 ----------------------------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 BigPP.log.1 diff --git a/BigPP.log.1 b/BigPP.log.1 deleted file mode 100644 index 452d22e4b6..0000000000 --- a/BigPP.log.1 +++ /dev/null @@ -1,92 +0,0 @@ -Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: add pc -Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerAddCommand -Mar 20, 2023 5:22:54 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Custom PC: [ pc ] has been created -Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: edit 4 -Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand -Mar 20, 2023 5:22:58 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Currently editing PC: pc -Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare cpu 1 & 2 -Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand -Mar 20, 2023 5:23:05 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: |Intel core i3-10100|Intel core i5-10600k| -|----------|----------| -|99.500000 |182.470001| -Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: bye -Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand -Mar 20, 2023 5:40:33 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Bye. Hope to see you again soon! -Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: edit 1 -Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand -Mar 20, 2023 6:26:41 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Currently editing PC: beginner (copy) -Mar 20, 2023 6:27:00 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare gpu 1 & 5 -Mar 20, 2023 6:27:00 PM seedu.bigpp.BigPP runLoopUntilExit -WARNING: Please enter a valid index -Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare gpu 1 & 2 -Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand -Mar 20, 2023 6:27:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ________________________________________________________ -|NAME |Gigabyte GAMING OC RTX3050 |MSI GeForce RTX 3060 Gaming X12G | -|------------|-----------------------------------|-----------------------------------| -|PRICE |$309.99 |$379.99 | -|POWER |115.0W |170.0W | -|SIZE |mini |micro | -________________________________________________________ -Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: edit 4 -Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand -Mar 20, 2023 9:22:03 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Currently editing PC: pc -Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare cpu-cooler 1 & 3 -Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand -Mar 20, 2023 9:22:10 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ________________________________________________________________________________________________ -|NAME | Thermalright AXP90-X36 | NZXT T120 RGB | -|------------|----------------------------------------|----------------------------------------| -|PRICE | $22.9 | $59.9 | -|RPM | 2700RPM | 1800RPM | -|NOISE | 22.4dB | 27.5dB | -|POWER | 2.0W | 2.0W | -________________________________________________________________________________________________ -Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: comapre cpu-cooler 2 & 4 -Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.commoncommand.UnrecognizedCommand -Mar 20, 2023 9:22:27 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Unrecognised command. -Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare cpu-cooler 2 & 4 -Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand -Mar 20, 2023 9:22:40 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ________________________________________________________________________________________________ -|NAME | Noctua NH-L9i | Cooler Master MASTERLIQUID ML120L RGB V2| -|------------|----------------------------------------|----------------------------------------| -|PRICE | $44.95 | $86.78 | -|RPM | 2500RPM | 1800RPM | -|NOISE | 23.6dB | 27.0dB | -|POWER | 2.0W | 2.0W | -________________________________________________________________________________________________ -Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: bye -Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand -Mar 20, 2023 9:23:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Bye. Hope to see you again soon! From d5d7a6728adf1e9df3b9d4b5bce544588f75a941 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 21 Mar 2023 01:37:09 +0800 Subject: [PATCH 170/420] Delete BigPP.log.2 --- BigPP.log.2 | 242 ---------------------------------------------------- 1 file changed, 242 deletions(-) delete mode 100644 BigPP.log.2 diff --git a/BigPP.log.2 b/BigPP.log.2 deleted file mode 100644 index cb44f2d4d8..0000000000 --- a/BigPP.log.2 +++ /dev/null @@ -1,242 +0,0 @@ -Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: edit 4 -Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.viewercommand.ViewerEditCommand -Mar 20, 2023 6:28:16 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Currently editing PC: pc -Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare gpu 1 & 2 -Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand -Mar 20, 2023 6:28:23 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ______________________________________________________________________________________ -|NAME |Gigabyte GAMING OC RTX3050 |MSI GeForce RTX 3060 Gaming X12G | -|------------|-----------------------------------|-----------------------------------| -|PRICE |$309.99 |$379.99 | -|POWER |115.0W |170.0W | -|SIZE |mini |micro | -______________________________________________________________________________________ -Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare cpu 1 & 11 -Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand -Mar 20, 2023 6:28:38 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ________________________________________________________ -|NAME |Intel core i3-10100 |AMD Ryzen 7 7700X | -|------------|--------------------|--------------------| -|PRICE |$99.5 |$341.29 | -|SOCKET |LGA1200 |AM5 | -|CORES |4 |8 | -|THREADS |8 |16 | -|BASE CLOCK |3.6GHz |4.5GHz | -|BOOST CLOCK |4.3GHz |5.4GHz | -|POWER |65.0W |105.0W | -________________________________________________________ -Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: list gpu -Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand -Mar 20, 2023 6:29:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Here are all available components of type 'gpu': -1. -NAME: Gigabyte GAMING OC RTX3050 -BRAND: Gigabyte -PRICE: 309.99 -POWER: 115.0 -SIZE: mini -================ -2. -NAME: MSI GeForce RTX 3060 Gaming X12G -BRAND: MSI -PRICE: 379.99 -POWER: 170.0 -SIZE: micro -================ -3. -NAME: Asus TUF GAMING OC RTX3070 Ti -BRAND: Asus -PRICE: 786.99 -POWER: 290.0 -SIZE: atx -================ -4. -NAME: MSI GAMING Z TRIO RTX3080 -BRAND: MSI -PRICE: 934.06 -POWER: 350.0 -SIZE: atx -================ - -Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare gpu 2 & 3 -Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand -Mar 20, 2023 6:30:34 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ______________________________________________________________________________________ -|NAME |MSI GeForce RTX 3060 Gaming X12G |Asus TUF GAMING OC RTX3070 Ti | -|------------|-----------------------------------|-----------------------------------| -|PRICE |$379.99 |$786.99 | -|POWER |170.0W |290.0W | -|SIZE |micro |atx | -______________________________________________________________________________________ -Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: list cpu -Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderListComponentCommand -Mar 20, 2023 6:31:09 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Here are all available components of type 'cpu': -1. -NAME: Intel core i3-10100 -BRAND: Intel -PRICE: 99.5 -CORES: 4 -THREADS: 8 -BASECLOCK: 3.6 -BOOSTCLOCK: 4.3 -POWER: 65.0 -SOCKET: LGA1200 -================ -2. -NAME: Intel core i5-10600k -BRAND: Intel -PRICE: 182.47 -CORES: 6 -THREADS: 12 -BASECLOCK: 4.1 -BOOSTCLOCK: 4.8 -POWER: 125.0 -SOCKET: LGA1200 -================ -3. -NAME: Intel core i7-10700k -BRAND: Intel -PRICE: 269.95 -CORES: 8 -THREADS: 16 -BASECLOCK: 3.8 -BOOSTCLOCK: 5.1 -POWER: 125.0 -SOCKET: LGA1200 -================ -4. -NAME: Intel core i3-12100f -BRAND: Intel -PRICE: 106.93 -CORES: 4 -THREADS: 8 -BASECLOCK: 3.3 -BOOSTCLOCK: 4.3 -POWER: 58.0 -SOCKET: LGA1700 -================ -5. -NAME: Intel core i5-12600k -BRAND: Intel -PRICE: 213.82 -CORES: 10 -THREADS: 20 -BASECLOCK: 3.7 -BOOSTCLOCK: 4.9 -POWER: 125.0 -SOCKET: LGA1700 -================ -6. -NAME: Intel core i7-12700k -BRAND: Intel -PRICE: 312.88 -CORES: 12 -THREADS: 24 -BASECLOCK: 3.6 -BOOSTCLOCK: 5.0 -POWER: 125.0 -SOCKET: LGA1700 -================ -7. -NAME: AMD Ryzen 3 3200G -BRAND: AMD -PRICE: 97.5 -CORES: 4 -THREADS: 4 -BASECLOCK: 3.6 -BOOSTCLOCK: 4.0 -POWER: 65.0 -SOCKET: AM4 -================ -8. -NAME: AMD Ryzen 5 5600X -BRAND: AMD -PRICE: 156.64 -CORES: 6 -THREADS: 12 -BASECLOCK: 3.7 -BOOSTCLOCK: 4.6 -POWER: 65.0 -SOCKET: AM4 -================ -9. -NAME: AMD Ryzen 7 5800X -BRAND: AMD -PRICE: 211.33 -CORES: 8 -THREADS: 16 -BASECLOCK: 3.8 -BOOSTCLOCK: 4.7 -POWER: 105.0 -SOCKET: AM4 -================ -10. -NAME: AMD Ryzen 5 7600X -BRAND: AMD -PRICE: 240.86 -CORES: 6 -THREADS: 12 -BASECLOCK: 4.7 -BOOSTCLOCK: 5.3 -POWER: 105.0 -SOCKET: AM5 -================ -11. -NAME: AMD Ryzen 7 7700X -BRAND: AMD -PRICE: 341.29 -CORES: 8 -THREADS: 16 -BASECLOCK: 4.5 -BOOSTCLOCK: 5.4 -POWER: 105.0 -SOCKET: AM5 -================ -12. -NAME: AMD Ryzen 9 7950X -BRAND: AMD -PRICE: 589.0 -CORES: 16 -THREADS: 32 -BASECLOCK: 4.5 -BOOSTCLOCK: 5.7 -POWER: 170.0 -SOCKET: AM5 -================ - -Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: compare cpu 10 & 12 -Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand -Mar 20, 2023 6:31:57 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: ________________________________________________________ -|NAME |AMD Ryzen 5 7600X |AMD Ryzen 9 7950X | -|------------|--------------------|--------------------| -|PRICE |$240.86 |$589.0 | -|SOCKET |AM5 |AM5 | -|CORES |6 |16 | -|THREADS |12 |32 | -|BASE CLOCK |4.7GHz |4.5GHz | -|BOOST CLOCK |5.3GHz |5.7GHz | -|POWER |105.0W |170.0W | -________________________________________________________ -Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: User input: bye -Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Command executed: seedu.bigpp.command.commoncommand.ByeCommand -Mar 20, 2023 6:32:08 PM seedu.bigpp.BigPP runLoopUntilExit -INFO: Result: Bye. Hope to see you again soon! From 5559c242db99dea5433104e50d57bca7705c7f64 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 21 Mar 2023 01:55:17 +0800 Subject: [PATCH 171/420] Change magic strings to ComponentType --- .../BuilderCompareChassisCommand.java | 12 +++++++----- .../BuilderCompareCpuCommand.java | 12 +++++++----- .../BuilderCompareCpuCoolerCommand.java | 12 +++++++----- .../BuilderCompareGpuCommand.java | 12 +++++++----- .../BuilderCompareMotherboardCommand.java | 12 +++++++----- .../BuilderComparePsuCommand.java | 12 +++++++----- .../BuilderCompareRamCommand.java | 12 +++++++----- .../BuilderCompareStorageCommand.java | 12 +++++++----- src/main/java/seedu/bigpp/parser/Parser.java | 16 ++++++++-------- 9 files changed, 64 insertions(+), 48 deletions(-) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareChassisCommand.java (91%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareCpuCommand.java (91%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareCpuCoolerCommand.java (90%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareGpuCommand.java (90%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareMotherboardCommand.java (90%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderComparePsuCommand.java (90%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareRamCommand.java (90%) rename src/main/java/seedu/bigpp/command/buildercommand/{ => comparecommand}/BuilderCompareStorageCommand.java (91%) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java similarity index 91% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java index 2d7a7bfb88..ca3da140d8 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.chassis.Chassis; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; + public class BuilderCompareChassisCommand extends Command { public BuilderCompareChassisCommand(String arguments) { setArguments(arguments); @@ -41,19 +43,19 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("chassis") + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("chassis") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - Chassis firstComponentObject = (Chassis) dataStorage.stringToComponentListMap.get("chassis") + Chassis firstComponentObject = (Chassis) dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .get(firstComponentIndex); - Chassis secondComponentObject = (Chassis) dataStorage.stringToComponentListMap.get("chassis") + Chassis secondComponentObject = (Chassis) dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .get(secondComponentIndex); //format the comparison table in outputString diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java similarity index 91% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java index e651ec26b9..db5a86f814 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.cpu.CPU; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.CPU_TYPE; + public class BuilderCompareCpuCommand extends Command { public BuilderCompareCpuCommand(String arguments) { @@ -42,17 +44,17 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("cpu").size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE).size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("cpu") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - CPU firstComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(firstComponentIndex); - CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get("cpu").get(secondComponentIndex); + CPU firstComponentObject = (CPU) dataStorage.stringToComponentListMap.get(CPU_TYPE).get(firstComponentIndex); + CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get(CPU_TYPE).get(secondComponentIndex); //format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java similarity index 90% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java index e1cc3173ce..6b4dfcb52e 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.cpucooler.CPUCooler; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; + public class BuilderCompareCpuCoolerCommand extends Command { public BuilderCompareCpuCoolerCommand(String arguments) { setArguments(arguments); @@ -41,19 +43,19 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("cpu-cooler") + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("cpu-cooler") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - CPUCooler firstComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get("cpu-cooler") + CPUCooler firstComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .get(firstComponentIndex); - CPUCooler secondComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get("cpu-cooler") + CPUCooler secondComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .get(secondComponentIndex); //format the comparison table in outputString diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java similarity index 90% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java index 4bc0c86499..39147956f0 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.gpu.GPU; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; + public class BuilderCompareGpuCommand extends Command { public BuilderCompareGpuCommand(String arguments) { setArguments(arguments); @@ -41,17 +43,17 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("gpu").size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE).size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("gpu") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - GPU firstComponentObject = (GPU) dataStorage.stringToComponentListMap.get("gpu").get(firstComponentIndex); - GPU secondComponentObject = (GPU) dataStorage.stringToComponentListMap.get("gpu").get(secondComponentIndex); + GPU firstComponentObject = (GPU) dataStorage.stringToComponentListMap.get(GPU_TYPE).get(firstComponentIndex); + GPU secondComponentObject = (GPU) dataStorage.stringToComponentListMap.get(GPU_TYPE).get(secondComponentIndex); //format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java similarity index 90% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java index b360b022d2..9214a71e1b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.motherboard.Motherboard; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; + public class BuilderCompareMotherboardCommand extends Command { public BuilderCompareMotherboardCommand(String arguments) { setArguments(arguments); @@ -41,19 +43,19 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("motherboard") + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("motherboard") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - Motherboard firstComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get("motherboard") + Motherboard firstComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .get(firstComponentIndex); - Motherboard secondComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get("motherboard") + Motherboard secondComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .get(secondComponentIndex); //format the comparison table in outputString diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java similarity index 90% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java index cb5dd456de..59e95f4658 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderComparePsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.psu.PSU; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; + public class BuilderComparePsuCommand extends Command { public BuilderComparePsuCommand(String arguments) { setArguments(arguments); @@ -41,17 +43,17 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("psu").size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE).size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("psu") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - PSU firstComponentObject = (PSU) dataStorage.stringToComponentListMap.get("psu").get(firstComponentIndex); - PSU secondComponentObject = (PSU) dataStorage.stringToComponentListMap.get("psu").get(secondComponentIndex); + PSU firstComponentObject = (PSU) dataStorage.stringToComponentListMap.get(PSU_TYPE).get(firstComponentIndex); + PSU secondComponentObject = (PSU) dataStorage.stringToComponentListMap.get(PSU_TYPE).get(secondComponentIndex); //format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java similarity index 90% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java index 4a8d7db2ae..44d4c12fed 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.ram.RAM; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; + public class BuilderCompareRamCommand extends Command { public BuilderCompareRamCommand(String arguments) { setArguments(arguments); @@ -41,17 +43,17 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("ram").size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE).size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("ram") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - RAM firstComponentObject = (RAM) dataStorage.stringToComponentListMap.get("ram").get(firstComponentIndex); - RAM secondComponentObject = (RAM) dataStorage.stringToComponentListMap.get("ram").get(secondComponentIndex); + RAM firstComponentObject = (RAM) dataStorage.stringToComponentListMap.get(RAM_TYPE).get(firstComponentIndex); + RAM secondComponentObject = (RAM) dataStorage.stringToComponentListMap.get(RAM_TYPE).get(secondComponentIndex); //format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java similarity index 91% rename from src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java rename to src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java index 104ab8f215..7f1ff69e86 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCompareStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java @@ -1,4 +1,4 @@ -package seedu.bigpp.command.buildercommand; +package seedu.bigpp.command.buildercommand.comparecommand; import seedu.bigpp.command.Command; import seedu.bigpp.component.storage.Storage; @@ -7,6 +7,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; + public class BuilderCompareStorageCommand extends Command { public BuilderCompareStorageCommand(String arguments) { setArguments(arguments); @@ -41,19 +43,19 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get("storage") + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get("storage") + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } //get the 2 components - Storage firstComponentObject = (Storage) dataStorage.stringToComponentListMap.get("storage") + Storage firstComponentObject = (Storage) dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .get(firstComponentIndex); - Storage secondComponentObject = (Storage) dataStorage.stringToComponentListMap.get("storage") + Storage secondComponentObject = (Storage) dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .get(secondComponentIndex); //format the comparison table in outputString diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index ffb02ccad3..faf27b6f57 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,14 +1,14 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.BuilderCompareChassisCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareCpuCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareCpuCoolerCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareGpuCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareMotherboardCommand; -import seedu.bigpp.command.buildercommand.BuilderComparePsuCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareRamCommand; -import seedu.bigpp.command.buildercommand.BuilderCompareStorageCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareChassisCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCoolerCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareGpuCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareMotherboardCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderComparePsuCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareRamCommand; +import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareStorageCommand; import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; From 51f932b587d30e80c89f9a5fd65091f4e783ab2e Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 21 Mar 2023 02:06:38 +0800 Subject: [PATCH 172/420] Format code to fit within max line length --- .../comparecommand/BuilderCompareCpuCommand.java | 3 ++- .../comparecommand/BuilderCompareCpuCoolerCommand.java | 3 ++- .../comparecommand/BuilderCompareGpuCommand.java | 3 ++- .../comparecommand/BuilderCompareMotherboardCommand.java | 3 ++- .../comparecommand/BuilderComparePsuCommand.java | 3 ++- .../comparecommand/BuilderCompareRamCommand.java | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java index db5a86f814..33de4faf59 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java @@ -44,7 +44,8 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE).size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE) + .size()) { throw new PPIndexOutOfBoundsException(); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java index 6b4dfcb52e..14370e9c6d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java @@ -47,7 +47,8 @@ public String executeCommand(DataStorage dataStorage) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get( + CPU_COOLER_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java index 39147956f0..fc775f8fd6 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java @@ -43,7 +43,8 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE).size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE) + .size()) { throw new PPIndexOutOfBoundsException(); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java index 9214a71e1b..bc074b518f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java @@ -47,7 +47,8 @@ public String executeCommand(DataStorage dataStorage) .size()) { throw new PPIndexOutOfBoundsException(); } - if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) + if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get( + MOTHERBOARD_TYPE) .size()) { throw new PPIndexOutOfBoundsException(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java index 59e95f4658..1ff357c1d3 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java @@ -43,7 +43,8 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE).size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE) + .size()) { throw new PPIndexOutOfBoundsException(); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java index 44d4c12fed..30dac8c3fc 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java @@ -43,7 +43,8 @@ public String executeCommand(DataStorage dataStorage) } //check if index is out of bounds - if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE).size()) { + if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE) + .size()) { throw new PPIndexOutOfBoundsException(); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE) From 20ade2e0f3409b5cc60ae53ad23b048d91c2746e Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 21 Mar 2023 02:29:18 +0800 Subject: [PATCH 173/420] Add a check for positive numbers in custom cpu creation --- .../command/buildercommand/BuilderCustomCpuCommand.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index c660824508..19b17621e7 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -45,6 +45,12 @@ public String executeCommand(DataStorage dataStorage) throws BuilderInvalidCusto baseClock = Float.parseFloat(argumentList[5]); boostClock = Float.parseFloat(argumentList[6]); power = Float.parseFloat(argumentList[7]); + + // Check if all the values are positive + if (price < 0 || cores < 0 || threads < 0 || baseClock < 0 || boostClock < 0 || power < 0) { + return "price, baseClock, boostClock, power, cores and threads should be positive"; + } + } catch (NumberFormatException e) { return "price, baseClock, boostClock and power should be a float, cores and threads should be an integer"; } From 8f23eb858abedae0965141729582457ded946355 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 21 Mar 2023 02:36:33 +0800 Subject: [PATCH 174/420] Add change to ensure user input was lower case for componentType in custom command --- src/main/java/seedu/bigpp/parser/Parser.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index ffb02ccad3..f721ec39e6 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -37,7 +37,8 @@ public class Parser { /** - * Parses user input into command for execution, separates viewer and builder commands. + * Parses user input into command for execution, separates viewer and builder + * commands. * @param userInput full user input string * @return the command */ @@ -81,7 +82,7 @@ public Command parseCommand(String userInput) { /** * Parses user input for viewer commands. * @param commandWord the command word - * @param arguments the arguments + * @param arguments the arguments * @return the command */ private Command parseViewerCommand(String commandWord, String arguments) { @@ -103,7 +104,7 @@ private Command parseViewerCommand(String commandWord, String arguments) { /** * Parses user input for builder commands. * @param commandWord the command word - * @param arguments the arguments + * @param arguments the arguments * @return the command */ private Command parseBuilderCommand(String commandWord, String arguments) { @@ -137,7 +138,7 @@ private Command parseBuilderCommand(String commandWord, String arguments) { */ private Command parseCustomCommand(String arguments) { String[] inputList = arguments.split(" ", 2); - String componentType = inputList[0]; + String componentType = inputList[0].toLowerCase(); String attributes = ""; if (inputList.length == 2) { attributes = inputList[1]; From b8ba69961be8f8224f0b6a4914cd85075ec2de50 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 21 Mar 2023 12:59:51 +0800 Subject: [PATCH 175/420] Add exception for flags as arguments and abstracted methods to componentlist --- BigPP.log.lck | 0 .../BuilderListComponentCommand.java | 67 +++++++++---------- .../seedu/bigpp/component/ComponentList.java | 31 +++++++++ ...s.java => BuilderInvalidFlagArgument.java} | 4 +- .../BuilderListComponentCommandTest.java | 7 +- 5 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 BigPP.log.lck rename src/main/java/seedu/bigpp/exceptions/builderexceptions/{BuilderInvalidNumberFlags.java => BuilderInvalidFlagArgument.java} (55%) diff --git a/BigPP.log.lck b/BigPP.log.lck new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 2a9f4a96b5..dfde0a83b0 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -8,16 +8,17 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberFlags; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidFlagArgument; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceType; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBrandException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; -import seedu.bigpp.component.Component; import seedu.bigpp.component.ComponentList; import java.util.ArrayList; +import java.util.Arrays; public class BuilderListComponentCommand extends Command { @@ -35,9 +36,10 @@ public BuilderListComponentCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws BuilderMissingListException, - BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderInvalidNumberFlags, + BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderInvalidFlagArgument, BuilderInvalidPriceType, BuilderInvalidPriceNumber, BuilderPriceLogicException, - BuilderPriceMissingArguments, BuilderMissingNameException, BuilderPriceFlagException { + BuilderPriceMissingArguments, BuilderMissingNameException, BuilderPriceFlagException, + BuilderMissingBrandException { assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; @@ -66,23 +68,35 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE throw new BuilderMissingNameException(); } String flagArgument = userInputStringArray[i + 1].trim(); - componentList = filterByName(componentList, flagArgument); + if (isFlag(flagArgument)) { + throw new BuilderInvalidFlagArgument(); + } + componentList = ComponentList.filterByName(componentList, flagArgument); flagDescriptionArray.add("name: " + flagArgument); } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidNumberFlags(); + throw new BuilderInvalidFlagArgument(); } break; case BRAND_FLAG: try { + if (userInputStringArray.length < i + 2) { + throw new BuilderMissingBrandException(); + } String flagArgument = userInputStringArray[i + 1].trim(); - componentList = filterByBrand(componentList, flagArgument); + if (isFlag(flagArgument)) { + throw new BuilderInvalidFlagArgument(); + } + componentList = ComponentList.filterByBrand(componentList, flagArgument); flagDescriptionArray.add("brand: " + flagArgument); } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidNumberFlags(); + throw new BuilderInvalidFlagArgument(); } break; case PRICE_FLAG: try { + if (hasFlag(Arrays.copyOfRange(userInputStringArray, i + 1, i + 4))) { + throw new BuilderInvalidFlagArgument(); + } if (userInputStringArray.length < i + 4) { throw new BuilderPriceMissingArguments(); } @@ -100,10 +114,10 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE if (Float.parseFloat(priceFrom) <= 0 || Float.parseFloat(priceTo) <= 0) { throw new BuilderInvalidPriceNumber(); } - componentList = filterByPrice(componentList, priceFrom, priceTo); + componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); flagDescriptionArray.add("price: from " + priceFrom + " to " + priceTo); } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidNumberFlags(); + throw new BuilderInvalidFlagArgument(); } break; default: @@ -128,34 +142,15 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE return outputString + componentList.getListString(); } - private ComponentList filterByName(ComponentList componentList, String name) { - ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getName().toLowerCase().contains(name)) { - filteredComponentList.add(component); - } - } - return filteredComponentList; - } - - private ComponentList filterByBrand(ComponentList componentList, String brand) { - ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getBrand().toLowerCase().contains(brand)) { - filteredComponentList.add(component); - } - } - return filteredComponentList; + private static boolean isFlag(String flag) { + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG); } - - private ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo) { - ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getPrice() >= Float.parseFloat(priceFrom) && component.getPrice() <= Float.parseFloat( - priceTo)) { - filteredComponentList.add(component); + private static boolean hasFlag(String[] userInputStringArray) { + for (String flag : userInputStringArray) { + if (isFlag(flag)) { + return true; } } - return filteredComponentList; + return false; } } diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index 3b495e1f6b..b482bf48f7 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -13,4 +13,35 @@ public String getListString() { return outputString; } + + public static ComponentList filterByName(ComponentList componentList, String name) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getName().toLowerCase().contains(name)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; + } + + public static ComponentList filterByBrand(ComponentList componentList, String brand) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getBrand().toLowerCase().contains(brand)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; + } + + public static ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo) { + ComponentList filteredComponentList = new ComponentList<>(); + for (Component component : componentList) { + if (component.getPrice() >= Float.parseFloat(priceFrom) && component.getPrice() <= Float.parseFloat( + priceTo)) { + filteredComponentList.add(component); + } + } + return filteredComponentList; + } } diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java similarity index 55% rename from src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java rename to src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java index 8821562f04..b9de337a10 100644 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberFlags.java +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java @@ -2,10 +2,10 @@ import seedu.bigpp.exceptions.PPException; -public class BuilderInvalidNumberFlags extends PPException{ +public class BuilderInvalidFlagArgument extends PPException{ @Override public String getMessage() { - return "Please enter a valid number of flags"; + return "Please enter valid arguments for the flags"; } } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index ec619d6251..f5de5f5a4d 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -10,7 +10,8 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidCustomArgumentLengthException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberFlags; +import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBrandException; +import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidFlagArgument; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; @@ -54,9 +55,9 @@ public class BuilderListComponentCommandTest { public void executeCommand_listComponentCommand_success() throws BuilderMissingListException, BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderInvalidCustomArgumentLengthException, BuilderInvalidTypeException, - BuilderInvalidNumberFlags, BuilderInvalidPriceNumber, BuilderPriceLogicException, + BuilderInvalidFlagArgument, BuilderInvalidPriceNumber, BuilderPriceLogicException, BuilderPriceMissingArguments, BuilderInvalidPriceType, BuilderMissingNameException, - BuilderPriceFlagException { + BuilderPriceFlagException, BuilderMissingBrandException { dataStorage.initStringToComponentListMap(); dataStorage.loadAll(); From 9dce64ed7b2d724c74e67b5052982197373eaa12 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 21 Mar 2023 13:02:34 +0800 Subject: [PATCH 176/420] Add functionality where arguments for flags are not considered as flags --- .../command/buildercommand/BuilderListComponentCommand.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index dfde0a83b0..bfcda0fb42 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -73,6 +73,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE } componentList = ComponentList.filterByName(componentList, flagArgument); flagDescriptionArray.add("name: " + flagArgument); + i++; } catch (ArrayIndexOutOfBoundsException e) { throw new BuilderInvalidFlagArgument(); } @@ -88,6 +89,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE } componentList = ComponentList.filterByBrand(componentList, flagArgument); flagDescriptionArray.add("brand: " + flagArgument); + i++; } catch (ArrayIndexOutOfBoundsException e) { throw new BuilderInvalidFlagArgument(); } @@ -116,6 +118,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE } componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); flagDescriptionArray.add("price: from " + priceFrom + " to " + priceTo); + i += 4; } catch (ArrayIndexOutOfBoundsException e) { throw new BuilderInvalidFlagArgument(); } From f4bc8720a6b3a0c1701f1823317533148167e1df Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 21 Mar 2023 17:43:38 +0800 Subject: [PATCH 177/420] Add budget check for edit budget and adding components --- .../BuilderEditBudgetCommand.java | 7 +++++++ .../buildercommand/BuilderSelectCommand.java | 17 ++++++++++++++--- .../BuilderExceedBudgetException.java | 10 ++++++++++ .../BuilderMinBudgetException.java | 10 ++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderExceedBudgetException.java create mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMinBudgetException.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index fe5b4cd5fb..791df6900c 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.builderexceptions.BuilderMinBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; @@ -38,6 +39,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } int pcIndex = UI.builderMenu.getPCIndex(); + float currentCost = dataStorage.pcList.get(pcIndex).getCost(); + + if (budget < currentCost) { + throw new BuilderMinBudgetException(); + } + dataStorage.pcList.get(pcIndex).setBudget(budget); return "Current build budget is now: " + dataStorage.pcList.get(pcIndex).getBudgetString(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index e87e0f1c16..71cad493c3 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -8,6 +8,7 @@ import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; +import seedu.bigpp.exceptions.builderexceptions.BuilderExceedBudgetException; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; @@ -24,7 +25,8 @@ public BuilderSelectCommand(String arguments) { @Override public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelectException, BuilderIncorrectComponentException, - BuilderMissingIndexException, PPIndexOutOfBoundsException, BuilderInvalidTypeException { + BuilderMissingIndexException, PPIndexOutOfBoundsException, BuilderInvalidTypeException, + BuilderExceedBudgetException { assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; String inputString = getArguments(); @@ -65,11 +67,20 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec int pcIndex = UI.builderMenu.getPCIndex(); + float currentCost = dataStorage.pcList.get(pcIndex).getCost(); + int pcBudget = dataStorage.pcList.get(pcIndex).getBudget(); + float componentPrice = dataStorage.stringToComponentListMap.get(componentTypeString).get(componentIndex) + .getPrice(); + + if (componentPrice + currentCost > pcBudget) { + throw new BuilderExceedBudgetException(); + } + dataStorage.pcList.get(pcIndex) .setComponent((Component) dataStorage.stringToComponentListMap.get(componentTypeString) .get(componentIndex)); - return componentTypeString + " added! : " - + dataStorage.stringToComponentListMap.get(componentTypeString).get(componentIndex).getName(); + return componentTypeString + " added! : " + dataStorage.stringToComponentListMap.get(componentTypeString).get( + componentIndex).getName(); } } diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderExceedBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderExceedBudgetException.java new file mode 100644 index 0000000000..46bb7bb8ed --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderExceedBudgetException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderExceedBudgetException extends PPException { + @Override + public String getMessage() { + return "You have exceeded your budget, component not added."; + } +} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMinBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMinBudgetException.java new file mode 100644 index 0000000000..39d808217c --- /dev/null +++ b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMinBudgetException.java @@ -0,0 +1,10 @@ +package seedu.bigpp.exceptions.builderexceptions; + +import seedu.bigpp.exceptions.PPException; + +public class BuilderMinBudgetException extends PPException { + @Override + public String getMessage() { + return "You have set a budget that is lower than the current cost of the build, please set a higher budget."; + } +} From d58d206705527acf4ec92f943a902a4d73ed6fd7 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 22 Mar 2023 12:41:16 +0800 Subject: [PATCH 178/420] Account for infinite budget in selectcomponent command --- .../bigpp/command/buildercommand/BuilderSelectCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 71cad493c3..90a053a890 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -72,7 +72,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec float componentPrice = dataStorage.stringToComponentListMap.get(componentTypeString).get(componentIndex) .getPrice(); - if (componentPrice + currentCost > pcBudget) { + if (pcBudget != -1 && componentPrice + currentCost > pcBudget) { throw new BuilderExceedBudgetException(); } From 170c59c14b77b7b3ca69bb7a86431ea0ff986fa6 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:34:36 +0800 Subject: [PATCH 179/420] Change how exceptions are handled --- BigPP.log.lck | 0 .../BuilderCustomCpuCommand.java | 19 +++---- .../BuilderEditBudgetCommand.java | 9 ++-- .../BuilderEditNameCommand.java | 3 +- .../buildercommand/BuilderInfoCommand.java | 13 +++-- .../BuilderListComponentCommand.java | 50 +++++++------------ .../buildercommand/BuilderSelectCommand.java | 22 +++----- .../BuilderUnselectCommand.java | 13 +++-- .../BuilderCompareChassisCommand.java | 22 ++++---- .../BuilderCompareCpuCommand.java | 22 ++++---- .../BuilderCompareCpuCoolerCommand.java | 24 ++++----- .../BuilderCompareGpuCommand.java | 23 ++++----- .../BuilderCompareMotherboardCommand.java | 24 ++++----- .../BuilderComparePsuCommand.java | 22 ++++---- .../BuilderCompareRamCommand.java | 22 ++++---- .../BuilderCompareStorageCommand.java | 22 ++++---- .../viewercommand/ViewerAddCommand.java | 3 +- .../viewercommand/ViewerDeleteCommand.java | 14 +++--- .../viewercommand/ViewerEditCommand.java | 13 ++--- .../viewercommand/ViewerViewCommand.java | 13 ++--- .../seedu/bigpp/exceptions/PPException.java | 4 ++ .../PPIndexOutOfBoundsException.java | 8 --- .../BuilderIncorrectComponentException.java | 10 ---- ...rInvalidCustomArgumentLengthException.java | 10 ---- .../BuilderInvalidFlagArgument.java | 11 ---- .../BuilderInvalidNumberBudgetException.java | 10 ---- .../BuilderInvalidPriceNumber.java | 11 ---- .../BuilderInvalidPriceType.java | 10 ---- .../BuilderInvalidTypeBudgetException.java | 10 ---- .../BuilderInvalidTypeException.java | 10 ---- .../BuilderMissingBrandException.java | 10 ---- .../BuilderMissingBudgetException.java | 11 ---- .../BuilderMissingComponentException.java | 10 ---- .../BuilderMissingIndexException.java | 10 ---- .../BuilderMissingListException.java | 11 ---- .../BuilderMissingNameException.java | 11 ---- .../BuilderMissingSelectException.java | 10 ---- .../BuilderNoInfoException.java | 10 ---- .../BuilderNullComponentException.java | 10 ---- .../BuilderPriceFlagException.java | 10 ---- .../BuilderPriceLogicException.java | 10 ---- .../BuilderPriceMissingArguments.java | 10 ---- .../ViewerInvalidTypeException.java | 10 ---- .../ViewerMissingIndexException.java | 10 ---- .../ViewerMissingNameException.java | 14 ------ .../BuilderListComponentCommandTest.java | 21 +------- 46 files changed, 158 insertions(+), 467 deletions(-) delete mode 100644 BigPP.log.lck delete mode 100644 src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java delete mode 100644 src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 19b17621e7..7fc917b438 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -3,7 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidCustomArgumentLengthException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; public class BuilderCustomCpuCommand extends Command { @@ -13,22 +13,22 @@ public BuilderCustomCpuCommand(String arguments) { } @Override - public String executeCommand(DataStorage dataStorage) throws BuilderInvalidCustomArgumentLengthException { + public String executeCommand(DataStorage dataStorage) throws PPException { String arguments = super.getArguments(); String[] argumentList = arguments.split("\\|"); if (argumentList.length != 9) { - throw new BuilderInvalidCustomArgumentLengthException(); + throw new PPException("Please enter a valid number of arguments for the custom component"); } String name = argumentList[0].trim(); if (name.equals("")) { - return "Please enter a valid name for the custom component"; + throw new PPException("Please enter a valid name for the custom component"); } String brand = argumentList[1].trim(); if (brand.equals("")) { - return "Please enter a valid brand for the custom component"; + throw new PPException("Please enter a valid brand for the custom component"); } float price = 0; @@ -45,19 +45,20 @@ public String executeCommand(DataStorage dataStorage) throws BuilderInvalidCusto baseClock = Float.parseFloat(argumentList[5]); boostClock = Float.parseFloat(argumentList[6]); power = Float.parseFloat(argumentList[7]); - + // Check if all the values are positive if (price < 0 || cores < 0 || threads < 0 || baseClock < 0 || boostClock < 0 || power < 0) { - return "price, baseClock, boostClock, power, cores and threads should be positive"; + throw new PPException("price, baseClock, boostClock, power, cores and threads should be positive"); } } catch (NumberFormatException e) { - return "price, baseClock, boostClock and power should be a float, cores and threads should be an integer"; + throw new PPException( + "price, baseClock, boostClock and power should be a float, cores and threads should be an integer"); } String socket = argumentList[8].trim(); if (socket.equals("")) { - return "Please enter a valid socket for the custom component"; + throw new PPException("Please enter a valid socket for the custom component"); } CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index fe5b4cd5fb..d8196a00da 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -3,9 +3,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidNumberBudgetException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBudgetException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeBudgetException; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; @@ -25,16 +22,16 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String argument = super.getArguments(); if (argument.equals("")) { - throw new BuilderMissingBudgetException(); + throw new PPException("Please enter a budget"); } if (argument.matches(".*\\D.*") && !argument.matches("-1")) { - throw new BuilderInvalidTypeBudgetException(); + throw new PPException("Please enter a budget that is an integer"); } int budget = Integer.parseInt(super.getArguments()); if (budget <= 0 && budget != -1) { - throw new BuilderInvalidNumberBudgetException(); + throw new PPException("Please enter a budget that is greater than 0"); } int pcIndex = UI.builderMenu.getPCIndex(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index 8c29ca9c7b..d6c07007f4 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -4,7 +4,6 @@ import seedu.bigpp.ui.UI; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; import seedu.bigpp.ui.UIState; public class BuilderEditNameCommand extends Command { @@ -23,7 +22,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String name = super.getArguments(); if (name.equals("")) { - throw new BuilderMissingNameException(); + throw new PPException("Please enter a name"); } int pcIndex = UI.builderMenu.getPCIndex(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java index b842287396..6c32181ea9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java @@ -2,9 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderNoInfoException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; public class BuilderInfoCommand extends Command { @@ -19,24 +17,25 @@ public BuilderInfoCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingComponentException, BuilderIncorrectComponentException, BuilderNoInfoException { + throws PPException { String componentTypeString = getArguments(); componentTypeString = componentTypeString.toLowerCase(); componentTypeString = componentTypeString.trim(); if (componentTypeString.equals("")) { - throw new BuilderMissingComponentException(); + throw new PPException("Please enter a component"); } // throw exception if component type is not valid eg. "list jfk" if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { - throw new BuilderIncorrectComponentException(); + throw new PPException( + "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } int pcIndex = UI.builderMenu.getPCIndex(); if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { - throw new BuilderNoInfoException(); + throw new PPException("You have not have selected anything for this component"); } String outputString = "Here is the specifications of your selected " + componentTypeString + ": \n"; diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index bfcda0fb42..49e29ee291 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -2,17 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceFlagException; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; -import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidFlagArgument; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceType; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBrandException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; @@ -35,11 +25,7 @@ public BuilderListComponentCommand(String arguments) { * @return the new budget of the PC */ @Override - public String executeCommand(DataStorage dataStorage) throws BuilderMissingListException, - BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderInvalidFlagArgument, - BuilderInvalidPriceType, BuilderInvalidPriceNumber, BuilderPriceLogicException, - BuilderPriceMissingArguments, BuilderMissingNameException, BuilderPriceFlagException, - BuilderMissingBrandException { + public String executeCommand(DataStorage dataStorage) throws PPException { assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; @@ -50,10 +36,11 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE String componentType = userInputStringArray[0]; if (userInputString.equals("")) { - throw new BuilderMissingComponentException(); + throw new PPException("Please enter a component"); } if (!dataStorage.stringToComponentListMap.containsKey(componentType)) { - throw new BuilderIncorrectComponentException(); + throw new PPException( + "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } ComponentList componentList = dataStorage.stringToComponentListMap.get(componentType); @@ -65,62 +52,62 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE case NAME_FLAG: try { if (userInputStringArray.length < i + 2) { - throw new BuilderMissingNameException(); + throw new PPException("Please enter a name"); } String flagArgument = userInputStringArray[i + 1].trim(); if (isFlag(flagArgument)) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } componentList = ComponentList.filterByName(componentList, flagArgument); flagDescriptionArray.add("name: " + flagArgument); i++; } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } break; case BRAND_FLAG: try { if (userInputStringArray.length < i + 2) { - throw new BuilderMissingBrandException(); + throw new PPException("Please enter a brand"); } String flagArgument = userInputStringArray[i + 1].trim(); if (isFlag(flagArgument)) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } componentList = ComponentList.filterByBrand(componentList, flagArgument); flagDescriptionArray.add("brand: " + flagArgument); i++; } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } break; case PRICE_FLAG: try { if (hasFlag(Arrays.copyOfRange(userInputStringArray, i + 1, i + 4))) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } if (userInputStringArray.length < i + 4) { - throw new BuilderPriceMissingArguments(); + throw new PPException("Please enter description for price from and price to"); } if (!(userInputStringArray[i + 1].equals("/from") && userInputStringArray[i + 3].equals("/to"))) { - throw new BuilderPriceFlagException(); + throw new PPException("Please use /from and /to to specify the price range."); } String priceFrom = userInputStringArray[i + 2]; String priceTo = userInputStringArray[i + 4]; if (priceFrom.matches(".*d.*") || priceTo.matches(".*d.*")) { - throw new BuilderInvalidPriceType(); + throw new PPException("Price must be an integer"); } if (Float.parseFloat(priceFrom) > Float.parseFloat(priceTo)) { - throw new BuilderPriceLogicException(); + throw new PPException("Price to must be greater than price from"); } if (Float.parseFloat(priceFrom) <= 0 || Float.parseFloat(priceTo) <= 0) { - throw new BuilderInvalidPriceNumber(); + throw new PPException("Price must be a positive integer"); } componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); flagDescriptionArray.add("price: from " + priceFrom + " to " + priceTo); i += 4; } catch (ArrayIndexOutOfBoundsException e) { - throw new BuilderInvalidFlagArgument(); + throw new PPException("Please enter valid arguments for the flags"); } break; default: @@ -148,6 +135,7 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingListE private static boolean isFlag(String flag) { return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG); } + private static boolean hasFlag(String[] userInputStringArray) { for (String flag : userInputStringArray) { if (isFlag(flag)) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index e87e0f1c16..b1fa121086 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -3,11 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.Component; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingSelectException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; @@ -22,15 +18,13 @@ public BuilderSelectCommand(String arguments) { * @return Added Component message */ @Override - public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelectException, - BuilderIncorrectComponentException, - BuilderMissingIndexException, PPIndexOutOfBoundsException, BuilderInvalidTypeException { + public String executeCommand(DataStorage dataStorage) throws PPException { assert UI.getUiState() == UIState.PCBUILDER : "UI state should be PCBUILDER"; String inputString = getArguments(); // throw exception if no component is selected eg. "select" if (inputString.equals("")) { - throw new BuilderMissingSelectException(); + throw new PPException("Please select a component"); } String[] inputArray = inputString.split(" ", 2); @@ -40,27 +34,27 @@ public String executeCommand(DataStorage dataStorage) throws BuilderMissingSelec // throw exception if component type is not valid eg. "select jfk" if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { - throw new BuilderIncorrectComponentException(); + throw new PPException( + "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } // throw exception if no index is selected eg. "select cpu" if (inputArray.length == 1) { - - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String indexString = inputArray[1].trim(); // throw exception if index is not a number eg. "select cpu a" if (indexString.matches(".*\\D.*")) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } int componentIndex = Integer.parseInt(indexString) - 1; // throw exception if index is out of bounds eg. "select cpu 100" if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } int pcIndex = UI.builderMenu.getPCIndex(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java index b66941fd43..c14a42bb2d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -2,9 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderNullComponentException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; public class BuilderUnselectCommand extends Command { @@ -19,12 +17,12 @@ public BuilderUnselectCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderIncorrectComponentException, BuilderMissingComponentException, BuilderNullComponentException { + throws PPException { String componentTypeString = getArguments(); // throw exception if no component is selected .eg. "Unselect" if (componentTypeString.equals("")) { - throw new BuilderMissingComponentException(); + throw new PPException("Please enter a component"); } componentTypeString = componentTypeString.toLowerCase(); @@ -32,13 +30,14 @@ public String executeCommand(DataStorage dataStorage) // throw exception if component type is not valid .eg. "unselect jfk" if (!dataStorage.stringToComponentListMap.containsKey(componentTypeString)) { - throw new BuilderIncorrectComponentException(); + throw new PPException( + "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } int pcIndex = UI.builderMenu.getPCIndex(); if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { - throw new BuilderNullComponentException(); + throw new PPException("Component is already unselected!"); } dataStorage.pcList.get(pcIndex).setNullComponent(componentTypeString); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java index ca3da140d8..def25e0d55 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; @@ -20,45 +18,45 @@ public BuilderCompareChassisCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components Chassis firstComponentObject = (Chassis) dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .get(firstComponentIndex); Chassis secondComponentObject = (Chassis) dataStorage.stringToComponentListMap.get(CHASSIS_TYPE) .get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java index 33de4faf59..f4659eb33a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.CPU_TYPE; @@ -21,43 +19,43 @@ public BuilderCompareCpuCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components CPU firstComponentObject = (CPU) dataStorage.stringToComponentListMap.get(CPU_TYPE).get(firstComponentIndex); CPU secondComponentObject = (CPU) dataStorage.stringToComponentListMap.get(CPU_TYPE).get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java index 14370e9c6d..e64609ef4b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.cpucooler.CPUCooler; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; @@ -20,46 +18,46 @@ public BuilderCompareCpuCoolerCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get( - CPU_COOLER_TYPE) + CPU_COOLER_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components CPUCooler firstComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .get(firstComponentIndex); CPUCooler secondComponentObject = (CPUCooler) dataStorage.stringToComponentListMap.get(CPU_COOLER_TYPE) .get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java index fc775f8fd6..9cddbb9b68 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java @@ -3,10 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.gpu.GPU; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; - +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.GPU_TYPE; public class BuilderCompareGpuCommand extends Command { @@ -20,43 +17,43 @@ public BuilderCompareGpuCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(GPU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components GPU firstComponentObject = (GPU) dataStorage.stringToComponentListMap.get(GPU_TYPE).get(firstComponentIndex); GPU secondComponentObject = (GPU) dataStorage.stringToComponentListMap.get(GPU_TYPE).get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java index bc074b518f..7810beda84 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.motherboard.Motherboard; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; @@ -20,46 +18,46 @@ public BuilderCompareMotherboardCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get( - MOTHERBOARD_TYPE) + MOTHERBOARD_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components Motherboard firstComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .get(firstComponentIndex); Motherboard secondComponentObject = (Motherboard) dataStorage.stringToComponentListMap.get(MOTHERBOARD_TYPE) .get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java index 1ff357c1d3..a70537f7de 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.psu.PSU; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.PSU_TYPE; @@ -20,43 +18,43 @@ public BuilderComparePsuCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(PSU_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components PSU firstComponentObject = (PSU) dataStorage.stringToComponentListMap.get(PSU_TYPE).get(firstComponentIndex); PSU secondComponentObject = (PSU) dataStorage.stringToComponentListMap.get(PSU_TYPE).get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java index 30dac8c3fc..b402ba132d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.ram.RAM; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.RAM_TYPE; @@ -20,43 +18,43 @@ public BuilderCompareRamCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(RAM_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components RAM firstComponentObject = (RAM) dataStorage.stringToComponentListMap.get(RAM_TYPE).get(firstComponentIndex); RAM secondComponentObject = (RAM) dataStorage.stringToComponentListMap.get(RAM_TYPE).get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java index 7f1ff69e86..5c276d0327 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java @@ -3,9 +3,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.component.storage.Storage; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingIndexException; +import seedu.bigpp.exceptions.PPException; import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; @@ -20,45 +18,45 @@ public BuilderCompareStorageCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws BuilderMissingIndexException, BuilderInvalidTypeException, PPIndexOutOfBoundsException { + throws PPException { String inputString = getArguments(); // throw exception if command does not contain "&" if (!inputString.contains("&")) { - throw new BuilderMissingIndexException(); + throw new PPException("Please input an index after selecting a component"); } String[] componentIndexes = inputString.split("&", 2); String firstComponent = componentIndexes[0].trim(); String secondComponent = componentIndexes[1].trim(); - //check if firstComponent and secondComponent is a number + // check if firstComponent and secondComponent is a number int firstComponentIndex; int secondComponentIndex; try { firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new BuilderInvalidTypeException(); + throw new PPException("Please enter an integer"); } - //check if index is out of bounds + // check if index is out of bounds if (firstComponentIndex < 0 || firstComponentIndex >= dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } if (secondComponentIndex < 0 || secondComponentIndex >= dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } - //get the 2 components + // get the 2 components Storage firstComponentObject = (Storage) dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .get(firstComponentIndex); Storage secondComponentObject = (Storage) dataStorage.stringToComponentListMap.get(STORAGE_TYPE) .get(secondComponentIndex); - //format the comparison table in outputString + // format the comparison table in outputString String outputString = String.format("%96s", "_".repeat(96)); outputString += String.format("%n|%-12s|%-40s|%-40s|", "NAME", firstComponentObject.getName(), secondComponentObject.getName()); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index f1502a9669..53e6bff281 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -3,7 +3,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingNameException; import seedu.bigpp.pc.PC; public class ViewerAddCommand extends Command { @@ -21,7 +20,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String name = super.getArguments(); // throw exception if no name is provided if (name.equals("")) { - throw new ViewerMissingNameException(); + throw new PPException("Please enter a name"); } PC pc = new PC(name, false); dataStorage.pcList.add(pc); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 0a4cab7dab..2f0402f795 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -2,10 +2,7 @@ import seedu.bigpp.command.Command; import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; public class ViewerDeleteCommand extends Command { @@ -16,7 +13,8 @@ public ViewerDeleteCommand(String arguments) { /** * Delete a PC of a given index from the PC list - * @return if the index is a Prebuilt PC, inform the user that the PC of that index cannot be deleted. Or else, + * @return if the index is a Prebuilt PC, inform the user that the PC of that + * index cannot be deleted. Or else, * print the name of the PC deleted */ @Override @@ -24,19 +22,19 @@ public String executeCommand(DataStorage dataStorage) throws PPException { // throw exception if no index is selected String argument = super.getArguments(); if (argument.equals("")) { - throw new ViewerMissingIndexException(); + throw new PPException("Please input an index"); } if (argument.matches(".*\\D.*")) { - throw new ViewerInvalidTypeException(); + throw new PPException("Please enter an integer"); } int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } PC pc = (dataStorage.pcList).get(pcIndex); if (pc.getIsPreBuilt()) { - return "Unable to delete Prebuilt PC"; + throw new PPException("Unable to delete Prebuilt PC"); } dataStorage.pcList.remove(pcIndex); return "Custom PC: [ " + pc.getName() + " ] has been deleted"; diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index b3eeacf072..aad503a882 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -1,11 +1,9 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; import seedu.bigpp.pc.PC; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.ui.UI; public class ViewerEditCommand extends Command { @@ -19,24 +17,23 @@ public ViewerEditCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) - throws ViewerMissingIndexException, ViewerInvalidTypeException, - PPIndexOutOfBoundsException { + throws PPException { String argument = super.getArguments(); // throw exception if no index is selected if (argument.equals("")) { - throw new ViewerMissingIndexException(); + throw new PPException("Please input an index"); } if (argument.matches(".*\\D.*")) { - throw new ViewerInvalidTypeException(); + throw new PPException("Please enter an integer"); } int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } // if the PC is pre-built, create a copy of the PC to edit diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 69142fa417..1c3289257b 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -1,10 +1,8 @@ package seedu.bigpp.command.viewercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.exceptions.PPIndexOutOfBoundsException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.viewerexceptions.ViewerMissingIndexException; -import seedu.bigpp.exceptions.viewerexceptions.ViewerInvalidTypeException; import seedu.bigpp.pc.PC; public class ViewerViewCommand extends Command { @@ -18,25 +16,24 @@ public ViewerViewCommand(String arguments) { * @return the components of the PC of that index */ @Override - public String executeCommand(DataStorage dataStorage) throws ViewerMissingIndexException, - ViewerInvalidTypeException, PPIndexOutOfBoundsException { + public String executeCommand(DataStorage dataStorage) throws PPException { String argument = super.getArguments(); // throw exception if no index is selected if (argument.equals("")) { - throw new ViewerMissingIndexException(); + throw new PPException("Please input an index"); } // throw exception if index selected is not an integer if (argument.matches(".*\\D.*")) { - throw new ViewerInvalidTypeException(); + throw new PPException("Please enter an integer"); } int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { - throw new PPIndexOutOfBoundsException(); + throw new PPException("Please enter a valid index"); } PC pc = (dataStorage.pcList).get(pcIndex); diff --git a/src/main/java/seedu/bigpp/exceptions/PPException.java b/src/main/java/seedu/bigpp/exceptions/PPException.java index b7a599b6f3..938e2a2219 100644 --- a/src/main/java/seedu/bigpp/exceptions/PPException.java +++ b/src/main/java/seedu/bigpp/exceptions/PPException.java @@ -2,6 +2,10 @@ public class PPException extends Exception { + public PPException(String message) { + super(message); + } + @Override public String getMessage() { return super.getMessage(); diff --git a/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java b/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java deleted file mode 100644 index ee7eecd383..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/PPIndexOutOfBoundsException.java +++ /dev/null @@ -1,8 +0,0 @@ -package seedu.bigpp.exceptions; - -public class PPIndexOutOfBoundsException extends PPException{ - @Override - public String getMessage() { - return "Please enter a valid index"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java deleted file mode 100644 index 5363ce1619..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderIncorrectComponentException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderIncorrectComponentException extends PPException { - @Override - public String getMessage() { - return "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java deleted file mode 100644 index e21c2f27bc..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidCustomArgumentLengthException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidCustomArgumentLengthException extends PPException { - @Override - public String getMessage() { - return "Please enter a valid number of arguments for the custom component"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java deleted file mode 100644 index b9de337a10..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidFlagArgument.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidFlagArgument extends PPException{ - @Override - public String getMessage() { - return "Please enter valid arguments for the flags"; - } - -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java deleted file mode 100644 index f4b2c8ace3..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidNumberBudgetException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidNumberBudgetException extends PPException { - @Override - public String getMessage() { - return "Please enter a budget that is greater than 0"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java deleted file mode 100644 index c512ca714f..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceNumber.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidPriceNumber extends PPException { - @Override - public String getMessage() { - return "Price must be a positive integer"; - } - -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java deleted file mode 100644 index 1aa91509ff..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidPriceType.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidPriceType extends PPException { - @Override - public String getMessage() { - return "Price must be an integer"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java deleted file mode 100644 index b0f28aebbe..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeBudgetException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidTypeBudgetException extends PPException { - @Override - public String getMessage() { - return "Please enter a budget that is an integer"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java deleted file mode 100644 index 16ece4007e..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderInvalidTypeException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderInvalidTypeException extends PPException{ - @Override - public String getMessage() { - return "Please enter an integer"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java deleted file mode 100644 index 61b4f8ddba..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBrandException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingBrandException extends PPException { - @Override - public String getMessage() { - return "Please enter a brand"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java deleted file mode 100644 index 805fedb13a..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingBudgetException.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingBudgetException extends PPException { - - @Override - public String getMessage() { - return "Please enter a budget"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java deleted file mode 100644 index 8852f20630..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingComponentException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingComponentException extends PPException { - @Override - public String getMessage() { - return "Please enter a component"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java deleted file mode 100644 index a6c9c22694..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingIndexException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingIndexException extends PPException { - @Override - public String getMessage() { - return "Please input an index after selecting a component"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java deleted file mode 100644 index b76f7e49b0..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingListException.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingListException extends PPException { - - @Override - public String getMessage() { - return "Please enter a component type to list"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java deleted file mode 100644 index ef0e1cd71e..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingNameException.java +++ /dev/null @@ -1,11 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingNameException extends PPException { - - @Override - public String getMessage() { - return "Please enter a name"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java deleted file mode 100644 index a923a453b6..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderMissingSelectException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderMissingSelectException extends PPException { - @Override - public String getMessage() { - return "Please select a component"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java deleted file mode 100644 index cf62944b8b..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNoInfoException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderNoInfoException extends PPException { - @Override - public String getMessage() { - return "You have not have selected anything for this component"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java deleted file mode 100644 index 7e9892fb6e..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderNullComponentException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderNullComponentException extends PPException { - @Override - public String getMessage() { - return "Component is already unselected!"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java deleted file mode 100644 index f1389ee11d..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceFlagException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderPriceFlagException extends PPException { - @Override - public String getMessage() { - return "Please use /from and /to to specify the price range."; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java deleted file mode 100644 index 7ff562e26f..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceLogicException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderPriceLogicException extends PPException { - @Override - public String getMessage() { - return "Price to must be greater than price from"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java b/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java deleted file mode 100644 index a50f40c2eb..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/builderexceptions/BuilderPriceMissingArguments.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.builderexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class BuilderPriceMissingArguments extends PPException{ - @Override - public String getMessage() { - return "Please enter description for price from and price to"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java deleted file mode 100644 index baa440559b..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerInvalidTypeException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.viewerexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class ViewerInvalidTypeException extends PPException{ - @Override - public String getMessage() { - return "Please enter an integer"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java deleted file mode 100644 index 5e100089e8..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingIndexException.java +++ /dev/null @@ -1,10 +0,0 @@ -package seedu.bigpp.exceptions.viewerexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class ViewerMissingIndexException extends PPException { - @Override - public String getMessage() { - return "Please input an index"; - } -} diff --git a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java b/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java deleted file mode 100644 index 922b9c7313..0000000000 --- a/src/main/java/seedu/bigpp/exceptions/viewerexceptions/ViewerMissingNameException.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.bigpp.exceptions.viewerexceptions; - -import seedu.bigpp.exceptions.PPException; - -public class ViewerMissingNameException extends PPException { - - /** - * Return a message to inform the user that the name is missing from the input command - */ - @Override - public String getMessage() { - return "Please enter a name"; - } -} diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index f5de5f5a4d..51b1425b0c 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -2,20 +2,8 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.builderexceptions.BuilderIncorrectComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingListException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingNameException; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceFlagException; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingComponentException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidCustomArgumentLengthException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidTypeException; -import seedu.bigpp.exceptions.builderexceptions.BuilderMissingBrandException; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidFlagArgument; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceNumber; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceLogicException; -import seedu.bigpp.exceptions.builderexceptions.BuilderPriceMissingArguments; -import seedu.bigpp.exceptions.builderexceptions.BuilderInvalidPriceType; import static seedu.bigpp.component.ComponentType.CPU_TYPE; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -52,12 +40,7 @@ public class BuilderListComponentCommandTest { private DataStorage dataStorage = new DataStorage(); @Test - public void executeCommand_listComponentCommand_success() throws BuilderMissingListException, - BuilderIncorrectComponentException, - BuilderMissingComponentException, BuilderInvalidCustomArgumentLengthException, BuilderInvalidTypeException, - BuilderInvalidFlagArgument, BuilderInvalidPriceNumber, BuilderPriceLogicException, - BuilderPriceMissingArguments, BuilderInvalidPriceType, BuilderMissingNameException, - BuilderPriceFlagException, BuilderMissingBrandException { + public void executeCommand_listComponentCommand_success() throws PPException { dataStorage.initStringToComponentListMap(); dataStorage.loadAll(); From 274e2b1e4fbef0044ddb430d23b6b27cb96f3e2c Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:41:34 +0800 Subject: [PATCH 180/420] Clean up the menu print out --- src/main/java/seedu/bigpp/menu/PCBuilderMenu.java | 5 ----- src/main/java/seedu/bigpp/menu/PCViewerMenu.java | 6 ------ 2 files changed, 11 deletions(-) diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 505c7e161a..6677ef28ee 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -20,10 +20,5 @@ public void printMenu(DataStorage dataStorage) { out.println("PC builder"); out.println(dataStorage.pcList.get(pcIndex).viewComponents()); out.println("What would you like to do?"); - out.println("Edit name"); - out.println("Set budget"); - out.println("List components"); - out.println("Select components"); - out.println("back"); } } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 6b98198890..3a2fe653de 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -10,11 +10,5 @@ public void printMenu(DataStorage dataStorage) { out.println("PC viewer"); dataStorage.pcList.printPcList(); out.println("What would you like to do?"); - out.println("Add PC"); - out.println("View PC"); - out.println("Edit PC"); - out.println("Delete PC"); - out.println("back"); - out.println("exit"); } } From f1475aba82fb40fc34c181b7dd8f92b09d3cba10 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:42:16 +0800 Subject: [PATCH 181/420] Change EXPECTED.TXT to match the new output --- text-ui-test/EXPECTED.TXT | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 35cafbb162..8003fbfab4 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -31,12 +31,6 @@ Here is the list of PC Builds: 2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete 3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete What would you like to do? -Add PC -View PC -Edit PC -Delete PC -back -exit ===================================================  =================================================== @@ -47,12 +41,6 @@ Here is the list of PC Builds: 3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete What would you like to do? -Add PC -View PC -Edit PC -Delete PC -back -exit =================================================== Custom PC: [ newpc1 ] has been created  @@ -65,12 +53,6 @@ Here is the list of PC Builds: 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete 5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? -Add PC -View PC -Edit PC -Delete PC -back -exit =================================================== Custom PC: [ newpc2 ] has been created  @@ -83,11 +65,5 @@ Here is the list of PC Builds: 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete 5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? -Add PC -View PC -Edit PC -Delete PC -back -exit =================================================== Unable to delete Prebuilt PC From b1a7ad416dd1b07186ce095238fa264ca45a3e5a Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:11:55 +0800 Subject: [PATCH 182/420] Setup the base layout for developer guide with a general overview --- docs/DeveloperGuide.md | 43 ++++++++++++++---- docs/uml-pictures/ArchitectureDiagram.png | Bin 0 -> 16046 bytes .../ArchitectureDiagram.puml | 22 +++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 docs/uml-pictures/ArchitectureDiagram.png create mode 100644 docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 64e1f0ed2b..e98d9fdffd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,38 +1,63 @@ + # Developer Guide -## Acknowledgements +### Table of contents -{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} + +- [General Overview](#general-overview) +- [Design \& implementation](#design--implementation) + - [Placeholder 1](#placeholder-1) + - [Placeholder 2](#placeholder-2) +- [Appendix: Requirements](#appendix-requirements) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [Problem Addressed](#problem-addressed) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Glossary](#glossary) + - [Instructions for manual testing](#instructions-for-manual-testing) + +## General Overview +below is the overall architecture diagram for how BigPP works. +![Architecture Diagram](uml-pictures/ArchitectureDiagram.png) +The program will first load the `UserJson` and files in the `Resources` folder to populate its internal memory of `PCLists` and `ComponentLists`. This will be stored in its `DataStorage`. The `User`'s interaction with the `UI` will be `parsed` into a `command` which would update the `DataStorage` and eventually update the `Menu` which is displayed back to the `User`. This would continue until the `User` exits the program, which would result in the data stored in `DataStorage` being saved into the `UserJson`. ## Design & implementation {Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} +### Placeholder 1 -## Product scope -### Target user profile +### Placeholder 2 + +## Appendix: Requirements +### Product scope +#### Target user profile {Describe the target user profile} -### Value proposition +#### Value proposition {Describe the value proposition: what problem does it solve?} -## User Stories +#### Problem Addressed + +### User Stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| |v1.0|new user|see usage instructions|refer to them when I forget how to use the application| |v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| -## Non-Functional Requirements +### Non-Functional Requirements {Give non-functional requirements} -## Glossary +### Glossary * *glossary item* - Definition -## Instructions for manual testing +### Instructions for manual testing {Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} diff --git a/docs/uml-pictures/ArchitectureDiagram.png b/docs/uml-pictures/ArchitectureDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0e1e67fef81c37d163619deda8758e0deb523e GIT binary patch literal 16046 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 literal 0 HcmV?d00001 diff --git a/docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml b/docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml new file mode 100644 index 0000000000..89af83641b --- /dev/null +++ b/docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml @@ -0,0 +1,22 @@ +@startuml + +node "BigPP" { + [UI] + [Parser] + [Command] + [DataStorage] + [Menu] +} + +[User] -> [UI] +[UI] -> [Parser] +[Parser] --> [Command] +[Command] --> [Menu] +[Menu] -left-> [User] +[Command] --> [DataStorage] +[DataStorage] -left-> [Menu] +[Resources] -right-> [DataStorage] +[UserJson] <--> [DataStorage] + + +@enduml \ No newline at end of file From 6827c7c56ae1b7a8ec0655194571db77337ee6ed Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:36:27 +0800 Subject: [PATCH 183/420] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e98d9fdffd..5d2a4c77d4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,8 +1,7 @@ # Developer Guide -### Table of contents - +## Table of contents - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) @@ -18,9 +17,12 @@ - [Glossary](#glossary) - [Instructions for manual testing](#instructions-for-manual-testing) + ## General Overview below is the overall architecture diagram for how BigPP works. + ![Architecture Diagram](uml-pictures/ArchitectureDiagram.png) + The program will first load the `UserJson` and files in the `Resources` folder to populate its internal memory of `PCLists` and `ComponentLists`. This will be stored in its `DataStorage`. The `User`'s interaction with the `UI` will be `parsed` into a `command` which would update the `DataStorage` and eventually update the `Menu` which is displayed back to the `User`. This would continue until the `User` exits the program, which would result in the data stored in `DataStorage` being saved into the `UserJson`. ## Design & implementation From 2218b09f8acd993efdcbe31763b4ed9ef9125815 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 23 Mar 2023 01:23:44 +0800 Subject: [PATCH 184/420] Refactor builderlistcommand --- .../BuilderListComponentCommand.java | 188 +++++++++++------- 1 file changed, 118 insertions(+), 70 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 49e29ee291..05f14654c9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -44,76 +44,24 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } ComponentList componentList = dataStorage.stringToComponentListMap.get(componentType); - ArrayList flagDescriptionArray = new ArrayList(); - for (int i = 1; i < userInputStringArray.length; i++) { - String flagCommand = userInputStringArray[i].trim(); - - switch (flagCommand) { - case NAME_FLAG: - try { - if (userInputStringArray.length < i + 2) { - throw new PPException("Please enter a name"); - } - String flagArgument = userInputStringArray[i + 1].trim(); - if (isFlag(flagArgument)) { - throw new PPException("Please enter valid arguments for the flags"); - } - componentList = ComponentList.filterByName(componentList, flagArgument); - flagDescriptionArray.add("name: " + flagArgument); - i++; - } catch (ArrayIndexOutOfBoundsException e) { - throw new PPException("Please enter valid arguments for the flags"); - } - break; - case BRAND_FLAG: - try { - if (userInputStringArray.length < i + 2) { - throw new PPException("Please enter a brand"); - } - String flagArgument = userInputStringArray[i + 1].trim(); - if (isFlag(flagArgument)) { - throw new PPException("Please enter valid arguments for the flags"); - } - componentList = ComponentList.filterByBrand(componentList, flagArgument); - flagDescriptionArray.add("brand: " + flagArgument); - i++; - } catch (ArrayIndexOutOfBoundsException e) { - throw new PPException("Please enter valid arguments for the flags"); - } - break; - case PRICE_FLAG: - try { - if (hasFlag(Arrays.copyOfRange(userInputStringArray, i + 1, i + 4))) { - throw new PPException("Please enter valid arguments for the flags"); - } - if (userInputStringArray.length < i + 4) { - throw new PPException("Please enter description for price from and price to"); - } - if (!(userInputStringArray[i + 1].equals("/from") && userInputStringArray[i + 3].equals("/to"))) { - throw new PPException("Please use /from and /to to specify the price range."); - } - String priceFrom = userInputStringArray[i + 2]; - String priceTo = userInputStringArray[i + 4]; - if (priceFrom.matches(".*d.*") || priceTo.matches(".*d.*")) { - throw new PPException("Price must be an integer"); - } - if (Float.parseFloat(priceFrom) > Float.parseFloat(priceTo)) { - throw new PPException("Price to must be greater than price from"); - } - if (Float.parseFloat(priceFrom) <= 0 || Float.parseFloat(priceTo) <= 0) { - throw new PPException("Price must be a positive integer"); - } - componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); - flagDescriptionArray.add("price: from " + priceFrom + " to " + priceTo); - i += 4; - } catch (ArrayIndexOutOfBoundsException e) { - throw new PPException("Please enter valid arguments for the flags"); - } - break; - default: - break; + ArrayList flagsArray = new ArrayList(); + + if (userInputStringArray.length > 1) { + String[] flagAndDescriptionArray = Arrays.copyOfRange(userInputStringArray, 1, userInputStringArray.length); + + if (containsFlag(flagAndDescriptionArray, NAME_FLAG)) { + componentList = handleNameFlag(componentList, flagsArray, flagAndDescriptionArray); + } + if (containsFlag(flagAndDescriptionArray, BRAND_FLAG)) { + componentList = handleBrandFlag(componentList, flagsArray, flagAndDescriptionArray); + } + if (containsFlag(flagAndDescriptionArray, PRICE_FLAG)) { + componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray); + } else if (!hasFlag(flagAndDescriptionArray)) { + throw new PPException("Please enter a valid flag after the component type"); } } + String outputString = ""; if (componentList.size() == 0) { @@ -122,9 +70,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { outputString = "Here are all available components of type '" + componentType + "': \n"; } - if (flagDescriptionArray.size() > 0) { + if (flagsArray.size() > 0) { outputString += "meeting the following criteria: \n"; - for (String flagDescription : flagDescriptionArray) { + for (String flagDescription : flagsArray) { outputString += flagDescription + "\n"; } } @@ -132,6 +80,88 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(); } + private ComponentList handlePriceFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, String[] flagAndDescriptionArray) throws PPException { + int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, PRICE_FLAG); + if (priceFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a price description after the flag"); + } + String flagPriceDescription = userInputString.split(PRICE_FLAG)[1].trim(); + if (flagPriceDescription.split(" ").length < 4) { + throw new PPException( + "Please enter the full price description after the flag containing the start " + + "and end price range"); + } + String[] flagPriceDescriptionArray = Arrays.copyOfRange(flagPriceDescription.split(" "), 0, 4); + if (hasFlag(flagPriceDescriptionArray)) { + throw new PPException( + "Flag detected in price description. Please enter a different price description after the flag"); + } + String fromFlag = flagPriceDescriptionArray[0].trim(); + if (!fromFlag.equals("/from")) { + throw new PPException("Please use /from to specify the start price range."); + } + String priceFrom = flagPriceDescriptionArray[1].trim(); + if (priceFrom.matches(".*\\D.*")) { + throw new PPException("Start price must be an integer"); + } + String toFlag = flagPriceDescriptionArray[2].trim(); + if (!toFlag.equals("/to")) { + throw new PPException("Please use /to to specify the end price range."); + } + String priceTo = flagPriceDescriptionArray[3].trim(); + + if (priceTo.matches(".*\\D.*")) { + throw new PPException("End price must be an integer"); + } + + int priceFromInt = Integer.parseInt(priceFrom); + int priceToInt = Integer.parseInt(priceTo); + + if (priceFromInt > priceToInt) { + throw new PPException("Price from must be smaller than price to"); + } + if (priceFromInt < 0 || priceToInt < 0) { + throw new PPException("Price must be greater than 0"); + } + if (priceFromInt > 1000000 || priceToInt > 1000000) { + throw new PPException("Price must be smaller than 1000000"); + } + componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); + flagsArray.add("price: " + priceFrom + " to " + priceTo); + return componentList; + } + + private ComponentList handleBrandFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray) throws PPException { + int brandFlagIndex = indexOfFlag(flagAndDescriptionArray, BRAND_FLAG); + if (brandFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a brand after the flag"); + } + String brand = flagAndDescriptionArray[brandFlagIndex + 1].trim(); + if (isFlag(brand)) { + throw new PPException("Flag detected as a brand. Please enter another brand after the flag"); + } + componentList = ComponentList.filterByBrand(componentList, brand); + flagsArray.add("brand: " + brand); + return componentList; + } + + private ComponentList handleNameFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray) throws PPException { + int nameFlagIndex = indexOfFlag(flagAndDescriptionArray, NAME_FLAG); + if (nameFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a name after the flag"); + } + String name = flagAndDescriptionArray[nameFlagIndex + 1].trim(); + if (isFlag(name)) { + throw new PPException("Flag detected as a name. Please enter another name after the flag"); + } + flagsArray.add("name: " + name); + componentList = ComponentList.filterByName(componentList, name); + return componentList; + } + private static boolean isFlag(String flag) { return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG); } @@ -144,4 +174,22 @@ private static boolean hasFlag(String[] userInputStringArray) { } return false; } + + private static boolean containsFlag(String[] flagAndDescriptionArray, String flag) { + for (String flagAndDescription : flagAndDescriptionArray) { + if (flagAndDescription.equals(flag)) { + return true; + } + } + return false; + } + + private static int indexOfFlag(String[] flagAndDescriptionArray, String flag) { + for (int i = 0; i < flagAndDescriptionArray.length; i++) { + if (flagAndDescriptionArray[i].equals(flag)) { + return i; + } + } + return -1; + } } From 56534022982672aa231b8d1d71eec9d764b80d55 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 23 Mar 2023 02:41:13 +0800 Subject: [PATCH 185/420] Update developer docs --- docs/DeveloperGuide.md | 7 ++ docs/uml-pictures/UIClassDiagram.png | Bin 0 -> 23540 bytes .../ArchitectureDiagram.puml | 0 docs/uml-source/UIClassDiagram.puml | 37 +++++++++++ .../BuilderCustomCpuCommand.java | 2 +- .../BuilderEditBudgetCommand.java | 5 +- .../BuilderEditNameCommand.java | 2 +- .../buildercommand/BuilderInfoCommand.java | 2 +- .../buildercommand/BuilderSelectCommand.java | 2 +- .../BuilderUnselectCommand.java | 2 +- src/main/java/seedu/bigpp/ui/UI.java | 60 +++--------------- 11 files changed, 60 insertions(+), 59 deletions(-) create mode 100644 docs/uml-pictures/UIClassDiagram.png rename docs/uml-source/{ArchitectureDiagram => }/ArchitectureDiagram.puml (100%) create mode 100644 docs/uml-source/UIClassDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5d2a4c77d4..a4d24e241b 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,6 +3,7 @@ ## Table of contents +- [Table of contents](#table-of-contents) - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) - [Placeholder 1](#placeholder-1) @@ -26,6 +27,12 @@ below is the overall architecture diagram for how BigPP works. The program will first load the `UserJson` and files in the `Resources` folder to populate its internal memory of `PCLists` and `ComponentLists`. This will be stored in its `DataStorage`. The `User`'s interaction with the `UI` will be `parsed` into a `command` which would update the `DataStorage` and eventually update the `Menu` which is displayed back to the `User`. This would continue until the `User` exits the program, which would result in the data stored in `DataStorage` being saved into the `UserJson`. ## Design & implementation +Below is the Class diagram for the UI class + +![UI Class Diagram](uml-pictures/UIClassDiagram.png) + +The class will first initialize its `UIState` to `PCVIEWER`. It will also initialize the `PCViewerMenu` class. `showWelcome` will print out the logos and welcome message. `updateUI` will call `printMenu` on `PCViewerMenu` or `PCBuilderMenu` depending on the `UIState`. `setPCViewerMode` will update `UIState` to `PCVIEWER` and set `pcBuilderMenu` to null. `setPCBuilderMode` will update the `UIState` to `PCBuilder` and create a new instance of `PCBuilderMenu`. + {Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} diff --git a/docs/uml-pictures/UIClassDiagram.png b/docs/uml-pictures/UIClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..99eeee9532020010f4f7e7daad4bf2be46c289dd GIT binary patch literal 23540 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 literal 0 HcmV?d00001 diff --git a/docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml b/docs/uml-source/ArchitectureDiagram.puml similarity index 100% rename from docs/uml-source/ArchitectureDiagram/ArchitectureDiagram.puml rename to docs/uml-source/ArchitectureDiagram.puml diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml new file mode 100644 index 0000000000..a7d19dcab7 --- /dev/null +++ b/docs/uml-source/UIClassDiagram.puml @@ -0,0 +1,37 @@ +@startuml + +class UI { + -uiState: UIState + -LOGO: String + -DIVIDER: String + +pcViewerMenu: PCViewerMenu + +pcBuilderMenu: PCBuilderMenu + + +getUIState(): UIState + +getInput(): String + +showWelcome(): void + +updateUI(): void + +clearTerminal(): void + +showResult(): void + +setPCViewerMode(): void + +setPCBuilderMode(): void +} + +class PCBuilderMenu { + -pcIndex: int + +getPCIndex(): int + +printMenu(): void +} + +class PCViewerMenu { + +printMenu(): void +} + +enum UIState { + PCViewer + PCBuilder +} + +UI --> "1" PCBuilderMenu +UI --> "1" PCViewerMenu +UI --> UIState \ No newline at end of file diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 7fc917b438..51b094d05d 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -63,7 +63,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); - dataStorage.pcList.get(UI.builderMenu.getPCIndex()).setCpu(cpu); + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpu(cpu); return "CPU added: " + cpu.getName(); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 676c57e6a2..aa6b19a59e 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -34,13 +34,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a budget that is greater than 0"); } - int pcIndex = UI.builderMenu.getPCIndex(); + int pcIndex = UI.pcBuilderMenu.getPCIndex(); float currentCost = dataStorage.pcList.get(pcIndex).getCost(); if (budget < currentCost) { throw new PPException( - "You have set a budget that is lower than the" - + "current cost of the build, please set a higher budget."); + "You have set a budget that is lower than the" + "current cost of the build, please set a higher budget."); } dataStorage.pcList.get(pcIndex).setBudget(budget); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java index d6c07007f4..0e0ffddd84 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommand.java @@ -25,7 +25,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a name"); } - int pcIndex = UI.builderMenu.getPCIndex(); + int pcIndex = UI.pcBuilderMenu.getPCIndex(); dataStorage.pcList.get(pcIndex).setName(name); return "Current build name is now: " + name; } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java index 6c32181ea9..95487f62dd 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java @@ -33,7 +33,7 @@ public String executeCommand(DataStorage dataStorage) "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } - int pcIndex = UI.builderMenu.getPCIndex(); + int pcIndex = UI.pcBuilderMenu.getPCIndex(); if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { throw new PPException("You have not have selected anything for this component"); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 54de0de981..9514f74286 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -57,7 +57,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a valid index"); } - int pcIndex = UI.builderMenu.getPCIndex(); + int pcIndex = UI.pcBuilderMenu.getPCIndex(); float currentCost = dataStorage.pcList.get(pcIndex).getCost(); int pcBudget = dataStorage.pcList.get(pcIndex).getBudget(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java index c14a42bb2d..9581aa7b19 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -34,7 +34,7 @@ public String executeCommand(DataStorage dataStorage) "Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } - int pcIndex = UI.builderMenu.getPCIndex(); + int pcIndex = UI.pcBuilderMenu.getPCIndex(); if (dataStorage.pcList.get(pcIndex).getComponent(componentTypeString) == null) { throw new PPException("Component is already unselected!"); diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index c14afa2fe6..951f8a9c23 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -10,60 +10,18 @@ public abstract class UI { public static PrintStream out = System.out; - public static PCBuilderMenu builderMenu = null; + public static PCBuilderMenu pcBuilderMenu = null; public static DecimalFormat moneyDecimalFormat = new DecimalFormat("#.00"); - private static final String LOGO1 = " _____ _____ " - + " _____ _____ " - + " _____ \n" - + " /\\ \\ /\\ \\ /\\ \\ " - + " /\\ \\ /\\ \\ \n" - + " /::\\ \\ /::\\ \\ /::\\ \\ " - + " /::\\ \\ /::\\ \\ \n" - + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " - + " /::::\\ \\ /::::\\ \\ \n" - + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " - + "/::::::\\ \\ /::::::\\ \\ \n" - + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " - + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" - + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " - + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; - private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " - + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" - + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " - + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" - + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " - + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" - + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " - + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" - + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " - + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" - + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " - + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" - + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " - + "\\::::::/ / \\::::::/ / \n"; - private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " - + "\\:::\\____\\ \\::::/ / \\::::/ / \n" - + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " - + "\\::/____/ \\::/____/ \n" - + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " - + "~~ ~~ \n" - + " \\::::::/ / \\:::\\ \\ \\::::::/ / " - + " \n" - + " \\::::/ / \\:::\\____\\ \\::::/ / " - + " \n" - + " \\::/____/ \\::/ / \\::/____/ " - + " \n" - + " ~~ \\/____/ " - + " \n" - + " " - + " \n"; + private static final String LOGO1 = " _____ _____ " + " _____ _____ " + " _____ \n" + " /\\ \\ /\\ \\ /\\ \\ " + " /\\ \\ /\\ \\ \n" + " /::\\ \\ /::\\ \\ /::\\ \\ " + " /::\\ \\ /::\\ \\ \n" + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + " /::::\\ \\ /::::\\ \\ \n" + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + "/::::::\\ \\ /::::::\\ \\ \n" + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; + private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + "\\::::::/ / \\::::::/ / \n"; + private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + "\\:::\\____\\ \\::::/ / \\::::/ / \n" + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + "\\::/____/ \\::/____/ \n" + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + "~~ ~~ \n" + " \\::::::/ / \\:::\\ \\ \\::::::/ / " + " \n" + " \\::::/ / \\:::\\____\\ \\::::/ / " + " \n" + " \\::/____/ \\::/ / \\::/____/ " + " \n" + " ~~ \\/____/ " + " \n" + " " + " \n"; private static final String DIVIDER = "==================================================="; private static UIState uiState = UIState.PCVIEWER; - private static PCViewerMenu viewerMenu = new PCViewerMenu(); + private static PCViewerMenu pcViewerMenu = new PCViewerMenu(); private static Scanner in = new Scanner(System.in); public static UIState getUiState() { @@ -95,10 +53,10 @@ public static void updateUI(boolean isInitial, DataStorage dataStorage) { switch (uiState) { case PCVIEWER: - viewerMenu.printMenu(dataStorage); + pcViewerMenu.printMenu(dataStorage); break; case PCBUILDER: - builderMenu.printMenu(dataStorage); + pcBuilderMenu.printMenu(dataStorage); break; default: break; @@ -117,11 +75,11 @@ public static void showResult(String result) { public static void setPCViewerMode() { uiState = UIState.PCVIEWER; - builderMenu = null; + pcBuilderMenu = null; } public static void setPCBuilderMode(int pcIndex) { uiState = UIState.PCBUILDER; - builderMenu = new PCBuilderMenu(pcIndex); + pcBuilderMenu = new PCBuilderMenu(pcIndex); } } From 4d1239f7f5fdda4d1785c88a9cd03f247ac7ddc4 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Thu, 23 Mar 2023 02:44:46 +0800 Subject: [PATCH 186/420] fix checkstyle --- .../BuilderEditBudgetCommand.java | 3 +- src/main/java/seedu/bigpp/ui/UI.java | 48 +++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index aa6b19a59e..e8869cd812 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -39,7 +39,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (budget < currentCost) { throw new PPException( - "You have set a budget that is lower than the" + "current cost of the build, please set a higher budget."); + "You have set a budget that is lower than the" + + "current cost of the build, please set a higher budget."); } dataStorage.pcList.get(pcIndex).setBudget(budget); diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 951f8a9c23..14d9da666a 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -14,9 +14,51 @@ public abstract class UI { public static DecimalFormat moneyDecimalFormat = new DecimalFormat("#.00"); - private static final String LOGO1 = " _____ _____ " + " _____ _____ " + " _____ \n" + " /\\ \\ /\\ \\ /\\ \\ " + " /\\ \\ /\\ \\ \n" + " /::\\ \\ /::\\ \\ /::\\ \\ " + " /::\\ \\ /::\\ \\ \n" + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + " /::::\\ \\ /::::\\ \\ \n" + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + "/::::::\\ \\ /::::::\\ \\ \n" + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; - private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + "\\::::::/ / \\::::::/ / \n"; - private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + "\\:::\\____\\ \\::::/ / \\::::/ / \n" + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + "\\::/____/ \\::/____/ \n" + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + "~~ ~~ \n" + " \\::::::/ / \\:::\\ \\ \\::::::/ / " + " \n" + " \\::::/ / \\:::\\____\\ \\::::/ / " + " \n" + " \\::/____/ \\::/ / \\::/____/ " + " \n" + " ~~ \\/____/ " + " \n" + " " + " \n"; + private static final String LOGO1 = " _____ _____ " + + " _____ _____ " + + " _____ \n" + + " /\\ \\ /\\ \\ /\\ \\ " + + " /\\ \\ /\\ \\ \n" + + " /::\\ \\ /::\\ \\ /::\\ \\ " + + " /::\\ \\ /::\\ \\ \n" + + " /::::\\ \\ \\:::\\ \\ /::::\\ \\ " + + " /::::\\ \\ /::::\\ \\ \n" + + " /::::::\\ \\ \\:::\\ \\ /::::::\\ \\ " + + "/::::::\\ \\ /::::::\\ \\ \n" + + " /:::/\\:::\\ \\ \\:::\\ \\ /:::/\\:::\\ \\ " + + " /:::/\\:::\\ \\ /:::/\\:::\\ \\ \n" + + " /:::/__\\:::\\ \\ \\:::\\ \\ /:::/ \\:::\\ \\ " + + "/:::/__\\:::\\ \\ /:::/__\\:::\\ \\ \n"; + private static final String LOGO2 = " /::::\\ \\:::\\ \\ /::::\\ \\ /:::/ \\:::\\ " + + " \\ /::::\\ \\:::\\ \\ /::::\\ \\:::\\ \\ \n" + + " /::::::\\ \\:::\\ \\ ____ /::::::\\ \\ /:::/ / \\:::\\ \\ /::::::\\ " + + " \\:::\\ \\ /::::::\\ \\:::\\ \\ \n" + + " /:::/\\:::\\ \\:::\\ ___\\ /\\ \\ /:::/\\:::\\ \\ /:::/ / \\:::\\ ___\\ " + + "/:::/\\:::\\ \\:::\\____\\ /:::/\\:::\\ \\:::\\____\\ \n" + + "/:::/__\\:::\\ \\:::| |/::\\ \\/:::/ \\:::\\____\\/:::/____/ ___\\:::| | /:::/ " + + "\\:::\\ \\:::| |/:::/ \\:::\\ \\:::| |\n" + + "\\:::\\ \\:::\\ /:::|____|\\:::\\ /:::/ \\::/ /\\:::\\ \\ /\\ /:::|____| \\::/ " + + "\\:::\\ /:::|____|\\::/ \\:::\\ /:::|____|\n" + + " \\:::\\ \\:::\\/:::/ / \\:::\\/:::/ / \\/____/ \\:::\\ /::\\ \\::/ / " + + "\\/_____/\\:::\\/:::/ / \\/_____/\\:::\\/:::/ / \n" + + " \\:::\\ \\::::::/ / \\::::::/ / \\:::\\ \\:::\\ \\/____/ " + + "\\::::::/ / \\::::::/ / \n"; + private static final String LOGO3 = " \\:::\\ \\::::/ / \\::::/____/ \\:::\\ " + + "\\:::\\____\\ \\::::/ / \\::::/ / \n" + + " \\:::\\ /:::/ / \\:::\\ \\ \\:::\\ /:::/ / " + + "\\::/____/ \\::/____/ \n" + + " \\:::\\/:::/ / \\:::\\ \\ \\:::\\/:::/ / " + + "~~ ~~ \n" + + " \\::::::/ / \\:::\\ \\ \\::::::/ / " + + " \n" + + " \\::::/ / \\:::\\____\\ \\::::/ / " + + " \n" + + " \\::/____/ \\::/ / \\::/____/ " + + " \n" + + " ~~ \\/____/ " + + " \n" + + " " + + " \n"; private static final String DIVIDER = "==================================================="; private static UIState uiState = UIState.PCVIEWER; From 01710c6f1e4fbe78b87652b15310621370c335fe Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Thu, 23 Mar 2023 12:47:40 +0800 Subject: [PATCH 187/420] Add developer guide documentation for listComponentCommand --- docs/DeveloperGuide.md | 38 ++++++++++++++++++ docs/uml-pictures/listComponentCommand.png | Bin 0 -> 51856 bytes .../Commands/listComponentCommand.txt | 29 +++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 docs/uml-pictures/listComponentCommand.png create mode 100644 docs/uml-source/Commands/listComponentCommand.txt diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5d2a4c77d4..75ef450e11 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -29,6 +29,44 @@ The program will first load the `UserJson` and files in the `Resources` folder t {Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} +### `list [COMPONENT]` command (builder mode) +The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. + +When the user inputs a command of the form `list [COMPONENT]` in builder mode, +it is parsed by the `Parser.parseBuilderCommand` method which recognizes the first word as +`list` and creates a new `BuilderListComponentCommand` object while passing as argument the component +which was part of the command. + +The `BuilderListComponentCommand.executeCommand()` method is then executed as part of the loop +inside `BigPP.runLoopUntilExit()`. + +It first verifies: +- That the component argument is not empty. If it is then it throws a `BuilderMissingComponentException()` +- That the component given by the user exists in the database. If it doesn't then it throws a + `BuilderMissingComponentException()` + +It then uses the `stringToComponentListMap` HashMap from data storage to get the ComponentList associated +with the component string input by the user (e.g. `cpu`). The `stringToComponentListMap` HashMap is initialized and +filled when the program is first run using `DataStorage.initStringToComponentListMap()` and maps component names +(e.g. `cpu`) to their corresponding `ComponentList` object (e.g. an object of type `CPUList`). + +The `ComponentList` class inherits from `ArrayList` but additionally implements the `getListString()` method which +returns a formatted list of all the components in the `ComponentList` object. + +The `ComponentList` objects for each component are instantiated and populated in the `DataStorage.loadAll` method +by loading the data in `resources/COMPONENT_NAME.json` using the `GSON` library. + +The program then checks if the user provided any flags to filter the output of the component command (e.g. by name, +brand, price, etc.). If they did, then the program filters out the components not meeting the provided flags and +creates a `ComponentList` containing all the components which do meet the provided flags. + +The program then uses the `ComponentList.getListString()` method to get a formatted list of the components +of the desired type, which it then outputs to the user. + +A UML sequence diagram showing the interactions between the different objects involved in handling this command can be +found below: + +![Image could not be found](./uml-pictures/listComponentCommand.png) ### Placeholder 1 ### Placeholder 2 diff --git a/docs/uml-pictures/listComponentCommand.png b/docs/uml-pictures/listComponentCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..f01067239d87b1215fe706b9efbbd41f599cb13c GIT binary patch literal 51856 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 literal 0 HcmV?d00001 diff --git a/docs/uml-source/Commands/listComponentCommand.txt b/docs/uml-source/Commands/listComponentCommand.txt new file mode 100644 index 0000000000..f613ea4cea --- /dev/null +++ b/docs/uml-source/Commands/listComponentCommand.txt @@ -0,0 +1,29 @@ +@startuml +"User" -> ":BigPP" : list [COMPONENT] +":BigPP" -> ":Parser" : parseCommand(String userInput) +activate ":Parser" +":Parser" -> ":Parser" : parseBuilderCommand(String userInput) +activate ":Parser" +create BuilderListComponentCommand +":Parser" -> BuilderListComponentCommand : BuilderListComponentCommand(String arguments) +activate BuilderListComponentCommand +BuilderListComponentCommand --> ":Parser" +deactivate BuilderListComponentCommand +":Parser" --> ":Parser": BuilderListComponentCommand +deactivate ":Parser" +":Parser" --> ":BigPP" : BuilderListComponentCommand +deactivate ":Parser" +":BigPP" -> BuilderListComponentCommand : executeCommand() +activate BuilderListComponentCommand +BuilderListComponentCommand -> "DataStorage.stringToComponentListMap" : get(String componentType) +activate "DataStorage.stringToComponentListMap" +"DataStorage.stringToComponentListMap" --> BuilderListComponentCommand : [COMPONENT_TYPE]List +deactivate "DataStorage.stringToComponentListMap" +BuilderListComponentCommand -> "[COMPONENT_TYPE]List" : getListString() +activate "[COMPONENT_TYPE]List" +"[COMPONENT_TYPE]List" --> BuilderListComponentCommand : formatted/filtered list of desired components +deactivate "[COMPONENT_TYPE]List" +BuilderListComponentCommand --> ":BigPP" : formatted list +deactivate BuilderListComponentCommand +":BigPP" --> User : formatted list +@enduml \ No newline at end of file From 98cd316c84692efb1a808b35f8716de98134fb3e Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 23 Mar 2023 16:43:36 +0800 Subject: [PATCH 188/420] Format the developer guide --- docs/DeveloperGuide.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b66afd4796..d53e513ae3 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,8 +6,9 @@ - [Table of contents](#table-of-contents) - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) - - [Placeholder 1](#placeholder-1) - - [Placeholder 2](#placeholder-2) + - [UI class](#ui-class) + - [Command class](#command-class) + - [`list [COMPONENT]` Command (builder mode)](#list-component-command-builder-mode) - [Appendix: Requirements](#appendix-requirements) - [Product scope](#product-scope) - [Target user profile](#target-user-profile) @@ -27,16 +28,16 @@ below is the overall architecture diagram for how BigPP works. The program will first load the `UserJson` and files in the `Resources` folder to populate its internal memory of `PCLists` and `ComponentLists`. This will be stored in its `DataStorage`. The `User`'s interaction with the `UI` will be `parsed` into a `command` which would update the `DataStorage` and eventually update the `Menu` which is displayed back to the `User`. This would continue until the `User` exits the program, which would result in the data stored in `DataStorage` being saved into the `UserJson`. ## Design & implementation + +### UI class Below is the Class diagram for the UI class ![UI Class Diagram](uml-pictures/UIClassDiagram.png) The class will first initialize its `UIState` to `PCVIEWER`. It will also initialize the `PCViewerMenu` class. `showWelcome` will print out the logos and welcome message. `updateUI` will call `printMenu` on `PCViewerMenu` or `PCBuilderMenu` depending on the `UIState`. `setPCViewerMode` will update `UIState` to `PCVIEWER` and set `pcBuilderMenu` to null. `setPCBuilderMode` will update the `UIState` to `PCBuilder` and create a new instance of `PCBuilderMenu`. - -{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} - -### `list [COMPONENT]` command (builder mode) +### Command class +#### `list [COMPONENT]` Command (builder mode) The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. When the user inputs a command of the form `list [COMPONENT]` in builder mode, @@ -73,10 +74,8 @@ of the desired type, which it then outputs to the user. A UML sequence diagram showing the interactions between the different objects involved in handling this command can be found below: -![Image could not be found](./uml-pictures/listComponentCommand.png) -### Placeholder 1 +![List Component Command](./uml-pictures/listComponentCommand.png) -### Placeholder 2 ## Appendix: Requirements ### Product scope From b4d0670de8e78ef75881611dbe7488cdda23b187 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 23 Mar 2023 16:54:19 +0800 Subject: [PATCH 189/420] Update developer guide in PC class architecture --- docs/DeveloperGuide.md | 20 ++- docs/uml-pictures/PcDiagram.png | Bin 0 -> 278595 bytes docs/uml-source/ArchitectureDiagram.puml | 22 +++ docs/uml-source/PcDiagram.puml | 202 +++++++++++++++++++++++ 4 files changed, 242 insertions(+), 2 deletions(-) create mode 100644 docs/uml-pictures/PcDiagram.png create mode 100644 docs/uml-source/ArchitectureDiagram.puml create mode 100644 docs/uml-source/PcDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5d2a4c77d4..ac176b4433 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,9 +3,10 @@ ## Table of contents +- [Table of contents](#table-of-contents) - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) - - [Placeholder 1](#placeholder-1) + - [PC Class Architecture](#pc-class-architecture) - [Placeholder 2](#placeholder-2) - [Appendix: Requirements](#appendix-requirements) - [Product scope](#product-scope) @@ -29,7 +30,22 @@ The program will first load the `UserJson` and files in the `Resources` folder t {Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} -### Placeholder 1 + + +### PC Class Architecture + +![PC Class Diagram](uml-pictures/PcDiagram.png) + +This UML class diagram shows the classes and their relationships in a computer system, which is represented by the PC class. The PC class has several attributes, including name, isPrebuilt, cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis, and budget. + +The CPU, CPUCooler, GPU, Motherboard, RAM, Chassis, PSU and Storage classes are components that can be used to build a PC object. Each component class has its own attributes and methods specific to that component. + +The Component class is an abstract class that represents a generic computer component. It has attributes such as name, brand, and price, as well as methods to get and set those attributes. + +The PC class has methods to set and get the components of a PC object, as well as methods to set and get the name, isPrebuilt, and budget attributes. + +Overall, this class diagram provides a high-level overview of the components that make up a computer system and their relationships to each other. + ### Placeholder 2 diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..81cb787e588626b4b2fc8bf906f0f665c26a6a13 GIT binary patch literal 278595 zcmc$GcRbbo|2GjTp{qn>w9r6E$~sz9L`EUwkc{l?eP}7Ol4KW2w(Nb3Xc&j=y|VW@ z<~iqn9qPJJ-`{nAACKStxczaRI+xD*jQ9KXdal>!>2+DDo!gnVlaP??ymI-X0tw0X zLK2d##Z+719rkW+J9s&2bxFla$IRT`SXa-AL`v6G*FxJ$_YV7Qdv*gWD|2C9UUOq@ zQ!8r|V;&tdlU*mz?k6E3uehtEV)g5N5>ogWyO4AhRkPMJbS@0f2okeb&W|3vH&5c# ze#uCXKFFJ;$Y%Sf;(>CnLrQ;beSY=%7#7V-E6?OHn=bW&@~+;Q&+|K_?sO=;s*685 zy+dy0z5V&49v5cEiZ86_dwqLXsF-%!`sR4riO752Lf2lU9u3;{qW4{0Y?|SFE-$u1 zN3IiwM{oGv%G{kHZ>C0veK@l7%JA5p%4LRxB){7puO|AJLirUqMFK;es;50H&{MIP z?xzg?@?mZc)zjBf+qE^%-{e1%^TU5Rx$Ajc9SNiI-OI5ItlXpT_N1QnK~V3PsS)^^ zQJrGwv@=jKj&4TdWD9oJ{QGn1=_K+fwmNLAuEGM7om%U`3EG%sZk?8eAV#UEcONc4 zmF|yTda4}DX0m+AZ@@=zBp|leG}$1!kVeARP}}pKR{DoiPwHa7sBHa6y}$C9H@Ow* zpvuv@CtDw6_+KSeAaPLEZL(23X`mIAc232Wf`-I{PTchNsT}V~8B-dz(Ot~fhd53~ zKTvYoldH#J<9*$%>&dgF279g1eA&ddbDukxo9p~*y}3R=Y^l4F&GIEySUS61NA@ok z3*@$gySs~`o;+fH>+0ik;cB|{A;EGAf{?gMQZ zcf--8ZtcfYSid~g{r*btg_VL-I__QnwMNBL%e##QD{Vx=D`=x@1`fS5*4FW*o83zy zp4C+P_$9MZ71u>tY~stDV_mXbS0tz2nkpBYtz>;lnH6bi>=8RA+_RW9SSLxPCwQKs zUQDw*Hu?0|^Cv{DX|MNPa8J*WJz%^hHA!f_6l8o#1 zy}3VPYC*`lcRYNKKG*-Egpv9?wZJ??CZ^p#+c`i;cT5%OvwXaV7v&vn7~i9&Fx2>h zXQzwLs!s$*Wd42MfW#JbW`! zh%w*D#$cL4Lql${Gx&I#N5kb0WEkHb5&RL;;XRQil4k{jA5YD>*#?Vp8Z^H=vAfa| z**%TLP26%d{WcKKp<6UFZHlOLd=T!!h~a;HGpj%Fjhy9#n2StM$Q1q2W{aL^uJ}Yw zglt~!yEegT0H!ME)Fn{#OLz8w~W6GamHQq@=;!1Mm;yEQd&Czz8xvd*4!kFk*yI_+PiSnAPrw60R%`}4)}RysuMfjB@kx{T$t%vZzivXv~++ zsfJJJJ2&RcJU}~ja>SsvLOmt^@Yu(UQmp-v#C&KM`_Dg;kW>Bo6DhHf6MwppTYtUj zilS#4^rUnDJDY)&^)#-gsm|8YG`#||$&qWFbgPPs5q zGV=~iyY5FOtr@z6MsoN+SzX)c;N_mn{3t_&+Lu^&-oiH; z5$@pxl5mX-gyr%g^f?wQJ^YY$YQH+64Ivip%pBsm=>u-p*Vd-~$dxwKlW`mz$|3%< zZ1JMux_yH4PLAD_?QD0dDJ`xKaD{x1*68<7#Jsa%XF*+plmR< zcwxswU(UJ0hl@tKyg_5pl5Szx%9%dl4vgQm*?M-j#+n@;0k zZDXU*{QGQLF^xvVLGvm(^TttT!r`U^j*5d)#1CBexzC%kEeFD#hUAvq$?)9-=c%eo zw!XNPtm24bUfIMf)R+e%zwhx;f!LHXy$XJ5JKT0ucUwG890S^l2xn~yBD$BiC^E6m5$lA+WsuUSooA2pf|>qF(+ zH52^vhdyt$y<}}63If4cv z4oDDB=AWhWrOj!k(kL?lONi_V(KASEL&%D3#V z{Ms?w%TGq`R#jE?;>C+(%>t*z3$$V{vzMmJc`-qP$5Ts6H{XQkfwu(a0tx!kH&1A- zFc373`QQ48FZwW3Y^Ir$WBC2YkiV*5QNChq^c}OMd#a@OGcq!2BBk7|b#?pH%<}!S znFdEj%7@K&t!^mS!+){E(Ze24zr!K(deV0pfAsj?$?S6RfU8mX?ofu5B^;tCpI};y zE?+y;XxY$P`3`f%k9L%lTM4sRMcm-Iy@j{~pIs!rNbD!Q??5f*txL>iLBa5my0~o*WE7)i#q1`v^r90IOlJBk z16g=zHXm698LeotaXsoA+#Ea#f8&^cPQ>W9Bfc*4oahxa;a(>q!SP;+^^Bf|n65&@ z53zE>625OHU_L7S1rcgQ<#0B*J$5>|fi~c0I{IoBv>{v;!TNZBfbCX)vGIh9AZm@k({z21|}vZ1_q30Eq?g0 zh@=c$7T>&4-zOzabP|?P1Y1Ji)A&1u8At+brlDYE7W?Ka`F*;te1K5D!q8bMyY0u)%B&CpR^v!QdU|>@ z^SR$Hyn>t@rrowvjF4nX_?%CuL-0JCYlcGAS}@Hvk+YoGmH3AORT>)|t-mPggmELB? z%gt^CEE0(_?Zq&?5}R%3ZC{Ae5`6u&U}x1OS6IC3ic!tT$Ve;HBUmYu11S7J?fYxY z0(vr&X4ff0->}8&b&?Eh+L9#Hn=T~@Bl*TVNP3cL{oer=@OzN2@lzLxBmOD*g{^&4z2E=&n2gFJ-4X{Y-)trPsqs4 z3KsQjb}YQy@K0Z`vcsCq9|&_S^V+9){rYuz`Khi4wAk6%htiK8Jz@*TT|Vaj&6G6! z;rgTI93s7+W3i6Y>_!ooTU_<2tTUdcaMR)WXlmd$d)o{)%n9C5!44Y<694l#)LC&$_HEu;B)!vcqTsPOQJXvNEn+A)x~Lv|R%g zfvIMl1@Kc=R<^RTl8jVTOtl$n!D6uu4GlNqZh8ZT2qFwCqg%dzPl2P1h=@pX9y2PE z==TmjZE`EqR6|Ni%F=R1QBI7$P8$*M?c2AUoE$B`(MP`eH20UPL?);^2EIH$6eykD zfv}sszjcSpd~WAhCmNlTbIX+^Wy3vs%*x)BsxQ~CTh>FUtFIS?Vw_AvL9_o1-RTEQ zgEf)zh!c8MA@CEP{N_(!^7K0;ObQ*xC*ST4H@E#M95o8DvG?eWbF%=E?shV#u+8$+YDB}tsq;* zmjupDc9#gqEg@o%D?JRb4z$I(@TvjXO94n1`#tPutcPEcklxu)I9A-Yki%X7?8CBS zM9dLOZKs9M60;tzD{-fl!dV_We%w=biHwDXh4=|7v{|SI-9&u6YHBeeozB3}@Go}P z6B`!pYm##WIqdauvIP$hk88oFt!-?^ThillavTcDmPtpfM;gRdCQG2|S5{WW-Ao7) zu{Av<@J6@%ReeK40S?;=-z4SBnh+Pa+>lv7&*T5<)p&cZP}6|S_`7tw;h~pL>ll2!500gN?X92FoDCt^st*)-F=U(pN;o)y#uF}El zs|kR}|GLaFIJ;tJiNprNrb92=n*bwV}eT~5wY@1cPaCss-Z(hUVAk)$Z>+Yk=X zd|}@}pSQR7;^HFQ83Fw&V?)Dlw|2r}diC<0HxKkl#EsLu>=#NW!GYLA(4jz$y zWo2tCr9*_oW0{?rw{AJiR0>UWF$>n+q_2U}>trT-?GOC)Z2zSE}Fq_@obI2Tt|e~?ia3com5HaF6Uf-;OLFW=$v zLM_wO8|${?+4|eU$su80RTbzpGYu6G>L3((ZnX?0C8awFj{!hQ`m(Zcx7!bdj*X2; z`Rw1uBV^K&X4;sXeje(W();YOx#265`0AKt&$8*51~Vt~`rNH?s9 zGmK#VS)aRDicd*4x$p2>f7k=H+v&WR1P$SQ*^nzu-MARV=$lEJ`R3il21l2yx3~og z=!c2g^XG){>t0nM*J;f(qaD%GYDv2bbu@)X$AdA(7Y?@R{k7oYD5%?TGRb)2@`kOj z;4+(~-pQq?tgJj4pG;%g24y+TN<3+2_<{BJy(*fXy(z;)ZFtmdhf0Byy_}p}8q>G( z^5eX`$YiZ^YHDg}b+?7+vVro4Jg%N7>M`Gi~tDwH;^h?4CktVEo_``lcS z8AfsCU5AX`=jZ3YdBYwrEiE1SrVu`UW_r43x#nheLCxcx%*T!$8y*=!I*z4ZaHr{W z!2IExOG(ZdG$v|f)07J6a$gG-CKmI+(Ca6$!!o z@TH`rI8NjXE#+=2@^l^$>D;-IM2OEV9SNjTef$U_jp@G35 zp_ojw_>rV5v7G*t3Islpkec6JWtP9d!5>5x5{mzQ9Q_-}<(VWo2hAqpl4qGOTexhr zk)dIRar0l?QJV_=Esrt_YuC3M@UZ%qRrU=3!i5 zpesNVD2bSG1e&0bNON+}hUK*mzlIDA59dH7^YHYHmI<6*8cA}mR62G8C`tVdWexj2 z{~ZiG)OrzkDO)}De&KfHPa&Y$9?Gg^*$PUl=*4EX+EY|hi zl|_qdL)V6uE)yoY2-`yyj(4udllSo)$O*@fACJUKUBK}yOGnp&B=BwAg=+?@Wjr@r z4<|B;ei=tb{b+rC)qg^IA1W4fgLu7T{)Tt&ZX2nMmZN187ac~Os+&kb_w@91VMoW^ z71%bGyxFN{QsKhu8=);DJJ->p&`T=~-z&rnoVK>ScQB#haw95Y_yqp&?|(zTdE~d@ zPZNLoIBGtL>iT-?Mh#oIta5?;eRGXS+Ta+a*n$FlY+Pc_^ta;-JnD=U7h%6vWU2p> z1!sTCg7J=yjz&gCpS||^$wr&yO_f16Eu9w#Pq|&{0o2!=@(HxpP)9J}>g5lW4HvdPW_eW6+!1c9 z3IUsm4n3)T-U-oS(_ax7IPogbtSR5owhnUyZW&toWCp;;M>`m>t9LALgt>1Rb*ppF z#tsE-?VP;4Jm9jMu!Ymp(jLwMzHz5zW1T}Veakw*!$VWXAHYw)cdsPc55aYxvkcBz zipY4MovkJ!H@=?EV=bq7d6V+;oQm#mh23BC{j)yrtl9Pl8w?1jNN?V~dzYChL_E2O z+S$a!M9^C2A_D=R3|b7=#Zc0+dcCR&!FiGd3z^Z30AU$iSOEnU@D2dr)^6afc1~f7 zOvG>0^Ml$7+kcS%!-H@ImCqCZ`SgmQ&PT>e9QMDOzcd`D?YuDA{ZZ$$B+fvuv%tAV z7jE}%IniC*TLHrjRE07(fHqdXvK0?SUkiO4iX86v)o@9%)nxnnU*FKbZV$ZicRcZ&qdf27cP{*aGB2j$thaXhP zp)*F%mueI(<|0j?XwFZT&{9rRx3%RN*2m7AUB>Jo+~f-;$Akip5Shr^y`loOG+`tO zjUS2*rwRDAOAZae+v8dg8O(@uMYq&xH-+K`e@kkH40{C6Sf62p#bpJ@0HSL zcDgLPkx>GA&L}GU9wiNYNmW6?Vk9Ax72zUkq*Yih!)HcssoeGPGi%(34_qfsNfsEXojOP zAsqxiF{=iUcu!jV_yX;LFeruakR5ywv7!Dp)z{O{A#wzI`5S9sx)qH=SzBA{u@j+&vu1-z5OI^GtPXYimu-t_D>yC=8LH|Crw`q&c}!5rv)#qTS*z5l(=N zoVQ@%whEh=Lt07-|FC92AQ~IZn8_#%MXVuH&23>tFlx zY;AS5d8hL{I1?;q%(bAX1d`tGng;k)^gTtlydOM1EUZ6fX6EIkB~Uhn%sTR3_Y$t3 z43Ui%5FiJ~_P&eVzSNQ&>k&{W=b&R*+1L$bzLa`_P8H2_@BwMI__x+qbYrqoVpi4_byE$b#KU z)z!0E`_h6-+^FejA{@$d{J0vdNl+@97}#AsHwbP3;kR^s-{jBz*Ceh=pPt|KlY30L)IR*SvoU>+7lP3X|gJ6jmhI(-G#*I*nH(A4jlb>2KwdhL4tila? zhs9PZtdi^m;VY}KCIN;R zjmHFvuzXxO(Q8TH0xj2H730|>RTL$$xdJ$8fb_?r5iafw`A1$O_PDCN{ZKjk`E1@1 zoPhDF5I-E?KJk=6p8NnmNl7R;W8if!?G0J?zO7K40d-*QydQ%FQe+9-zNGVr`8GUP z)}9Sb4PQ-qAC`eGetM<2xH#S|UU-IxMF9X;sc)YPC-m{6_BDWovfRUfW^Bl2)zH*r z#hu54pYlUkFq}`P3?#?mB_zHNSp{FcQ{A?mc&dppF<*xV9Kt;(HlN_`-Ry&~BfmK> zu++-|mJ1Rz60U;qfi;lmCSGoC*f?f(vF(ICq9>p;6JcFudiqwKpN2| zm%RLZqExw3CRDHsYbll!5pf%UD?rU$o3Yr$#42k;)(WB&HqR<*Hwhw*$Uuz!smZ}e zUkYn;vzv&TwFoCYCqsEz1&dBzmNpob@=9 zVHrXDj_24!>~>oE3!$?i9^&;}0JIIG>g=(MR{r23Z%~b(v(87#0@R0f z(Eqsb&4$xoU&&?vDY{)21UxRY-KI6`Uhnqp+Y__{zv%%|Jn zpm0Lu8wn#U;4}II70s4Qz$;Q=6#_9S(gkAFl5X^%9NNfFPnc=>51uga9DtmkGe)8b z_5|RW<=?(Vl+z!-3D(hJu2kWLLb<4QNbw%|2DK; zEG{n22=oqZ7B9d-?8X$_fuO0uap6$Akg(MlS}Vw~0WQ49>9=jUoi5qF2~I zJdo}8h8^PwGVp^QI0wb|GEbKZ={8(=;ElrijLgWe0q{)}0NIpvVvhu_fo?DJ?YOw2K&zT%_$oGU-2u&^*N z%}g+7C#S)R0D}k)(t|=+L;LMdMm4>I+L~5qVCF)9~Tq5E4440bZAm6VRX zJap@eSqS2y>zm}{leu%MM*k^-!qC-P{AdHqAb#XKg_zL>{juZ7#c#Bzg%Utb=;-Ky zc{BkBc6R`e1{05ltJw~Q4dE-I>GIQy)vr2r`ZPF04D|GsA!k!#VumW3XBIA-H@CKe zH7BB1@fyq)P=r~9t+?{|RCe~4mzRU%xLbX^6HUlyH3b<>{oJ`C!AA9&l^Kkb@1|Ty zpgRsgBcq^U9rS{L6RO|a+gVOqMv>l+2BS$TfEYbgRc#K$ESVh0-hlKWm}Y6S1xgk; z#jtTfDv9~;JAfLLaQVsV7AX!N_}1dBt7+R` zjEKnch;C?&y?y_^<+QuC`~)ruZEbBrpaiJ8pv|p%n>EAh7_>ZU4U^G~%s}LCFUuIQ zf)R;&asf%_ULL0nn`zAetqv3bP1gn6te=~k3oIunJe=(`uoEzVnZrII)~jf6jk{$U zo;zK-R0<0NilFUS%MA?;mW0!%PPKuI4$=jHbgyYqCP{sDoK8TJ7_zz(pwlTqH z|AbtMjP`?Uk(fBH*12>u%ZjvsTYX`}%FYH6-jPQ%UlP^W45PS)YgRM>g-(v9*uhUx)r@@{!rfB_{ zgDHAonm^Y7?amz+Z*mAW5P{s zcrlkTd1b>s;F%;T0t<|9B*PHyGM{kw~D5(_Kn1BM^y*mVav>kRgPkKg1hb2Y~O2JVsE}#l_ zKpq?&93pbXTMkN5GOh;4Nq*+XtG2STKNL{*jf&IHt^qg!9MG5s(xu)zg=gxi!&xmd#1-V7#W zyxTu%X01q{H2qw$6uD>B1aIOAoh?Way1tzCr)|$bs0v7bGwM59N z{d>tYu>nihAqEK*03v{Z+9K*V5 z*G&u$UyZJ<`3}_>31bwXKX-!fUt^xu(%$Y|Wr?$-x#%+GiM)tjd6Siu6&ZQx*7jk@ zrw{(MptJ$m0O+%ut5+^r0$>DS0=KXfsF7=P>8xvoL?I~jRe`im_Hi9QP6SLmB0sAT z@V!;zH0q~u+OdD5n_UGwUqG+o41f|fwbow(9o)hd2*%pj+7d-TP}7YmE^TlE{Aj64 zsmU?12?@>sQ{l^eSjBEBE6*pGIUiStXk|N;$PQ2}AZfqOD@C{nomBc$MQj$p0|Tqk z=f0K3wPZ;lVmlt6m{_5hvSkGlaer5v)pk9=I&@mH&Hy0_ARWBOt1i3Sg1P=C@b*23@AR}FsvzB+6YFfG6x3-FsKyd z<#*M3`TU?%uLOuRosik_%@8{`_o(y{Hsjfb{C5b*_>jzS0=Pp=L$s`FR_kKAtZN7g zQ6O$E&|+9vuMX)vB6!bb%lYjJZZsuzPYd||0PpLcjF%)1hNQMy-?&i^f&EBkO5?K5 z7t(Nvfl;RZr_Z}`%4ZS`BUll6ypbEmwufoHjkulbKp^x;V#u0xS!ML>)58L6|`YrVT zXh;8F@V0F`e^M^Fam8lxjrtLBxhljc*^Kxx&W-`BZccEi%3fSF-a@?rtNK-w6umL4 zn2j;svXM4!XvSUO#I(1Xq4U$yX8VK9I#x}1rX8NZ%!wO~=zBqm$rq&VijS16c3MEN z0h|$Pd|h5PBR}3Q1+nJ7+N%?)f3>;vkD5N8rDF{uJs@3kZ>l z?^@4Ze+Bh@yMI%wJ(g5;w5NVb(?(`yAbk+sx;oTwO!VFpDwDaLIG#B4ngnibWpzqO zh*IEOXu7tS0S6Zd4#boY{H&$^<4L>xHiAVliDck6$>Kn}0l`CB;=;ZFqH;lm?@Pc3 ze3l^F>onhPTO!eE#Vs`?1&;X7$c9YA&qeN z?%iLZhrhLCeQa({PH|3py5O)cBi}*)x8M(thGUvhr*`ilLW^WJK{vUJ8`d6BjdhB# zJR)dleB6fzEJldx$`hb``feeIsF%kQgbOA{N2y0-1}w4R$GM)x(S{(_Uua?nN3Znp zmMj4RCPwgo2B`)uz@}ER0CDgqbX^yrnxR5L@_?wSbNeFjc6tO*`H4eJzgM zq`d+DqHKps_!=Fn#2Q14CRR=%M{&={sc!4&0B~+MwT0zmYC4|eGItzDMMArK6=#u< zsI2Wu59XhIXFenF_oSsgU8=u$*%aBHGV2hXDymiHb6C4QB*_QY4zHrk*;OJP zDi63A4BWR4^M=amTUbnkTAiqwKWvdr4CDZz0JTKUI~y!~@LMMXs^8Zf1%qVi!3CPcd+D}E>U?OSaq-LcXY zimIwavI>4)V`nD{G>?>y@874}EHR~}rQU1^{8!F!7}lY!UjV`O%a<V<;J3URoC6JuEC@Mhz$I zkA7xOK-xiQ;n2Z@9I_z`*j6*}qD+zrO;|&C{p5Xq}*CfDY4dJ*K2- zduMtZpMz9NYAWO#>W`E?-n?5P0kkKaTdo=Y-08yi1&`Q$JivLjj}P}mJ16pXbnRK~ zV)AC$t5=0#XevWF%X;LMF+{ae^77Q{OGSwV+;%*KksVW|D<&ui{%``|EGS-(GKEEE zxFUyIs)ghkT)4u*LYSRWrLHbW22LLlQQT*7c0WwJ+C0gKXWkXZ&BL?TZ&1XvGtvOP z(BpYq4Cy@QpHXgr>uG>g*zyRH03&n2KyO?1Bz_>hO~HpLER=vRI)DCtqVjifllEe- z4Bp2_I5~+XFnf_Hcb>+UKOX=7PW!y~F1ZVNQbZCC8jPAMES;m=+}1l&TgRjW zcm$K;V!UkNI!!J4P(gsOr#G61@AT%C&A64y#c?+DOUk39am;Z;uDygZ{CKn@hOLn{ z2X|%>ECQQc=TZ;)>F;`}Pdy-RhI4Uy4f?M@i*)@>C~Lr0I9qQQf*No~K8;r+=iPA1 zbASK(=H{cV#XxtIT36i=7~Eh(xU3N250Rxpdx@3KWvsc0N>3W&zlByQgT` z9A0igc7Fa8m?FZ;rbZ{Iy{^HQp8QDNyq65pfJz#ttpYf9?iSD7J#p*WHSf`@SFc)} z*`MMJt94<)ZYC!uw8kgRDx5B9;t3?-Dv}u6eye_7TgZLUxSnZeG|$XQc-!0#o$V*TZ&qGI}S`TB*Q2Ak$z6^s&N=s8}NcY@jlG&P&ue391 zB(vEV1i2J$Y+UHK%GFy~17J>DiL z=|WZnHRrG0yLFGSvrFXPi+Hq?)timQ5v-#IB=kaY_4XhHXIK#GKX6=2O2e)>e*nc(z9pT&%FQI`y!1@He4JB zR|f{-l5VAcOI4O?)J=2dtLU@%YJ)@~&CQcz04G-q0zTxk8>#Xr>5|ZNwB}m|>&`aKx{i8)7mYM3CPa~r< znOniEEih@b{JB>dAejs5SM6{1@$v#&Kv_fbbAC-tO#mwYkv*ySLvruUuoT2 z`RDV{!URa^xXhz(vb3o*%;rw_PT;jhzUL1Rmb+BTf1JsVjMM>24Oxo7aTL~VI&(V}yyBu-|+$_uj!00g$oCOFgsyCE!L(vC8%NoRS7&&(s zmljNuD|uqWcl!q#KZ1_sl_w5_-Mt%Q^t#l8mam)_ZI6oE?c296NY-oX z?+bW~_QYbZYJIk^@hvX=To5bc^qKedca4l3yB{&YO@t^Kv;!c;0`>mE!EyQNHTNdq z{y}v$KCK3I!o(z@u~$2340b0}^h*~nl2cOhsw8)P^FJQ;Af1AO0><2)J$rT%2BHTC z2O*#k$6LWmtlv+#sqORHMjWgHK&*JlRrnS^Pkb^iS6p1;Nii$dAbUh%z zy=-hrJoQLIuXy>FFJQrbDDaS9+b|@q^s7lz60QDoTd5wx=6(O3!+Eat$m!FdZ8VJ8 z*jicr=3aBEp_?!&Lisqnb+vKSGUT{%PH0&&V?Vkq@aF&W1< zJX!7IU0qtuJX~B5g|5Rwn#UXnX9^hNCoTJB>W}ot#Kt;|LRcDP9|%&+&dz?xF<6aL za2Y^O4AQ452I4dD5m4M^WV|Z%g2fzd)YO9G9XooUk>74f(%;8qk*yBHM6iRa$E4xp zAHiq@EbMCtE$z)m3W&kRdFrmxVubSi0KMRzByp8JgobiW0rDI&>wiI3PoF-8K*rek zcoobAef|1;4mR!ZuwiDa#*G_MG|QFx5T#uQVf?L=GGBvJ2@gc5KMdFh1yf`7QPF%8 z%AmgQ&TX*TvUhDjZ$n$qvM9y8npn2}`th&D&Lsp$9Ky8SCIle7*xlbjIt%_L!KM ze&k;#`*GXB1zzzWEfD-|XKtq>Z$>FJU60>Fj@8lC4&FOVxs&aKH1sy;M1cJ)g+o(d z0{KH`<~+6=xnsu;ScM7!w;%iX&@}H&+P-bu^D)4dZf>N4GW_9Z+1cNq(a4NT7b@6W zHO&rC!1@XmcfOTIn2kmNIxHuZEXzYeBvt^hJ92CM8f{*;vm!~(6}R%tGUrM| zWP7-B-Sw4n0@nhYS$^95$~_!=E!iB{Rsaj7)nFk93F!M6OG!$C8Xd>Ohk=O?-DSuz zfC!Qj`ug<;SseXLVD0zsX$WmPIy&}N$xKKqUA=ty3p~*TMNE{m@LrlUtXQW16bmik z)SnNAu7l8{b-OR+*^7Z_$fej_qoodH{Q&h3Mgp_r<3}OJ1Q;AH&#qm&U^wA;b+H0W`{O@R`0x$MOuCDX z&;{X+E7Bi={m+gKe*XNe{np?26;uGp;vW(k2LHLEy^e+mQgL!f$o{zmGM<2u#er~I zYHD~ak(mATJ0>%J*yLT1jDQqlaY+e~E2r+_t*Syfk0ycV%FjZ?HO`}^z-#!$*I4q8 z$d4yYwkGrZfq$RWTWcvw0sWLSom75mAS8=JPH$;gi2Kl?UdVAQ9n-qDxh#l&AaQ&4 z;>Gv6y2Gs;(aW8CBGuaR>;;5`Yyq1u`IxW?KvRp)e~3vsD`x%-TYGlsNqeWwM6N^yjg*xrVBZ9 z?>utL@2As-Avq@@;fhTGmynZFA0#R0Zi0g8iHWk-iwg?|6fS<_XJ&}OEKGP(l40Au z$9&8)6|~)cAwp(hb}yEO+xc=LbSr z{r#;6s}J0OIT7bOcYgfM-w~&rzQsK$hjLq7d|pr!T*y_mK+P*AJ|4;%3Lc(yyuUNw zF*6LC(rD>; z0(kawA^Ydoo*c1G^57u7&jK+^_tsYw0V}n2Ea)ajd{%+uYrvymsr=2FPc(pYp`?_h z&f{JJIy6nqE9}-+FDzK zBSZx7IgPq@+_8doV;b=E5PSP(5{wp{L52Z%=V^b3>0Kr(#{R&eq*W zAf{@;1Ul7>$$FgqrJbccomt$x4wZBlB_(evE01`9fC4Vwu!7@kqQ~jrYs-xT!nf~$ zdWBV}UF`ft#We%E(?7hQZi!pQ-G>W4Ci#vs{q!N)0lz&#!NHZNQVG%F*RL7x+18AY zjClI`5~B>&=7)>B&A;$9CLtNDn{V36$jPCd7E_GbMD40a-kT@=p`5>-#lGlUcG0ki zzlfiYBg_QH53A$eynPFq=!J!a!fs4OfVz${L39Qqz8rsof}H$Ics?T&K79*_M3s6lB<42;xY|JI(efW8p>xl0oR4;v z9+S9k5ie?7dmi^j8%zWEc3+q#0U&1tnZD!&<6% z*aBuswr$%6c_DCgOpJ_bX=cQEOq|>c6O`fQqSA9Q|_%Z`VQNsZY)Zf!$*z)P?JhwWMYc#c+}CM36!`Q%fvo7KF%RADX|*f1b+JqD?{^K=+200F=OWv zRp_2$rh3`muV?Ke0s;I*jalKA2OU4VXYE;~pS1V1Fc#FQo1Ge{{)&AVKbzBaeHz2VE(>mZmK*~WG z)Pe^ zhx20}6+?;QLj8e!f?PBrD8>%4$@lNxEr8~*ybKy^c@H#Sn58;+@ZkLi4`9H|yzd*m zDv?0?Lomy}xuF3I=JLf$m!4j=vBBzxJ9CU&DEr(2b2h+DQ<{x?-UHzHwF|yhR@RHt z0hfSCB_#y~NQ>~07KOcRbuBVJU)hQ|k3Qkd)~jS{*ODV{+Hj9J<)m1Tg_S1^kHN=u zcjwj2TYx7SrX+@bGR*|H!V}X3x{(aW=llz>{GEaD=4c;-&~n>r4NR~0iOBE zi9hx9gap$3sS+uDn9zZ=4|H+T8GoaBn8EzXA2B={m*Umq3D_#fQp{*Iokp3J!-OBO^;qNr9P{cf&BJq zB(q@htlq90LJW{TdS=4+J~nn3xS}JJAmwR@-+6|x)!0mdPX=rF5OZ@rM zrzYbJh+o0r%2!guzxedvX@@=ePvByJ9W2I4`MbLXdOan#RD=+Eau}Z%@wjKFR0fD( z3Q7C6pil&e#DjqV&y0KckX$t$*w=>-=Gp2r?y&7yBDhCdB1d4X9Bktl=^@ZwQVvLR zaBx7@Jp&^8z-u@;rRveF3E41OMr`J>(3`+P{kxZcD2fcK{Q_s0AQD;yzN6jP_Ztv8 z|HN}D)Zy>0?hUEu-QK_uzkgR~Jjtgu^gYVLHOL7pSy0~}H(7&Ba`mdm0KY5WA8N-W zZL6kg!9?Sc&sTq-(04z4i><1sWn%L1@`CVH13lbA2vgQaVX2VxCZ~h36GPUYzN{mq zO1P18LDKCL3?RW7GO&Bw$R4s)&o=bbUQ_17G{XF$CCniC=$O5pK7Ec1sRj#{jSV%` zQ~I`B;z3FGGaZ;4<{3^&-~d!X30V$jY7#m94j4ZfZRShz2CDAX#2wM*G{ht2G}I6N!mkT|VeM z_{*QFCzI&y#7%-L8yXuqTS1?gRHyj8a)2hmidw!jCPWu6uJQw#@DF2|KC7_CN<*=d0%=Vty?*pj`>!BO#8~)YH>l^-6P<@j$ayeQd zXUuV&ToRHtt9|2dhdPqPZ4&!5hx3>w4bNiq%dsS;C`#}p{-x26{A~2m?f*lgXJZSm zsHkXYxXJewo_?4C3Y#iJCXDx?LA3>rNR%9_ife0Y;gMM!t;O*0EwJI*Oy@y{2Nh2D z-rB7)W5Wwhslf2UR4D`U$s;0^gR3@?H{&x*KZ5!4rJ8!)6ijA-d(bdrQveREZtUFl z#P%d(U<7*@7(6vU&O@3kIG&F2>}HlMvxWRn4Fq~$yyzJi;Pma*y=QK24th5T20&eR z>^%XhghxCBe8|=7*PrFVqaJ>W)EAG4h%BdK#Qo;pc9%>*#&uf>NRf4o+n%UBVP0HX z0CT{qF4S>=y4V^+e)07x+Sgf^#tVnR2G(>@}K}O6A0TA2RJ{`T-HSy1GK{ zHX=6mYU_~(G=PHU(}6$W8P7fYz;3>A<5TTkUTTn+XlWt!J@tQBd+&Ix`~D3WQ5r@| zAuG{DLnP}gS!JY>WR<;Tli8#stFp>$ppco2G$=wulD$bnMn)OW@#WNYU0vPx?|xp- z(_g*r`-=1Yem|f0INrx`yooWLmgtp6OTX*anFfkxivqZS{`PhW(6oU&R=fj-L1zpN z?>{@6^ZuQ4q=CLZnC-`OXxNYcp8s4$si^m(jyZZX=vl&!%OV4;DMRV$f^MswynpW= zh7%Vveg&3?iuy;w>$P3ERt0aNnN3cnV%YKfV`hIxLFwrQo!{)?`!)W?Z@>1h2JwIY zAJKt>VzSt6vFGmJKb)=P0%}T1%DNKN&$n;iMm14qo{8gtveII}*zH0ZTK~_79Bt+c z2FLCf{YBoz39kPx8jK3{-@PBo4S0&zbY)CQCr?zyYU{TeU6rnxxCv-Y z&~1j72|>XJHsWyhD1QWNz=8t9*w|RufAR2xTnOWbc8m_m+AUZYpyHM;x_WNzubOPW2_!CHgYY&uw)#O;Xh_H= z-rRPUf{@OVU>_O+g@+6$B1mJ-aqe$$0>+`uGZXDaL*%iy_8>>^%o_~>=Q76e*>WDZ z8dQ@!8#WZ_0zj9RzEskQL9?jCS4Io<8uln&9v;M$gIWi{zz(F_v2(|cLHG%RC4hE7 zL_{P3qNK8W6Xx?U05UZy223>*i)CQyBb|~7H;99pNpq9~2Rgb)@4v$fam3e`!5gmk zsp>&ZcfN+-qR>?-mW{dk&EqOKVhqy1%~T_bldMbGt7b|%Iy>onPtgJ2c85}{An)YK zlMv~Oah$*R`vFHcDHrEtGVx3&c-_{3nWaKn_=GsK!F(EBc6(K8`t&$r?l?F&T=w!Z+ZyqE z=`wiT>~XC*{za-=`)j&#uTv(!UqjR@5phoHKk29^JhqMfprd|?Ohag)QCdShTMR_o zyQa#xj}n@vqv%U_-|_hQ`X~C@x0!3>-$g*YVlEV(Q1ZIsTR>vAU?d+#=WK9rAS#Zq zn(B1!TJM(b?gw4V(TU>j?4I(_OJrl-p>wl%!>0qjb#Dn+OuYJ+`6dxj+dm%gK z9R`TJieZA=xBK6?f&PG_xQ(qQijEQ1t1eA-mA`j{JC-o!&J@0g8MXSj$(S6kZn#2HPq4I zE*N^;Gs!oV;N*OsE0N&4jBe(-l#5GFwt|AfF?GtqlcGCypKS?}$H)!>TU-0u4eL6a!!I};}d0>FWsO1izMjp$}_;-w0!MXMd2rM^ltU?*=%*gL^;lc$>gnhid zY3b>;AD?=Gald|ER@RAQz>_-+AZJ-BkjuDwHP055+prrAeZ)Y=@d6qurM0($f?}tm zbQ<$%YbAN7S&A_xiM-{A@(JieE)+xUVgecpVwc}iIGVhD!(3sC57 z3<8SH2aD7#L28Q;>6EYzhL#qb`i(eK=~}$DEPX|B5_NZ$wB@ZlTAXQ=Y%}%4en&Ot z_^O@P%^1HrxY*gHpLji6@;o8)`u^f<0z*IJccM3L)|C}d$d|rH8L#a)epuknkpCgXku6}Fzkrv z80k86#o@UzVITx)`;RZ;de7WdIUwnU11k1`be!39ESTl~!_shJ<*#j{?{YewMT_I; zugxhJ{+3T?ry42H0fF1prlT64m`JyH@kBevOx%{(-LOK&3;gnM>@{0Wa-;b_ik1}j z6dwR9tIG{2xaan#{57;G)mli~q0{=`tCICP5gI;feNA~9zQJ(OnQrBn-j`YU7>5EN z$5#X~trT5pWo5qvk147$1GuPR=)*6*DtTeG|8$s)WsJLJ2WC zdCj(f`lK$QqtpM1;Ru@Mxm4UgwzPodU8JNyeWd%3cp=jE1QXwDrq3}r>2vrAD{!$K zv908?A(MIKO748o=;UMp35jWphhz9g+s^Fi2muP_lWqR6813P&8UlF1zsle_yr6J? zgc1Bx{`7JCr2hlz*!VHK%B;^xwFfXqAL#AC6jX!h8t-M9sHp`f)SC-^AEu6x=rZwj zx~^uo`X5lo_wQT9{|~6+BpK>(7*s$O*Z&D(WkdemK+I>N9P}=)DsSKt!#p}fMHib zK>^fQ-^a$_L$7h?&TnM9vd~?!AF&kx?9QzWPcfJxpuJ_<>C)04I`8@UDH|FZf_NFy zJx?U?$?@KSW`dw$66+&2JDolI0~1Vrjkv@_9Q)PD@N7RHBFoCTwmMx#Ce^+A9(P1J zp2xHCwxxi!P$&|v1H zFF35oX=G<(<7*?+S#CXP-VW+eUW+Z@k58s5Mqobok zl-=PA@B5K!bz09{FQz*#*MQXQ?tR;B+oq^sLtLK@5JNl#lH1wX}uFk0u5JaHU@2vsbNGW9dY2dgBMN+RGgj^*Su)M+~ zq54p!RdYme@B?~L1VbcRJzZUMp?Y-sa2C&1Is%0SoB;s0t8LQ*E7nw~oTg|{HvkMT zuvY?uv1X01T0kiUVj;{k_`IC+GAjNg!pKwFYWc)h4TcDw3=AvixZgat z=jxwi1CQ|%Bfpyh?z1D?!7yc?{QU1mpz+}W;V}WvhEx!v?$i^I9jmCc+B{uHk9mve z0gaCti$Y@>AzX-vNZLY(C2YH{v4C@YVKmOyF)CnQ~6-CU&{ zoE`XKN@-rD!?-n$1`dIQOe3@Np*u+E4t92!<)A_&evR(QKK^UBPB(5m)gd~5nvodd z$nMuVdltK03fQXejqB`&y1mFr-qa>2-2K8IGL=HpXxe;DF!m!dQ(v_kv^_fMe-bck zK&niQ7VTd>bN}AGsfltACSL;0p+BmJ`4IF<<{;mQBa-~wUu|h(@?QJxKa~Bc>5!5lc6Wdbrwo;)@k6f6%QbQ4oKA(N!^KVAP+H zKP{EAgz=N#%}W+1<2VEb(~Zj6BU>dK!75$5cCCLQtcN&!L8Ae zSO$bWT@PIL4^PT`F2CRK<$fK15KUI2WuMdc)q}bb6%~hxuXE-fY>qDu*(Mf38ag_W z=FM5wQaP}rJh<&hY!(7s;d(RxZyt>;Kf$?cc&Jf&xoA<*elFP`)?{o-L7NOF8-VAK_kGO#O+40 zIaL0pIs_lu{$O2wJ<{?+w`d~`7m+}kqC>$YJoP|rfLo?o*!ALAZrrc|oC>U&IQB@> z#c&&I;OIDJiW=X4OiaX^cwG}7;&Z2x>F^x*;C0$~{Hu=Zh7b4Dz+4CuG^vFC%!zk) z8pOgUuV`sgW%aL!3JkLEfyA}>@lTu1r0jG7-=Wc81E6=CX9qxLT5o!-2jGIOmaKgz zEG*&S0|F*_AdX&6m{jvo`?@~m(9rncOw$LPqK%4S8^DU3<$o+A_#d&m+A&T6`=r=G zO6tNF-#JOdt7}5DAO3^qz&o#fj8zCQ@rROs{QTM8)&_rEKxqhg2Jemk^If6MFq&>J zemldaIizedllgL!xPM4U7Jd)H2OJE6CYR{KO()#y8Tip`^s*`{@8N@~FD@uJg7`V~ z^(dR^E%YBaYALzLzW>F?813lLS0CGZCQ`aU#eEq5ljHiGhAw;y)Z;Smwg;P2S2@N-MDMXbSzvBhgu7CaN>Sh&x1 z?arM$1@-b)`XI0oM3B|7|LN9jAZ=d(>nUV<(5B}?V(Okfd$O=Q#oOB(Tn{)PW1=km z(Z|O}nrG7{V>#PT&KPqOJA6P99Xe87xB({Ji~liuY3$t)IGUlorbWaZfQoKNnW0Np zs1YoCHuTCok+A!G_{fpKwc9c^H8jlZ47Yvi8~yy*c*ig>i(^*MV~m=Z>2zjTq%Z50 zpe#QfnBd_kvF!Z#cJEMw`eD_#$Yh0YXR9HZLzPOpc7Hf=j?A3Ti`XDX-nHwfPNAc! zjLd5+z4)%$%lTW(xJ>b4>IRwZ(Uv3Yx(wQ@5!FL;J3;>nEyRD8K1bdB@^HL=ImZQ5 zF1-(L{eczoKT;@n^?JP3o+I{fZE+9qY&`f zH2e^2j)P!C)HJmbU~zsb>YH*rv`tEf#qii7h2QHyVpLRj!PFurKYs=tC>*+UAROCr z{TF$2_E(@TKG6BJJEDrIaB1OQtA?!TEua>I`f0j9g=Pood(%;B+JBF;F{MeE$sOa! z%v*um1x>(Hv>a|@kI^834FO0DAU#$i#Q(sY53SKgg^ zg;(mokBnfMo=Uo^R_+;iXuy3!^(I1PcW0-`#?p81EX~btSR@Ny{U_}+{omzN2gU9y zYtvBk4EB3x%#CRl{HX^!Re$Bj-_(gp4XFiYm!E@8_UxHEh=oWjTwME@u>S_q6HWf$ zSFI4|dl{Exk4DuES7c+?0LX2bs9?}r!3BtrZD36w;Dg>aRmrIyWmN7+H7IsqlWVYp zba`!uC(zAX!NDb&>j)F1tIp40KA#i%(R+gb^5qMw5a3q(5-tbWY@ud9_!7HJMn>#Z zLjh)@|4Ls;#I(M+zwtp6OaB{l#ED*)4k0EYhoYY>?)^&z4q)Z(li+R5W4(cTJVW`r zXCCY!lnlnkn`ZTqC)G;dzWws`>#<L!x2! ziAkKkuTysa=M<=vHB1;{2V6tr8R)8-N-6|l-Xrc1{*>*m@K0+O4>zmqsluox#qclQXpHej9v+c(^den2g)#i~rb8g&;Tn{TVm3ICrTBd1 z?=1up-n<4es^f(7r~8+F?30qhXmD_FP+mz1rO4q2?SGrw#C@b^Y-?|a`31on_57#u zQeYL`#0A<^x4C-4x)%qb_Le;)mi%6?_a+9+XiqiwI1ILWaY#&!RGB_D_IYzpd($)o zxfqLQ7*E26wf6Dp3kiqj2q=H3JeJYY9x{q4E8|~i z8&zZyuuSdKOnzVIliXc7<8M4BWh3k3cezjOPq~a#kkWzy+=Mhuo#@r>fW$w5o#&yxi*t-q zt+U{S3iKbD9n?qy*7N~>UKhC?sJ_3&Zs)&-Hm%p|sm1;<$YeyNB+=JA&0|+3X{6fy zKQK@TamgcySrGV-M_BaICql5i3QVc#NoVKKf9fY?+$$sJ%82r8L120zU)Mu6`6PcT zF;k7v?_N~YDY@a7n8d#4=jXo_T(`JT29?E!djbCib15#AVsu=UhvEQ(m;81iO6A|j zf`kMl27XUGJcZCl&Bi!wCWKCG_gDjJ$+~s9r(T?gkzdhSR84WzG&FS1>++TYEFktH zbwr-wpqt$UQZ*1PD2%?p z#I5y!c{z+nZ_a)dxU99S*F1Hf%63XX(W$x``h%sf{-G+VQPO=M%SWSeGS$=CSB^r0JOfB^4J4^YQWWIvFe}vYY5Ra8xPe z59~X3X^ur={CoBt?pyj7i=^6{?<*lRq+w_I{X@9^#4qb#@cVB>@Ap4CU|?v{f+@j| zKw<86qfufVB~>XOO;282GKwK*mI*d9I@~MW-CBO(5e|*S?OR=Ihe-8 z4~2a(bftIy`k{q-s~C>z?6>WzwT%ahmhqn!hfjfF6N0eh_cG-iU}I=~J=cXAF7 z>2P|#)pE_88H9E1pHPnK(tnO!L>_cJ-H$OUVOU{$t-GK7>rncFboO^%oAr&1goT9O zW_GuMvJO8ytgeXPg0&SpcBqt|NgNg?@ zx8*ICyXI>wc!h4|?pvppF5j_!%ZV4}oSrd)O9lMnS_@aKUaGR3Qu>kqnr%_ug7?-? zsw^)onvqN%E-AA=rFP&&W9Ls1k%&;Eh&y*&2KrwXi#71{f(C#cs06T8`I=iGxDNKz3d}nQAr7~C1^Kf4;;Wc-O5wO#>ONP z2|5mK?Iz$H^5L&1a&oE8kv6SjTD{tOIlW{VXr}e`IbUf24ydOYT8rTQLQDn)4Q~$% zGqXigZm3=HMRs;}#M5Y#j#>m>v_QZbA-2d0l}8$_ZtJ$45EcZFtYG3Cwz42PJ z?(((*-s+F2n7l4t+`ez=QXj~Pk{*Ke!#b%2%d>L#@m4P^;$;Tc7(S}7iY%ntVZRWX zg7iBpr{M2Kv8>6WgVqqlXxVyw9t49`HYPGnQ0ev)+6xf#Jo&POYs7zd%Xp*adC3(rTkVv zcA5NE{8|LB0#C_S{aj&=!lywCo*yPW)2(mE9y>SspoDr2F7GyV@{Z~ITy*I0cy_t5Cmh6ub( z%at`175+`$5igoMu}Z4NA@&O4x~!E`DI{42KBdQ27aE#N_eBn%kIiDO!@9^&RxBjT zb)VX60aAIc%_WdM5q8W+I*CuaQhKK{@4krZk9>WfJ;Lk&z#C5gf`!ZC;^U)VsPR`f zG>D0chGzoQ2$Ax1@ci?`rA+Dh%3tPbbwfP=L-S7MW8Xbt-iyzK9|%i8J^=yc3m^$$ zv?zewT2eCn?b}+k(7q4j;~~AR@@)m38D{~f9$LC>=&U!b;y>{?%H$-v6WA`-E`=vK z>PJDZ+U*dhEu*6&e&WG{JGXCdk$Ls%)t%e7iw=UHZE0!wu24F$;=_j#Kt2Ds!Tv!e zhK8^0rPZHU-ob|gt9^}g=aJ$i#is+`qvl4r9qSo2g#{}CQ-b76Kyk(E*YQ!H+;^zp z%^TLWYawGo=#kjDGjJgqCWw9D_z)ixvlCYeADv~*l1m$6uv)tg@+$N>)gL~5#ef#C z0^aqdjSC|qW$xQx<2ND~z;3Jo$;$UM61oOVoSN!fVBiXM1t+IH9$?L7KpF*}$G$UX zwmb8)tjgHGapT76#U`V(A;}`>P*?GWqT&tZa`iDxIzQXk7j&dxH)Pj(KJ|nL4>pRN z7|I3WqRZ=*d1jzVd}t@J+8$t}2eu=i*-VMtMm}_$0f$L*e{IV>O?hrr@w<2I+fPxj zx~ZF+Kf;b{R*N-!>Jc5rt)^wAr7Kpf__V3$A|l=-oYCo)F159@Tenl+8w)Toi7f7x z2gk_SS>)%w1>~O|NJ&FI`&Z8E=4%*7us%sl3_EagqoSS{7n@)Up}EXTP~jnZFi*Eg z*L5DK=uNtHTL!sGXh|xuhhtJX5QW*BH*bPkkRJi1<5QsSdV;zieKel%;4bpJYGL~; zVAa!517qK{d$%eyi*UTRvx8dd)UGh^t5;ce=u)#C+q~ zJufORhxfU6PR>uTfp)-q4pS)vd8qLq!3|QRnfp$j4u6G|%%!vxQNG>+oGoTpyAJR` zAb+wA$eW&?RQ}iJ_4T5>y!TU61IreY|7qs0f4T_IrD6%60OzSQIu0-(D1{@2F|6pC zJ!afaoH%jvWF4y8T66Mabb9#fB}I8sP@IgerlGzDX6=GS^pCXje!%eu)RPu)oZ*w` z4zIcM=c$BNlmBhg+Fwxx$%(WzH<60!8J3J7DmX)hho!~4g@oX6c^jTCIFkaJS=j9U z#*q95pZCsZ1n;T{8fq}i^rR>_@6^S3da7t@PNF|^a&mHo3KWPB2nRhlVu-0AK)kt6 z4#A`n;v*A(3QWqWs9=Aa)YxMMHBUrXSeM;O0L z0EO(SlsKtw5_uU9*;$BI_$1T6(g^&SiQ*jj>D$e=P!5Y5KuyHD?#M) zbEH#NRvhcrxuPd&xIOplDWW=mJ;ih*N=grg@MiukTOjQT!=lJF&U}!&VAfK!B18RYsp6og#^;wgqr0D12!woi(i8%pLtq6D5pdgIsIF+xAF1r?I(5;Kr$8# zDIy})-o2IMW@VeNhU{KSO%;6@>#Pctqr#L*{D=}xs)a7q5Z)O*J;nCL-)-#edFZej z37ZvD*T@l=f-#lw1V%Mz-K5@0L1};P+`cLUirmG;n>kPU3wL4Db8COUgk{5?Awv$V zg))IGFlbNslDThMG5G7KFIOdP-*oDAZrp0^2YH`8wkkPkT--xcO*l@V%_>y9e2Id_ zzxPW|&-=@9ROj2;bfGFjlUirtprjH$RXVoD-w6<#g^{7*5^AbC_e2rt z?%d*#KX`D(4Bx_z&p$?bq^#~C=;u)`SO^VX?5K3{exL(ofJ?co>$-ShsF`Qq%VdF% zF08fidAR>41O(JP&>Iu}m{=5ph}@w#hzTlqg_!5}fgxosH1`!ri{{fmQBa*r?OxMw zy+6sbnrU5sF{0Ft%! zYqJTHfglf9>pNES*Zy2mU{K0&Z`hy@&tSp0s3=lCYs_fjlhuOa#gJ3r7RC1AzZIJO zwpXdBWH5?Ax-a(f1d0GvD8MUFNi;RriL9FsnuT}4pkx(6S%9IPY_faB+mBv2wEP^kBQlj%f)IsaXTh= z=Q-P<4*CABMHs3=^4`E`g3X*~w1#p!7_%(XkUw_AJ_k-NJGU0h8wQSI(u2M4X3FsGY+z)9*a?C zWT~ie+o55U!%vg4v(LJ_O9&rmgI*wA@nZ$7^enwii}9}HA#sap-bun%5Bt8lo0*uA zy^9bpq2uA@9m-F`GDAPHTfIVX*ZpUKxev*HT5Tq?B zm5HXJBAuEafcePb!)pbN52NZGu+GpQ1iqHeXE+VB7Mm}Y&CklDi{yD3zWyqnQSvLbPs-!D z6zdjU`Zhega+e5cYtb2GCoDUH&~0*R3KMOtP9oA7aX~kPTjPTxfaIg0KR)SPTP6F^W#am~|K%?*aS_gaC~k zUdQ}dkLn{waS~HQJ}|iHDZ=aa{rk|J25(WSA33dSwxV0Mye%uU z0Njdq1N4P<*)n3!77=8Q&3#JG%z1EO^YJ4`Qh~S-tQA>Vqo!PEbSla5@u!2D6kM1X zAtk*|SGj zeEvO3AovpubC2n#B+fGq4%e?-iBC>83Tg@*-Np&C%N9qdiPy2Q5x*PThV}JVK|INE zlfN{YO~j@EcKRFv4yBY=*FUVW!~T(uu%U&`=aHUMqSqWKt_-RooDWp~=7xru*m;XbD(NzMP4R4fU7Dw7 z{w|27fR7J!cRQlJ04@RQ|7dT`02X?5-aE9?u&Sn@;G(94`+>R)eKn2C$(x^s5ud95 z@FAs)4J68atR{#`^76IV?LlzNGcrIe1b5*r4nGRKUxy``fqYn2^Z^bf%x_`Y1P>?B z(Y~~|+rl+MD4s9xH03^h{kv#5VPkdalC*-tvNbvxrZ@2gscg&x zAkgU^x`F`_WaxEC@$uHSw%ASXhXFo#YyjSkZ;J_S*l@A*QFJt6iW7a9*b$%ViBoL5 z7;Kk;{26yYc5x6oF+oypW`yb9L$W|&7xwV;w= z2n58CPC=Fx6VnFPE!b(s%NGPkJ$x9Bst~+4e2CAV$KNi-TSWRg7!fAv7b0aW6zO3M zE*Bb%PU1ancnItV;sM^^@P&nsWQQ0IuVQ|7|DvBC!_(ABT0Lmk^qDn-bJH}jqNgw^ zNC=LUkD=(bvBP8x>5NaLI*@{fx=#SBXRwcx+lmr}&B~Q4D>*rGp}a9?Ctq~q`76i? z*a7XSwVfT-JiyluDqt9r7zWh^$5By5?rQxa5!A(D^WA%8pvTW2isEO!FAG1W@h~Zg zeZ`8G)O_2vp;CRy|HKSW2XI8&%u^vLPDb=Q?;Vts-g#0kFb*$0g9uu;#^a-M9oW>G zx6R;h@?MCUXSgCWWHA`{3iauSSas>6Yh9+b1@3qUQIUCy@K+<2E@_vHuVO}Y^KEbm^YQ|(Z z=D5?H(U=(#=^S#C^WUK1$vY}27*N$Fl@Q^pf4efvB=fjqME7*|o$ydWwBvXn$%GJF zm$yUULbz-xmtc7LZc`nx%(yu3-oQ6DMwht_#REM&V~W1*<{`HMeuBI8i~Pa4ucTeP zm>HcJ-BtCC78v6NFi_V$a~b0w&RwyThC1+qYs)$~KZ0Qd&;u6=mjy5uTt1D>&GpH_ zF6tGzVSO%o6phpJ<%3`;^nU)l?ZjiwEnB{{zVb4!%;EhLC@!E0bvXEk=&*g5_+pkL zy4ZZ3?GKDTz!^kb{EqN={=hZZC2X_+@M-Omgn|&t_4KmH=vpBYe`n*IxppB_V<%UB zeV|l}ejf-bi5tnRwUdLpr!^$LUryG z(wyM>Z%*d*{!E}`83AM;v#a+v<0y_Invam5}aG@=+AxJ^%r%y+PC^FT$N z21^n@(AP(oR&*^#mqe;|S=d&eGvRXfv-bim5tYv(Ko-ES~7^cYng;^?YEc zeGZk@gt95Pex@s3U%V`nrZTv7TGX#4_|7M;T1Q4o0F9gpq5ni7dm~C z{9WO|Hb&S{0e8Q?PUMJ&h6}Y(!T15W`2{QlKpqRe zal_xXt+n-q1s56GF8csD4t`~DWPmOei3kO8gt!Z60apzXjzG!?&THxEkyqO6E1dJ9 z)GFxm)2Gg7&+c`0uvv{gKnm@Aq5jRQ?P+6%CcF$yO%EnX1QV?y=yQm#sLgH4>jS?F z*5A6gV3jn|$G)Wa(9l{*=k<>?o+v?8-q?7@C)ef4!~25_d#wdHHz9iRz79?D(6IqkypnA|selu`<38X{%#$3a6iYW|A_; zC@HO5zAz8_OKW*V=r3>kVE&zAIR}T;sZ$kCZH=&%si;Vf1zs~?GxXG^J-B-HE!es! z3XC;3tqSzUSP2+3dWR_dz^5iJ>?+C)ftudIW(}8g78T#Vk}FylE4szjk`aDg5S1-SY^IJwIB> zsBhwhxz^HCC?GVnr@LF&{L^-{0}Kp)C_sgz4tj6q^p^>IJi)@sdPsY<`3PUY#RcX@ zD{P9$y+Zl|Dav!^7^sL?w^1KeI0KJc*Rr|V%JUH!xPD%LBOsu)x7Q3EF+yZ#CmcuK z8p>g&m`<}`!3Efn2>lR}E27NYD8EPFW;f9s7{5WwTWgCOk4;67fYo5pG%8nOLwWwp z)BreD^8x)XGr53kBB&3Okoh1;0nWl!l;mv|aj2;Ikac|5?l|xJjBbUEXP^8E`cTa> z@Z(b6U#Fv?PE7|DdKOZG<gKvJU3uU{4XynNfHO}Jg4f#idP9}u7ddvD0)j1uMwL{Ed!9uyC5ZsPM9s1Hrj?6a8}ZpNBtv>Di^1OqJTMhYEtRo{g7$b%4{ z4=Akmy`lAD&DgtlFDk%3=3mXmRQHY}mqZrKf%@IDceT=jvuaP(hYFemB72}{C+4x; z&+($QG&MgT)_8PLbDs@ct#Q4v&vzg6cusss0%#G?WVgcr6uXrWqVl2c}4VnUe2))WvI^mgqP1LFTP`LS$>z^($&k+Ns(v)Spv1ltzgR!5Ke{jc_0!idS_c8sB>d|2>!{xD_QA^! z4+xbXiX9B*wsCV`cwPKTYXAPCAzE`Y(4>@6e{&#QRUJdtpbQ?4{hH%4mK3+U=BoCB;ODaRzB-xkc(ky&Wg5QCZ}O0KIZ_4-cvXFs zlS*Z5EX3+dYv_3y&W70*o7DZZc|~PfD^x83-$X;D@oX?OQjl+iM4|%NA$TX))b*QfU*D3v{y1 z5K7$|n5pupTL7p8LiVJPf9_@Q%CQ5x;!4T^i!62e^!D__#*=B}uW z5VBx#P68%6}ql`8?CKVy>Gfc4n@)h@PqMx%zz1km%cJ{zo=UiG|ZH*7S~M*m>w7tCwy{V?cws8{pZvM|K$_ zE%o2nFm=2P4^)?8>~;4}XlQZaQyF4#5~Q+|!NMo>8%}AuVoo|&ml)az$unI)mjV%< zII1$+au=OGkG;V4pr|}e3J6#}HSDG``{)2%{{-pPp{LRSNGi??_FSwIF3?$Q0x4Qb zkAIvLcS+XS?^`T@uU(TwTNgNPwS#j_Hsom|5le8 z9{~d56LXxNJFKaxHU?Jc>org~JkJuCt&A0z6>f&JlJbso2%SqfG^?V zUcspzwsnwkXP;Ryx@2M_0H#@0#!`EGlrdQNlC^fBPi1Q?iIww^-=0KwhmD^~1u z_J1+gB2+Y|0yvcTdA!%%#Qdl*Hoc*jQkQ6l=#qpRw zigP@-VTByg`jxy8;KV4v;w*1Hy~qg!Moba{x(y_cQZyyNAr}5a=0Gdqw%4I5E5TIc zH;q>XC^s#Bt|+OXB3J$DctiVV5ycCr_V6l*Z7%O)7df&noV&V6 zdRceeLBM$g@(t$1Pj$0n+JH@um~nf9d+*L7a<4=Fsb$({w>7SAZi|+!eXe>ncgQ9r zJRFO5svJP)soGV0|Kk2u)L{p-Ls7FKV1M1Xl*BscDM3v65iigcgUOwPbKTIOIUoEE zkb#3DZ=_4KW=dg#@^CPyuKo@mS(KjUD{>|9{0i~~I6f>6OKjWSWL)nUlduR8iP)6> zA7@aDp2Q~KzkloYZH2J|6XAC@1Zf`U-`{oR??b4t{ze<$KQ@{+&89HK_)Jbj8)pp1 z)4389Spc=ckYE2aEH1*qfAA&xaJ3K4j5o_AC4m`XXwqeat!1psm#b)ND>czH3}=!X z^6=|J0XzYRumrYT`aq)k2bKd|e)hJuId(lOL|%iY9DO+J)C;P;8@_xm9=Lins3syP zXr=mV^v1<|Crmo_hJ}V&YpEbEJwPvy9Tw8s&LaDzq>6tOZxZ3d{j(fZ$h?D%d;tvp zh+wdF#+E0%ny>BqUDoHXMw9Y1E6d;U_N7ZS&Sq#KLMFG*w+z2PtDfT;8mM`iAV^w5 zeI7MBsz3<>qdqUpdEYaN2XY8lNW&yR!Ewq2E5}|J7T&|f0B#FVzU1xO80+Z6a_jL9 zGZck%(MNgMF5k%zs)&Ksp+jb{B2XN&obW3vDhk}) zVB<_cIZ2_R>ihRoS!v3A!^c531djwy*cgEdv)s~6BvB{qRXTWZiL*6i=KJs-FhIkH zEqu6qHfnj2=K-8xlRDb~)c}_QcqMGIP)dD9-oxEf-Nb2paQ|om-aTe)wV&%bxfX3Y z2oXR~P*sBJ!|{EKb!_p7(AA<;#8{=M4KBX>+dGz^tIxl^l{<`y@o1{NZ9_Vq~tZeIe7laIpwU1zF-UJ=@9S$6qrX91nw8ClH_n^mCY~eg1qx zMP(m89Xq~YrzSI3f~V*D$S*`a0|>HM_6ImiwWmEtRW&sg+%q@_6yfl%EHP04Kxp!# z3OHWmOle0!4)<3aCWZ`zg@rK^z_IK9loCsD*F1#)F;E!O4AM{^1K|gTGv?;z@He{= z5>iCJAa^O^FCJAGZo;iwOcTNB@)s57m|y-{32MTj(6twy=Q$1s9()j*c_f?C{xf9UL#Q2JQy=srvJg zf5BqRj2YLi-2?W32MMOFY_E7YI(7MgM$OvC;D)aRW!)3OGP7kj7_>7^LIMcfS9BDhS9RNER`eE5#$owyJpZjH=j>)K+z%ImW9pri} zJWy6tG}slzwp&opzXXHGEO6G~g4%EnJiS)?rL=oM?#G?P?l*B%Gs= z?G>;H#6d<+K!B5Ar-#qAzML84<1$c649^CdAvUu+M`~$nv%zqg$kg%`&u}>n_4K6p zmpoysd`CmwVetGi1!+k}wx=h)%TM4tn47u79&XZ@q8Q?SwEFQNmC-Tp1i!4Hwsr!% zM|3yjX@}=AGIW#v1h%^&At4xMO~?94gh_f##|ARnn5%J0)CDFen~F2YHV4 z4QM_3`!Nu8aOanTRE(gCV=W0rXBF$^C$^ye1?SzpdjOfaynFz&4YVl4pt~ly8KcCv zhdjjRK!XPsm7K&!=W?f;tcJ7zbpV3PQ&j)7p37Xe(onB*exig?a*;n5)OVXF?r>*+<5fa!YLU4`LOs*10N616zx&~BkME45N2YVQ{!A^iU+@6ki z6B0}z5CPp8l=J2G9JGKCqJv{4mi#zgXqG!Df(;9twkT>I%0VCVihmeKs#+Ax2%Zh}1sj12M^)Yv~KCV-EnGJosGuH&GGvFMTe z`}wDrhD)zzq>gNk?cZfG&86nIr}g|R%c-gR!WvSK(RPFWW%He^)KDA&;|Qob;AD6c z1xgVENP{)x0ptgub|x3}0TKM28E7-;k?PzC|6V-XAulL~^-qS@dn> zZ~7766h$$_BcWkoh=fwdYFBzvzbz_)bzf#$8u4DyPfu`#1O>g~okKt6DCQd9=Nc$J zSYi5#y@rUS(CZP15h~}S<&l!jPpl&2<9oo>^yq%a=8&}*)!>4u2lLvHCnKMfnYfh9 zk60vLx>SgNYVs4Trv~1=S1{8*epUXe< zb7>rsgPOa~i>)=!Gvvd-MY?c7s)|bmukWJ_4fO|{I3lJ01P^->IqU0oPihxf^e8Bl z!W*op`~@ye(88WTPBMb>?K-&+ZMu%Q0F0Tiu#=U2^Wp`UkPy?8kXt0oez5osGAB8N z!8ZpORY_4_CoZ|%_TS3+O{}k~uUp={(udBezk~*eN0#CU0qeIRt=+Yr=FgeyKWhy9 zOK00n6O{9slaU*=gT=VjDLmrl6d#jvN0T)d00XXhs3ri|0vvhE&z%j1>nV0VQp9_L zyCAasT2@xCOP5+Rzj6A)))uqr2cX3P;59N@vu>S&cD4D6*^oi{Np1^s<003BK?>?a z*r|Ob$BTt>o@g8}h7_+iWWjf#rC-MFCyn#{x@J$VPx9buOVrjD4zThw%z< zB9Ecz*UbjlAC8qT-E`9fqErt34f6FHg6b1DDo5YFTTp0nAub`IEgKyHua>3v^*~O^ z$`5!!9Brumu%@Fu`)(qZ-m)(8x9&SkB4N*-9&7}GVWU*QK*Z3C^6ow)Z$Pa`wujsm z!b3v#h>8-mZ?4}bvDxqCnMqbE7~jKy1Cb3c606;HQQf0IHD4%q8IK?ICsq~~xUD{E z%VY$CuzuR5%}pm~!b?-U?IQmhv6&3#E<$8-x9;SjLnV-ER5<{eeA2G;(H3>_?AHv0 zSp@L>l~#|1_Uv&&;ghbo6Bvd`xI#6Ufc#3V2Y_1Dz-+r8gc7jCYY4x*Zz8WcZk@quhqH1QJujt=zD%lQuRx7Y8~3Cr9@P zekcrrpiBxSI%vqAVnX$|>?8nyP<;T}XwmOm&rZ9FK*WJS_c{hCE;2`tR-uZh5|Ylw z7-;q!zbfgO;ap^FViFn{2+giLR*Ruzf$~31o+9-jxa4u5JcF5wN((m5Na3lkD2{aE z&EvQ7NNy$2Fz}=?lz@!;L+0oMk-1a7l$=sdb|70LDgatUeW?!G7oK9Iq{lnna|N7g zMkq>=+Ax~lvT4&PFCDKC&|1NP?t35mW)X)gw(d0CJGAEi^|&rWKxhCpvrB#pHjKO7 zAv10;le=~6BS79Pad!Y+T_@yfYHLF?3vW<)>nsom$Tl_EA=aWu06#J+hI=q6PJ(~s$Z#F1f&$$)EnS<^-Y@y+Vz*tB~8@pfO{h_jH zuFkh2E4ZSZk@Z(CxrB#}i}SNHSO+W5YnSfzJ8up?uu4jB?W%{!!#w^d0 zlJfMaQ*eWktG|2N+y^-Ni!>6&b0+_m-BFiAkIhKqca(BQXh@ z5asYhr!TnjM^`~&jE*F$93VAFd1(Fs(p<0S(5Ku;dOvT6b2 zk*F{K*=xKoOh3ML2`whrXi)am-?au?GWZQ;OJV?6kY7-%LBx$20rmqul4hnXx=nD( zd3ga?p*^lEExk4=aR#j+2t?#UD2j$$=FSYGU_eQZvkIC8LK{x(vy_woMXDh%Vz?3GX<>eXv)d!0tnla>>gJ zei|wAvnPcjX6}ka#r_;Fmjn%hn(75KOAPDwd>bFs6I!qVI)NKVx{l3mjznty%14Bm z^z+m>2E=cA=K3@uq6tXsVHt{@U-8Z%_~1--z>x!r1z#OhVwl0qwHY3trNJS|U8 z3Rc!|v|bxve1maS8Ab7}z`&jTG?k~`G;NtBG|It1TlMf^QVA_EDHZ$%0o?NK+s^>` z#~PE&+RX?J%7FT(AFUdGJqkoE*HzVVM+W`9k~9F|4$ z`i8k3X3zMq=K5*u`iqHOeaw`0j2*(SFntFx8pIZ&?N(2{IC<>s_%|+c^}@z5_oVb2@R;C&Y=n4>Li;PI zh?r*U?jo^>0Tj}dK(NI+Q{0Z!R~GSz!Q-rz$PFkFK?~?G&^&(J0h%iJsUHEu&kuRf zSvh7NH@}S>c3aXTB2)eX@%b;0?;fr>jIqP2Rf1Shd|yi8z~t@ZhdnDP4<9*3BCTd( z0@nyS4sbw#X*sMVIjml_ieR(@!~o?I-7~z(<%mi2TnEUuko?JyqQoHhjc6Tl)G#na zdJtN0_YIIOVwofoLvyyh51W~b?h;xI7WKfu_}(qwp;Kw-HIw;|AzOZPE^IXH?Y{$Y zfMLUpTwOC~k0Z)e$CEUBfWmdIgdqhIUAm$T?9L%Wn_?F~3#TRk5N8HG*q`@ajRfrU zx~wb_GY*IWcSJJ>J=4{SxRlkRP;F9bVGF zl>60ZNf;IH=W0>XeY~}8XuSaqVbqUAj;SPSYoj32Sxm)k(dgpCiQ0B86aA=-K=Cza zMYBML=6k={ggX%}B=KY;Cdy<(t1aNf+vjiILuL-2=#iB4g^vf}u>F z0eXkEQ43I46N{IzFBFpwCUDRo(t!X>Xz}bV)hA~h{R5ax9^NFlb0-Tx3*<}=@v{Yn zp2wadcA>I|UKRlJ_pi0P9J1K1%o4cjomIBxD!EKGdn~TURGKLIAVkLsw8~LbR9RDo zD+IP}>!<{w+W12LaN^y&$22ud?U^_1+Op+p=B{14Xs9UH%xt_;vs#kX*$Ff`i|&q& zWox&STyuFA*$lQx^S_&!rrNT3bI;9YT~7D1Np2n!q%3eD6um;c$3>*slH^y_g2kIaWZ?HOj{FItR8yAq1#(JbCU7JCA#mQG^;Y?? z3n5%M>g!pX)wdGvOHf~6hsGGR5P`iV^iM?5X1$Hj$$GQ+DHxjv@@J(=+U9DuI{dh_ z1%1MfI1DTOVq(_&4m&;rCl5#XDgOn1Cg_obm|ADEEfvjmb5)-!Q{ zeUAW-0k__prsepq96yxXo6kMpT$fiX%4i2M&Q{J%AQ6v-W5f{NsMa;$iay}}g9pP4 zXB>m4(Uw#S6?cr56dwhLz}mVl&Ml?7%)YQ3V}REd{%XgMV_JU2FaP5?M*OE;UD0yE z)Dr>s3z9>fmq>u91Qu7)p*n!)>3r@=DsQ%Kna=K}+)E#dYOcR2ueYs@uuHlAkja3$ zqBS6r8#FQ<*TKT5eHTzwfodZ$6pLgsdzyR5`q<4uk&y$K9UB^AhgD=>!_$?*s<)WY z{DdR-0DeLP|0%`sAX>Arp6&LLWHn)NzMHTTnSKiwd1n~g)`2eHYSj(*#P-PC{K2ts z+}qFEY#aYe@3LAl9Hre1(-fGfZSBeSoEK5CI1dkT>z|x$Wi}6*F{KGx{ng48xoMsM z`+3%Xg!4Sm1`r18WP_%mS$J@b;>@h*erZI`%v%$o z_Dfju2^9_qJm}!SC$OzArlh3oxT!GT+$_wTYi=4J!Yhg}QXL$G>Kjtn^+ypQhEWv> z1}RAMqMO|q1kX2f6m5e10s>fMBYz7z-@Up8wEfJ5raEj*Q68YxCv*AIi==uI9Y&|KCK3 zh!}fGk{Bu_Ny)K`O7=Bbq9~-}TSjkHr0I7yRYUS@LZ(xv2sd)jW}uL^u56 z_U&aT#880NESXiX*k@HWYjTZO$UwB4OQfH$Os2tBYTc5-@fnr=9m zuwE0MY=0bfrb!cEL!AKwLKAInJb6;{#!HCEAKs!lPSPmcS}6WJiV{U>17ytB8BR_C zd?KM7Rfj(^I`Y%kuliS-U~!LE==XG#6itUtAK3QGWMX0y1MguZ7d^-^%I7Pf_W={^2E2 z9mNSQ!I-)bAh0`d+($)5-cc+8iJxK#Nc_m&Y1O=WC$_MtzQ8gCMv~B3XC!}U5V?6Y zQ({DkR=6gOs&snkOYxd)YwY&8A8ydb`jTM=J%zPL+0Z<#%SlP3H-XNr_47M+89c*<=OMac4FOI`PO!$nmPpYYluARx!m3~?G&-9&qu3DDgnX#3?Co0* zuq1ju#F0$DBho?ec%i6$<9`0Y>Dmx5{03G#9S9Gh1et4Rogm z*v9Y%Yo4LM2A8rAm@;)L5> z4*g_dKHXmYv0&~$TC76=z-TWQVzl$%nW0L~W+kz;3Ks}%P6FBh9e_x%ZbTC8+qd3V zHvhx|@@BKp_}^ML0B3e6@5p1(qUy%N6pf@mb58}lyg9AC-){w)PL0{|g`u6dY*cEx zFmwO59t#U*8nY%plspRwE8o{F8>6hzYi-|xG; zpWnWB;Ua~Uj*hg#CB&t3@U2A)^Ap);jkPh2wMbH#qm0+)>f6T4f{Umc&dS<0$7Il; z)*2cvufFg3+BKnTv8L|_7Ef~Sb0rVY4gxVeh@N6ZA(Do2BaYf(?IYq zpK9~2D-(HN@49?z)JYxHy~Z<&rkt$vtWD4DyooB491Qj)x{T27?Nj{G5sCsYlw*7L zj9EACu8c_#tIk{uk1+k<_Cn+)x0gy#GOs1J|kxbLT>V}zWs^MWAh$m(-$ z)oKUqT(hQ4L#8yltmuW8UHkc?vT||&rD(0Xn|nkNEF9F)sI;|%kF5K%8#gxJE8$oN zbI4mfdg=>drP2@y4t@m6}Q1E_^TgjQ? zgb80{(~$)pS2=_g?U{SQ8LdL+3AVfSk|Un-VmxOwC#lxN&o=%@jPkK7SHHb5X@78U1|h(-Z^1O@27RERu|8m zBhd=*YxKf}y3dqu_h4vnzYax(g)pf3W|`CY9rwOS%rsWYcTz!2!;0@O`kMxGdhn9C zjc}{mcEgQ$<|2&B3mD?F>E=m6pFqVlnm2#R=tD%83B5XK z=uK5EC4U2>d8va}z1v04wwGvNkUgrqqj7QhcH%}7#%n0c*JCTPNx1ofX7=NHs|U>^ zn{o6Ssdv)KlAV~DNC~R03}}oz)93PcmFC+vo8MDQ4JeIou>9ole#kM^=FC?M95v#= zcz!0QefjJZxMT=}an}9&=VWFshNZGihfu;%t~cxZy3l#krtMByJ8@xH58ox>bGs(z z@<77g&jQM4nML^HjI_B2ZR7du^5TUHuRk~NHAM6q8ra!+3InhrkDnfpa&3=+%!5(` zNTMfsrc||%b^MjMNTGdOmFD{=_T7#C+X)RdZ4VpSP+2l1w0B1frJ00VLt}8f5JS1m zMoaz_I;hC;+;cVst=NGa#1wOJhYzo$h)3;z`Bc*`EGs?q z`$!Z&gJ!=Vs~JcrykDO_P(C&Y)F=Y1h$Cb8qp>e`y0Ef`$J-@jr{2Gk)Ag>iFs1MM zG;hRT1$AZ|mtWtj@0)OuO~^rE6RM_7c($BQI7XWYEm zx1?5Kt8J-x;hx#IZ)2=DjJlHd3*PiGRQdL)`1t&L_a>r<$=Pqlk2rj1{NY;Vrl-(+ zgT6f|T;jU+O?o159GO2WO<@|4<`=6A{%tzx)SR1_?q60>(Z78Q?8h}YH1ZbR-NGL8Ewl>UeWGVQ-+ME{~zCXZGu20{sx^H*K;pA)y-KKv`=C69ODM zGr5Qw-Pn7576 z?Q8SbJR3|7gLi*>d^gBk^V@U=Xj|Y3)z`N0*5iu%GAXxv`>et0ZT$NIT;s%nf#scs zP#WD4@=OrQQnJvkW}VfBgcNmnUS0zf%UVZ6v8-E^QWEmSyAN2HL0}U!7oxK9objTB z8tts8^ZM<#rk7PNUZ@h3*8ILN1I9!YKbZ3F>4z%kj*dI?+Z12VoYb{Fy*z&}euJ0H zcz{}#{+tuR-VL#mn+v2bUvsNQTCcx+{`@Bzq)%-vh0`Lg3|$ZB8MD^vIZi|ZVJJz; z^u^aDblxJrXB`XxU4f=ygl8%SbC#MIq!HG@e+(lDIB+2@Zj0ea$Nj@3FJ-caEKKMi z6skK?gw%zZEzHa=imb}K)FcE|pTATY2Nlk}xa<)c=fWU*wD6L_er$$b2!KgeBWP4> zkb5VKCJ%jk@va(6hBcC9RD=#qwQ19H1=Iah_cai0iWdN}-fxB5gM(wBbOAqU*a%iK zi#wegsn2&K>|$75xhb|6?|wtPW#gh}Oz_C1i!B~lMpDA!N}N*r@U*luWidj}N9#&z;09mqC6r_A2Gmy=^Re*D5g5G5XD{DL7@R195oQ$6l%JrWQYA0_L0&X2PAdI6&+=RR; zfLsPFUg7Z84t4=*DJdB{ui)pSicl18A)b`qG@ng2&Zjq^%Rp-Bqk0t~Aa#r%e+wy< zt-XDm+egDMt=hP6e|qw*hsQ6nmzr^L#hgDF7 zbauXe0BaJQGeier_|ipwHU1lB&+gKW9H2h~8XJmR#(NQEwkBMy%M+!q&#Le07cSS= z|KaSiFDX6pEw8KwE$zO2muH`!>EGC}ULV$aV9Jbtv>3ZSsy2(KFpGanPeJNRjPZgd z77lr4g6l7nj}Nr6^2a7alZT>3q}r!X@1WS|AJ2=&vmnUAruH2QW6gO_cnd!1kcbGI zH9{&k1EJeS9fCG*+Em(Qp#6H~rcUmW9-Wi?e`J2S+dbuhp^BfL&y=M^UXc-^)Xs&j zqUF_pb`?FAETopPw6xR|oz5^N#Rn)y&c*yWantuRN0O5ErDQj4RW2c(?9wnw_`vKh zBJ~mYK4q!yz=1?}05t`|JT&uL`S4L#_dB3T`#5-R6{qPA>y>!=^OuGG9PUXGPxl4= z`beXNb9a^I&JOUU{3}>D7}M^BE`ajp^zZeCfFTzNPk}aHw(PQ7fuXIY_|v83SLGc@ zRs4Gj$tX`66;al(1u-T7L=S*}v*(`8GSLORl2-Cyi_fqHgG@{TpFS1wjLW*ay|?h5R@|FZU(0mK1$Z#tLoajb7X}FxN72q9^jth zEP6BV-0Hi}-0!wFj-)@etq1-9ax(Q=Z%!e1TAo=$tJgffqqEcrOL}YAg+Oy@oo=eHIt{Xj9(iXphTD7MCXip4j#iu!6ie6=*9pnXAlnMK26@k{5YGQKiT_NMH4f=W^#Hmx;nVXjW>}qi_d*lbgUqxRgIr;MiUj{=YNz4;7DLGm-6_;M{Tv+8R z!0?^|8FuOvHPmmdg5iD3ha2wmQrX$kHQjP_O#o8_RD98|Uh{h^ZOvnm6TYT>HXQ+An1M zQJyCixa`wf#-)7v_KhGMnjZ0gvo#e3|k+6E9WJ{tnqKi2x^_iNvRp&{?)bnMM7gKT2-8Rq5XxKGm!br`lH z-o|5FpqrE0NVNb5ojPNQ&e*K#UEP*tbuQrDkX2i1BKWIwH6p=EIDh`HPiw^*2&~oO z!p}ChzgSZWg3d}Rby19ly^o^-dJ1{ceJ$bQ+_ZJ8D9p%$8$WU4F}FOcR_bk1&;D$C zX1&BvEG`doB+|^UxRxViHRA@4rby=Us;aFAh1;_*T2rzlm2b|m3%zEg?U@^8LE%Wq z(P72=vF@g*wAC5d^|`8wJNCu;Z_m(?9GTqbnUX`x>gZ+wTIyjH&H`lJ6AA0x= z-{QZuI3E-Lqra(@Dm6)l);mn9V(GhgV&+1p(xxG1vQBYK#m13H!pk3(QeRNy^VoX z>?#Xp5&pm>jYVQz{)~D)Pm262#t)Kkh_O8U*vJXpN3B9+k-X4ep&iW@w{AnAx=Pm zRr~Jb*_%7Hh@NQcKe2b}SpeA3o?{_WhMJk}J~Mp6bspD1ddT+JW9(={q5HGkyif!= zstB{fcJC%_^Mhx4?HJN4z_anl$okkSTEd6T3y^^%sbz$QnPHrpu5@3bhyB|@zl$i)w``89zur2X- z3(s?YnxXLgz%K&-?L3n@8tER zbBjgjA3lEE z0Ogb1`TDI}WA!vA*$AUIDK*KQK5riBR36^`370P2yL%UCP{)rz42)q!`3+qA@g+YT zp~eFRQgl{PVp*rcQLA~))#)1q#4a)*BVP= z)lu?_sZO-c&}z)9pb|1Eqr)MfQ#W*5)FnWmxANnR2OC?gs0g}GX09Mau2e}GI+K@R zw^yl43B@;^5bYhghI~m!W#y)~UiZvQIi2!jp~tzgBNkq+SFz|P&NpNd0T&UHziF<5&vM(=6NF%FM*6u>rXV|4-RDpt8356Ai^2QtupY zd@=1zu5%vC|HVe#x8>Y9V)f$YGhgbRm9esFl^eeI#7lhXM4q zsryvO31GI^0Fs_Wj^)CD}dFQd6T0 zm8GY2Cq97$MMy=HgcyeznpVGy2g$B(icL4`0NyfkN8C6XpsEn=4^BTV?C)t|;R~CG zY#Lyowd3aCW9dqp0@mdu{^U^Zy~|tvvr!}_jnxH}}|s-Df=4V?tP<^O1Sx;&4dou;8jcep#f!L_MoxcawE zl$@MOdIaPy{LoLOxrFvcVu4D)6%bCg?OkQ16JYmVCCL`CG~w=HSV33g`O>ts^&q04 zJc_PpyyEK58wGsMPVu)60L=pXjlCmO9wx8~H_V8G#3XGN8^q4mC;r(FJa+nA+7M&` zUBuFw4S$yb6jFY|7Y3wg1#d4jd*$9o$*o3Fp|Ugy!Yka8m*;>xhg)L9r_7G!&1|mv z_h`}%rP!_=5z^v;h3)j0IHRd5y}vo~c*SYQ;}=bVh>+G87umkz9h~o|7eHzCw6HLA zK8bQCr=P}I{YMMsrnmbs`CTDZ6@xIui()U`HBnW#Jv0NUHP>^UUzT5Z?Yqd|@5?j{ z%{kGQGYr~$JUQ2c$X!F_)ME--91{;`R-Rdi63uV@`XY6aff#UgDNZ}gKHihx z<@*ur7&*y~sIQ%v6jYq_Nsf1lw}pYOd>=~|rI84W-T{$mSF>fPdxi8a?e-fD9r}aa zWIkX31HXniDo0F$lqq>La@mKsippPBxgpY}TX67^$ng^pl0_J`*I^+0lW8kC47dw_ zJo=`xW>$1pO2W{sw<+TbZAnRoMYxwC>ya_2U`;FcQ*m))wEf%U&1=0Y7YzwI_xIs^cJ;w z@80$85R~n?iQ@crZf=~V_&X&V6Q{`gDHz1LBMTr{AsqWTwlG z%5i(Vc!OpEJs`q`+dRgn6MhdSS4wAbMzDS3fEy0u)eRFJ{l4x6lFr zg!(VAqG7uT>v#HM#(}6Pv}}#IewR!^jD71?Z(#NzLuMPaAGAR#>DNKzUvk?0&A)7n zCW>?JB@eAj<3s$u!GG-aHZ0}L648Mr?Ub9wKH>He2iZuaf_FKI9OG?lXhL*)!^$F@rDM!noX}7?k47lYb$l{Nl z9d=K8uLS76#qT3{b2l~GjMLM6XCG>ZtU~|H`or6w`Yv(7AU$GrPoRtwVT;gWF5%1i zT?0dHtndsVZpkoVR$U9F_G&84rIYDm#WEs8Uo{|geP_uTo1^)(X%uB2*QP=!k$;lz zU;DFMOjcBKe{Ke-A+?M!3j`1iuo7Ske|!*J!|Ln(;e|*e04}(!5`W^KB+PWis5RrA zdW?Y#v(iuQEV$~cw~<6=EdpbNTt(j1q0&($WDWJwU=SB*6{rP_cx%@Vt{wgJ8~7>! z#kC>^1N4bcZzw~4LGUlD=S}4#Yuq3HOWz8^Dc|VNn8}GCk81GH=%CV_ z!NW;68rkh%yvx9jD$Qe+=+(KX;L@X3Geq?MVj;wwgGihj2aM%AkE+MS&~T@s{;O4h zbv46yPczf~ErM_L3>fBL6T&OM0q}HdM_1szom=-8%_Yi#9g6$f<$T4es~HnW#+;~f3nZXGMV8m%cSHGWz!Q>tnupx<8T-ZSjSy z0Xe`<(!A*=z&|Z0L{N1fdETEtv=X1}umZ4vqDygsJQSIVohw{>P<>F`K89I=h2y;! z+*WR?HNW7OmBNw;CaVqg$Y%!+9ZFKC2SClmqS-OxB$+cN za5HaX;7-aMV6@0pyR zJ*{X1TOdha3gQekv%=f^`kGrKf^;>`(Q0wI7eM&?v}!+^2BOX*>T$8h{l!1lTu#|A zM7z7q-WNKz4v7(S?+ZNXA&N7rcqimGFTkG(CRsekR!3I)Aq@)6+X5`dhZB_lWfJ^5Q6tS^qTx#@%8B1lezCZ*NxiXxpI! zNv0WJ+mJ4SJlOVb+TgwJ&pS%@aMabDqore}pDHF^U@R{*40aLmO7m9s?wyzs%Vu3H)fn4%Hx6nb656d-jh}v*1B}k~J7uN$ zr54^R)K>oZq;ae9nMuNbsHoI_AFPv6;{njs(V_;%xtjF{79p9C z1bhYn#JwUqTraB#f4srjK|L;0Uj`b4AUktxwD_7YbW!})Cda3)1FLBZn%c#zud#86 zJAirjsrb?%3&jvb`NjJeaBA%N<#CH&R(eXt^{nZWo(IK>>K|-LzJe{W(`jR@ zw8rcQIv!B}--({3%Dd!VsM)2(D4z=th-KySxm+H|2-VtMsnqtq zaz)x!OY29j=YWu$x+Zzv)D-=DTUkX#ecOP!PAuWwgxHycdI9^1S#j*D9Xsp@%v`cp z{9&^dWw30{(xqkCaWD=cXV?Da7q+7H1+@91J)o@Y_uqcYGjnjDi1P97TG{RG?bdCQ z9DORqs{ix%!*v9!?88nK-Me9^XJb|*`TpwC+KXoOZ=Yh_vDPD<=3~JoWogg zYr;Z*zM0dphYl@7GD7AoIwI%~@obs2ZrykC#vszhV3Y*@wvSR=j;`8@9}sioh#qtj zkOpH6_)^@yO+Z%oZw7$|QjPK(&hQ&vG_0TgY|)`3t>MMvSs)f=aru*} zR;h9ITdS!p*o(^Uq8L0f<3-ov-Po#Et+t3F0~Bjf*LEw508Ep**S&yoeL7Se%qTDI zMTYZaWy)46Q^L54)st7npQQ7S_jM9xx2BwV6mqMp@9}(8d>=oG+GOsRW~gcxSNRPH zzC~b1i&m|m-H*uY_E;M^=%O>@Y<6cCc$r?ze#z6ORT#UpQ`H&*y$B!SNlB0C*18Ztqt(7S5a6b`d6r|m7&8xR)Ax^Fc3=~zs zpPUZmEkkp>mB1L_R!ozZRmLCQsI+N}_lgxYC}N>{szJ&ica5{zjlCx95%DIZ2wZ;* zK~V~41aYqj%&MW>ZfoHhS%yzAnB{mkH3NSY`w2AG(%P*+DULxU2V1hxZVszXb5 zJQoIj{D2i=wU{?mUN(d*MW}>I5P2PCbL*BZ58n~`$6dJKgUWj0c`*vnr`0aoYSrd5 z0sjy&9ZQHmGQe-`zsq$aUENKQq0M$A8wveYm79KSo0*XTbe+64mApl#hM4Q9sMp|~fM1uHNG8z1CZ0RjiHZwG z(DSm&?Gq8oO;Ok`JU^4No$YY*W?XEn^h3>){pYrVJyI0g+HN9d;nMr=cI`g2l(a-Z znze~ChYv><6F7V{@fXHpo@HB1vpFrYwu4}3vB#1kFRHS{-S z?S-r!>TRU`2*`SiHf#)t6;3pkNyNCL`Rv%x7q@+_p0kC;Sy1w0!JxbRiCst}ZwS@t zXdRksag6AL#nS1Y5cILzkq|P$KHp4w>0*^I968C8q@1qY{Wj=qc*u}GH_O&*fKqic zTh_i^a5sxE_jJdzBb6^5*uC3~VKb;EI6E*5Gk+6L%D%LRPBSJ=RFQOMfjT=OC!}oQ z9@(Q<(An@7>`w;&WYCgRgVEE=7qkOP86LmuP*H1kej&Y#^7PZQccYkK1>GT@{ovul z39x!tEHA4#OaRVbv9~DMi%eMLLL?AmEqNY)Dc zTf)Pqa4Xk+d4Fkn(V!2@zGFqk=St908Vn)P2$ORo8zKfRD;o+1!mG3`udJliucOZC z(y7yL49B)P5%Y|(;k5m)_WaZ_C8alOQ1M{$f*GJ<|Dpah$W5c+XXjL?OHJVCvqE7m zfY+;Q{i$86N|C6=`ojuvn48h(;S1t{a`Ve~u*6H=$i^ew2z|%@0?+UNFYtWD!+byB z2`Gz*BsL{YAYC5<3#Nn252Fg4DX*wkOrUGi%g%ZD`08nX1)LNYn1}M=uSpW|H|k6r z^4+zGP7!bjhlKsS6C23RL)Xel)hDz%jp~J30yZQpe4_tvU3rZLz0Xy+a!m?0qlQma zR_u*kK*bb-BIQ|E_xg&?U$57JOtJS-oMt?HIQ6oMT$<$Sap~OO$orO{E4Sqp^ zb#PRHp$9w0P7wE$}xu4zBO*67K{eL(-HO4#t% z12&C(KtGX}y*zd0zF#dRFWX)`T4(gu=fV4lbw=dlFsZ5EYBOv$AC?a$e<4eje5b-4 zophpD1;|Oi1>-s0diqv9X#nv-;pyhIC&k7i==%jJj5zTLE3loccs~kEcJ11vprDo( zFE6@;jB*=0wm15E>o_56GnzaSDo~q!7klqk!mdshr=L+_b2-9A zBbm&eWgy>|I*p2h^cqtXkfGdz2c)aQM8!e+2pR24B=4XQcXD!$x(Pd`<3j0J6t{BN zMv3>+$NdvzuV`hI=0rC^=SCMxte5SUA}9Ru9*GQ6agXm6H(pK)y%= zbV(3bCR@Zk@ZU)K%g5P^3y*KhFPPGVi+<6<&~d~#_7amSzvNbq7aYdngYKakg46;` zMTAnV<5S;>;=hDFhK_#(+6u8D1u5+69oj?pM}1o7>-(31c!-M52>y{1787%Y z2@iA|uJ;eo8B>-A_b@T>rpF?Og5Sow!kD47DePFU_eKrhGZV|Ai_;$!FZfhf5#)2r z4KaphAnAv_d-NFY$>an+GAXA|;()pd{FgsyY17d(7uMdTqF zFcOIbd?7+l4ee`o&qhdFN}uw~%!QvagFGv=3m-ms@ESJZF!inG|@gBrSjWPjy-bw9ikP-&A_f7Y-x$vkb62<%uRzZ z%gg&n|L)T&_BeJiS1a!e_5ZVYx2am;__1xa6P3$cf7)Q zQ3!2a@b#5u;BS{ZIzM>+`~Wh+-QTN5d3k+;@g)T*>si^OlO27ZdtKSNfS%yULmIaL ztPe87m4>RZqn;>wssI|N9NYzJopor208q9GX%+UdOQHvKf!*vq2Y=e z>Z>Oz?i_7-75g%cOgkhnL>0ivsyV%H8PCIRAh!#Q>00m6H?}^iS86gH%ol{B%>7Qv zf69QaZq01nroQA$$M=jrF^WsVRY^!XX>8cpiSfm?X4Lok~$hj%?d-q!$KG)rF5^IL){djvnn5e2bH%P?WdGar;6M%@(BVkaSYh zZ=lGh%A+$t7}9;>s#O<*gM+EUtE+nsa8#+meBAyK-Uo1(z9nhMcPX|n?6pGmp@Vlini<4&FbAno_YvG?#sgv zLrgj!aB5mNz=b@K%kpzjC_`uu%*=A(HQL$Q@~tM!8(AhkMd@QX!zFDD8-En?!->I` zyf=$d8{2Oo$Q*7cH^n%?H%CNQqpR&OPPTD9Ck0B_ zs=@c50=TVKCF6pbn>o2e57mIq*HI?%~dTETgMIj+NJItEJb#wgi z;dbrYkK$2^swE!a#*~QA&;^SYJvi$$jNXnb2hDBbLv#f8ueW~Ab+d*hVc7k?zw!NN za(p#pi)!UI7rZ|~{@R~gq*_(QZQKytjPu4OeIT{~fbFwlO%g1>mE%wVR%dS6*N zai^ZVM3S_WJ3kH1qWGjEL5W1AtnuK7P690~>ZOagO6A%M5LGL0+^NOMF0xBnu?ejN%8&UZ(lGtOoTE(^+AUku$sTVtq7Sl`S`;d zH%2-+4Fh92qjcer*llF|zO=Ibya-^eDbj{ozvGE*mJE}B35Rz5Z{bkd&RpF{;2(U< zrbQE@tk*xy%L@s#xkuU2SbHx3Ix>;($+EGvW&jSzTf#l-DU&93HlBYKf!n^+D_4ds zeNR6inxJQ!g*dN?&t3K(PK%`UNkU;ND9f<{%1uYv+qd?$Z6Kw`M@e#?`H6J z0t8w3LXp_~0H7&(WLBM)!X zOVL<0oq_1t6V%$77C(Dt6Bc>gZct@Q$(^M#;ab2vqf^V=+`@Y|cN823Q=p1|0>aL) zu_Ctk(}`tIuT0LySx^clLVGW>lOMVMgB80856id>IYhL8p5j_(`i#As=ra~cjxMx_eN)28U}A!+v$IIDK7u+QlyrWSSENNG4Yr@&P8sOm{LFN zZ|I-&4brVkD%L%-`Fi5rssBX-bQva*098zzGsjXib_xbj+#~?+funTgBX#C-yywMk z->&ZMZ9i`yA+)PeKGB@Xf7U>`;8603@HcqzC0C_NlsGjLhlF@>PbiL z4hleIrb(sogJAITX76nW`L~TPk?k}d(DQFLKmj`E`l06tsQDP`WYpRm%~ zn+WuK8O8P=;x1hxpPUoTQdd`(11ovCtacTo0|~Sw%d3R7ayr82z>>Nv41#%}8P&!L_RaC*tv_Jjs@MAKi6(znSM2mxGkWys zQNE5Vn)FG(i!c&TWzPDdG&*=LkYS$Z&_$S&OJ2 zaREuZ^5XO5dU^5L-j0YJTGBD9l6kv!?`BA`IQsMaffNWR`ummjrOT` zF6WjhT?Yx#4VB4cdU|@GX9*JuI7U!y^r)qJ_by(tH=oXt9QFxedbwFyHDvoRri=kH zR8?8i#N;^!&6S<u<E{YANQpNlILVfIoQlY+-r2fvl+~0dsinC zoA2L*i2VbV<~Uthoy_|x60rc4*gQa+3HHs&$FQ5HPk@8uHIbuK+V^Cq5T2WmRmZy( zgn^JLs205D`v|gJs5calSv|jUZThs5EcyRZ^FVXxJ;3F^1aY<(O*i6FJ;wj}lWVN+ zG`sPTADw5+y&04_EqvbVfW?kiOn8AfQoPqoWj*z*0}odl{`#lbuxLr{z=e zw7jyT3eztD-eInF`@Xxs*VKe8`ogI|)e0vkc`YjILGHxR3M36;z5ZGZKS(u_uTkBX zJ6neUCTAT0mt`IzOSM#lS6fML4h)b=cQeZRN zw^^u31Z=9Ks&olQ5M9$xPD4pzfo~cMD6PFXGnLhy8k}G7q7N;FF`X(cfoSxVHCXQG_-}<{JTn9=0 zliw=(DGSzR>cUMXEa;~wJK>!?6cy+52OzB|C~ExEne&47QC|A3rBoFJodEE-0Yii; z13kS_{W_q7N<;~JMk(u@qAOU|ASksZLq{_ZWN1`JVHZ8X7sQ1O62dUR^f%t`RX^Ra znm7;-It+#zqCEBv0e=Dn3Y= zb74dDP(RQq7x0jpmr5a)aC|)Lxhbprrx`aFJ{oqXrDDW)7t7rv}uCWDh@Hh zjtP}AjBm$|k*>0uNU)!mu+&5j5@wx2!@k-_n&Hz~lE@y|mbtL1(+1I+q#U9OX-ZA1 z=lVuz6KbUu=D^QHHlrwJWD$DT*4kECr*C(BcLo8DH@1S}?WwPyU!!-#X0_sv#+()A zbA|)albc)jxs3Lh{J8UA&S;C`M*Wzx!pwIVvRj)5yE1pj_BE4ozAR8}&bnlrl$)pL zL{`RR0&UJOx&^JqS$B(C6%nE^P|f#ZD>b!e3gE^8h@_X?KrfS*GjXda@KD6 zv5w{y2!$n5?2A$vM;_X@wTzp+tfJGK^=!tC@HTDiX)DQ9$Ml@+?ECrotcq$bA^si^ z`4=&8@mb2=2Zj^>+`Sai44d@|)2f|*sy4O_6+|q*Kb6>8&M*Yyt3U$}yH!+J*q`j( zJ{L1`LjvroJjc7ZO)4L2R0adD6F>`=ROB!V`5-gf8EoS1+HN{)z%-Z)m4ySip& zK%&Vq4^f++IMEoBW~mf(qP+3e*?F4|9n$x=t8nSum|kYAeD_>m-4^@jyqeu7`R&){ z``p6xW1A}(p4z`n)@Ay#eZgURLArf=Y-y|eM{|QZUFE|D@!zj>&%IRL&2vecSuVa; z42{m#6<7M@nzS}unK~@$@B(=Z{PoY_w*b_`%rHNa>5oH&q@)HQN;?1fSi+mu-)pSD zH^(#WBAEr8zy)XWUc6{z_G$&ff;B@mmu}T@vs&d!ag8Ond|j3`GaAk!SCX|eX1Gn6 z`@#TOqmccAV_cRK;`qyhiN%*!i8E)AGcg5-PplzwAfvVG_awdeZ(Fslj&2=3=Ni7s z_3=vrFF3XWyupXbw5^1!?UlL}#+~Em<>PP>Pwc1hU&jYJJ=!(MNM~)~ij9jgl!E~b z5gZm^aHTu(w{FB>OJnatO*~n)>#Jxta0-$m<$Xq*%HF@9Lwg1?ax-MmgL~0|SQkarMaRyF@N7{okqLD8 z+(wWFIPHBK;lDOPnm{_1r4&|2~@%mWx-Xe>L!Y0%_^-`Je;KE zEvRGrGMQKqe9}2_$g3lwl-;}7**R~3RCk=MZ8szoSQv;LiB>Y$NpXW&he<77mWv5e zPWGO9XXV>?)5y8Hj@d6puD-W>_Q?6}?oqpTWn8#%{rZ!#G5IkJL}|UqB`3K$l>3?| zQLg*@t=9xjnp8k@scQ|{wKUw!IQ%hP?UD6ZHWOo(|F&g|$?~wUFUA%6(>oE0bs=JO z+s_N;A7rK2)?K{S%Pqh;nVkXPNrB9s zN#eaBTpo02H9hYcFU5lk*~HbIz)aMS;tIlh*K6GO(!z)`{$*h;|4

#>HVsI(x|B0GZ=?1@W5?U`>=4-P zjrJ&KO?KRgUeV-7acvga54)K-9kh#5;atIt-mN}#Nh)x33Ahw#`6hzK^+NV{Zk8Jt zB4_qkWB%mJK(FSLZzZ&{xv?nuO6Q5%zjg>J96hF8UC&0Pl-=mF|A&@Keey*&$ThpllLmqNN#O4gtw+Ht4$4g?E+K+(8* zQr})1rcHTzRw~`LeY;*vDhrP#S4C|hs$evR)vrM4WZ>RRI_MjvySQt1lqxYx%> z<6AUem%P5bTiNXnZT$UwU9Nb#*5X`ymlcnVZ?`pD_d_&$*K^2WGVd* z(RA`y%5@K0)b+gBUxP=;Ze`DAE*wyl0J4X3mzhHx09A%hKi^1RKCAA5?Ulv`%R0Z> z$psVp-+s6EOW2-)ck{vnX8rxlE=r}%)zmthEqf>`RlvW~^*o86Z7s7Cu}iQS@qAnc zGRv9CMZCtxhis3di^M19EPrA_$ z#0GjN(@>mr68&SbnM=Tt#5aEl$rZ3a)IsNliiJ6&&L8Xy4i2ce;gm8g-qp=5!Su%{ zE!+s-3)Gyv07i(=g^{IGdJ4LYC zEv#W*xIF9r7DvJ6M`gG4$W!cUiZaPH^{Q$%;fM;FfJ|qX}gGYh}|L=>#;zJg( zeCi>RvOXahEqL@u4B@oZbDNR;_p|l{m&p2ggQ#+YaE>}&aGkV#d4Db8>M)$k*>yL# z3q|j+x)9qRq*fes;Qymdi{E7_s%JFlbz(~$B&<#?8QfgBzTNlI!(^u)Dpi+waRh^; zeX6Zzr9bE_y*`_xS!9F1HH@6Dq~tZEEdH+zDd{hA2e$SJnLYIC6Wpm(HeZ+vhjO2b z(lnaQM}k9ll2-f%#(+NJbe74YZi<3>w2)klW8>|1*0>92uR=_mSVO_5;yT*P>dhS8;hFc|D;+m@YgZt#0z~!s7_8r-`SYnLUO7?9p0_T@xa+YsdF`h|Bmg}t8YBBlnAY@5 z*r0&}x9{BfR;D$!b>n@@IO)s9H_WD5e=jA(ZWudlh60z|a<8QO&~@z#Dg^1*o*jZ< zWqu#=mrKn04vd0za+(;-w-ajRF|V#;i8B-#SpZp{6LzxFPLhL!Vs5`zqS~z4UzzH+ z_2g{zFrpn>51u_sVhm5j|5z;uMc{mihs*0Zgu%8K8N@}=a`{sKtZb#ezs@pRT6K2m z{P`c>J=xiFYh$SvgQ7wLT0-`~X=)3u`rl5tz15QS!)Ic3VoTS5yAh5?We*y3!6UN99#PoF!tpJt%Q z6{((GwpeNS%$c1Enen;>{0`MZp~28YH?p&*5~)#27DegvM4jHMf1YwqJCc3nEricJ zts*bk$L?u8TQ=Xu#RpD?<||K07`GC9$U8m}^af~Htjwlxh%^amO4XM@QGm%h&3_$&&QwQ?(g6#R7RDzNN@{;DM?Yw!< z(bh8W0kpO8Rc1?W<$-iXqIMp;2$NU2m90@!fxW#g4wJ_xH_>te4NqDzTu;+%{hSWM zOJr8FuWT4<5hyC+>FUcm39)vfL6%iXEx@}Ynpu5A1xs6EeNf6mdMcgS?|J%q%ivq| zpX;h*YFf$$u`G2gW{BA8gH;TULeSz&0;RmaaUjn}+M#q;lP0hDiyY!h-_~^%jDcq` zko6;hkb~epi($@5MxgVs$(!!mz6FNwjD-V+vIvABzleiXVyCe<-oAf-^5jX>N3ge= z{8$MM0T(dPnmsUusc|JCAGpru>Q&I`|{$~y}b z=Xa0=mvLHZ5n9WRZD1NA2ej>k35Ug7yi`yAT04j;d;gkqXn0A?=Atj_BpEPz>{#4i z4D_PgVSBegdUgq2H!&Q_g+t<{FU32oV`__uZ4Lgg@2B(U*|WW!9QO8~^EfKyf*^=6 z;}jjTEe)%pH}W!{4!5xh1S97YPM_{?(d(G}(^tqp-JBYtdzUWD@c(l0y+~fUb*EB$ zaXc9vjVs_=$BtuNgz+TOE}&5I@eJp~W3dUii#mNqvPXR!Hncc1aTUEahNTB-(R#Rf zNN(7y(rPjSHOdHYZ%#(rjP-vQ^xv=nFM0M~57JKebaQe3vbm}(qsgYdt&W}%-4(Tk z2U-7HFd5=?#DiZ|CUFsjip~D3V}`6+hWDG-D&{6E`_AedBA;*aG6%4D4h!$e6LH)H zm-@M^_k|?1pFEqs?)&FHtW3DMo!h$)Yp`oHJ;UxxO1N_*r=%JK#gVw>5MNA9-tnPA z4|<#I6Or4V*)R9@?b%4VKy@Pi9D1Os_e@%O;hxWDfTt9v=$rF6*N7+z8Vn!RI2>)R(D@W`uHj(YAZsu{VA-ZK2RXUuC^ zowD!AjzO7XiR_WJGziuf;+=3k8tl=xch?4s9*nC5?rUBOYqr=M@fT~A zu~6bvJQmH|@e?M%h*QvxQ_ayiDSbKWRpv&^l75y6*}d{tRad4w|8l_S;uZ;UQF06y zd zYs`+zR$ZsSHJUb2S~E?oF>U5|>^diD#lgtPt|{Z@{eqTTw-wMagNv`LIA0aP45jkh zh#bVw-H>Sa)JYB=RSx3ul`xOY3|74lnzS(+4x!x7@~Z)e27VHc>u03@$#^Na+^D)y zjm!nfm7kqYmE`NY4^SJt&;17vdiHh~V++({&jBMaN$u+EPgvTiOv)$&*OSG;_w>oL zqJ6XeJSS=3=U=}~_;9!T-f_cTOH|i|j5>7mC|Zzlt61jY!JSqEM(thdknmboNs|u{ zm*#c5uc6_Grx$;Hps&1dnR333NC+;ji`a6iV)8d59kK&oCkMGlKGHARP2SY6=qjJ#c(?u4Zm@{=Ex@yMsm@qPHDTfx6LVy~*%C**4U$jFqWczNdaZRY+zE}7@-ex?C4mTp6p*=B7~XS2M8Sk37;E?wGZ<@qF9?bl~M#yXR* zXk9A{CoBZyF2A$Xr0VnMdhGnO{na|pYSuKZ*n0I&pT#Ykr>CVRytrgqHe53svb=t0Ou z$NYOgRt0DRFs$fUxVp&W(tpAL-#&hv|2^4q}w%x>SnZN8ZRGj ziA%?$UCfs4615Om%Sj83C=)Zi{mPHruZanB|I9PBtwVcTyknDhcnr5SBiGDKOfZlf zQx?{agqJZkGjkM&xxI`v6{M?I15X)UsrN>=O4f5L`w|}7Q~C5Z>2yUv8wwm?;<*J{ zyC%B28U)`W?4hIKhUR^F(bu!G{xqvBVVOPu7I7=B$+f*Di8g6Xl-hRe_>D~C?cFT$ z5%`tSC2OpC8#y{>r|AyTzo=Jve&TG58Axy$HwlQ`tJm+AUbzFEFD_nwi5FkqFG=?3 zmUl-E#hlMzm*M7yas5~QczEbkgNQveYYO&Iyg>Gm5ru~1S7Cra$PiOMG9=o9kc;#{`?hWSw&zXi7QDn-3%V#_l~QEN;@?35)Vd{)&tQBWj(Y zyHF|f#+lxm)6xc-6-?G_-I_W!%6)>d1pHF5FlQL`0&K?ZdA3g*i#>GD37O8o zfxj3o0|qQrGkm?4%#ZUz=F;=ACu9Grnu}Xt>hG1Igfzo%oE)DyLrd38w;oS}T9+LQ zXoeOfrfTeA>Mw|kU<`sx{YSEA8rCoDIrQD0$E6P~PcDf*{wf63qd-AZQa-|vfw5Q} zL1Tt2NVpFe8PWcV{vhuo&L?6ZS#;?0o5o=~Ru0`?O>^5HjT(^wZ`!)GRl^2Td)|yo zb6XU3e%MT=b-wraIK{fTA7Vl@ zkdB9@T{kQdwR-MTJZG`*0S!;P26y@oV%@%O{+w^c5n=PUycsr5XyP*6t-q^|w`$tB zVa}jgwTGD7vB5-Dp4OsMr^%U~`Sf9ctN5x)w||kDlV=XYMxT*yc+Il^RuG@0^Cn`f zNjAe$`ps}~xUs8$SG=-FU>?(vw^t#-1`Z`#8^4G>O|ImnfxduwZxo!*Z z-Qxz>braJ6)9WH;3dIt#MR7G@!rX5h;c=58gS%~=cTwCHpVw~K@WEdU2u^+uJA1U{ zi>al_X|K!6vxitYw0yTH)5+m<)tpoQ;EJ40uxLR)Vi6FiwzkKJb^8QK%;3kNPyIxym$)D)@IX$G}c8)SVC`DL|P&A#MHn{w+%YeHb zR7`#liU*zYwl?&hF0RHIvbwt&bFVce{fIl6r#h7hNh0AD2p1_ZlNLY_66pwl+!hLk?0RaCSb}vQo-b=W!c%~g{P#X z?q^hlrfu8UZr=c3Kr|d*05p-vNd9ZIX2@=lq5=R$6G zeSNELEx1|%5@9V`wP|DYvm*P}UXu^6rpxc|WXx$)lQvIrnLHcP#v)Ls)1ZpP91;WA zO2v<&-2~OzZRRi#U%W z2>I1lX9`jIb3wz%k2R#XiGG>XRJ1{TDGeHL95shy?&_+ksK<`Y=4QtnaB*p1vqSt) zM~h!P6CF40J*``{xO5TIn1;YhjlyFXcUv4{-v`TLlfgYOAIHqFDt4LJ*nMI(R2r<^zyI-=POBJ9 zIb2P;ZOPctX5Ir$DeB>+fHGcAC(Cr;TyiO=Et-Mwi=!f0D2q^{dzzFPmgz9i#!1KUQtg0SZRp{l0ves!4H^zXle^4RrX!!l;+EY&fb_&MD~N z1YSL!QqE@+!;7IoEju(*9_OtZ9y>qgqx_`sgfE&p`Osv)%& z=Mn?XW(>zt){hTom2u^@Ys%Lr_xg_eR1)Dc4eRQO+cvjMlR22_Bz6klqr}8>qC3U( zv8bpvgpL__1=ZmHl%uu~wIkK5?^(7on+OVL$Co%{CNp<%G|Rh-0~$V#?M$jfofO&6 zc^}vKH7R$reru{ISHu-(AL(S{&g$vzUK}*&T}_UXQjL{SDKqQ?N!@^tC{Okb9JBdF z(owZW>;5JdkK6jlc5|mkPu0AaP8+f9&kk*RdX8C?{2|s$Gf^(r?bC-QzGedKkQS)H z=VPB$hvFZgY67=?OlMQmZ_IG(Z){8nCJKGU;g1+PumNuO2KD_j1swKZAN&sKNT?G@i;u6b(C-69(lrp!+)(*Jgz?gQv8I}T(b@3z z-2vS2FrVOao9R5RxNzY@fO*Hd4(Oc@g8bd|BEKd`U?p-66XBK`WSEk56Ol4m`*Urd zM$XQ6pl|^8Qj9x&+C{U`(hVczQBBTN8ygvk<^k=LUKAxE!F%u5?oR*Bl|*DM{uLbP z8Fya;XBE6Gu-*aphaESF0Wt!G;_^eu#lyQUir;Tmke`;P$mlpkd+5G5?s(OSv2#7O z?5(X~5Br2zWPc8usE=_Jm(r^xHy0mwOy$UJcIwuA|E+qAzA)SUXM|?je(g(6p4**v zuG1db?spkoadd8@!3i>TC~|M#vW~eVfK2;*FuHa;EJI88vl$tfm1qvsQKn%zTiw5U z%9`<0E>oHy8|pIbSw);U;X@I)fUXT>Ts&@6BDi&<;6bDdlmT(7Tz7Sn$is7+igK>e z@z_}T-s@=Su<1!ScWyVa?IsBYYG{P47^^|bePRj`In(VcSJpKx*?n9I#I!W-fOERD z_xxX;UvE4VJaD%i^t7m`s!ol8%;9lw4q~8FP=3>Rd4L^}2fy@o&7Sq$^q*Sv)K6C* z1oKvA`ubZ+>q{P%KgyDC%xSl4V8C%y>7}=}J?Wcvt?%`}w{_l%iN(>Mo;^wPOFufP z=Y%wCXPiL0athD}_Gh>GuAu|BU(3tScfCrJyZob3by3Fw37RT>baY7Sa<==C^s}cj zC?xt18sto?6{h4OgzTiDoJxUE$ZhlV`9_kUsftu6l)W0gdB_TXe;mz-c$V~9Vpq&+7bkUA!GtC>V)ApG* zi8EHe|Lu#i-Wr3~2mZg8v6C4xl6dIX8nXhc8>ZM>QuGYkmNR4Ry?}*=`>JUO?PoS) ze^k`9&x7UzoJ2Nv6dkrfB|Sp~k`sSm(<@_114{)(4phiuj6g-Hj& z*|6F|*=>b=R*&xpJHoLS+v=Y6IbnF5uCGjXiiqCJCf+>w*WRX5?2sL|F2f{*y;T?b z6AFs}l4j;q(pg{vhzm!qScATbHR$%6#$~vK_lOZnq&mHxH!8&i?Aj_*34ehANI2AP zYT7BySb+^KZ@LHGaP*rOHsSE=S3Z45epwl0T4gxo&ow^=pKf^_QE>j1cfHD@=Xu~; zGGrA<&epEAPjdRU)6&{8+scg2fNBQOPMkDpUI{GTl9cx7Sh?-WUe;FDo8@yIUO;z1 zP>#Q_d|Yck^#RlEgXhhQr>H%1s2aTjwmO;j-dCmbNnJySarTXXo#iL(U&-kmZ zTK&+^&&kKsm^HVQr}BewGb94{k0IoegLU1%n5c`a1BXnvZ~qe1lYHjKjJpMrUEH{B z=qH-%X&&y`qsO-PgSKgFA(VRc3N@2IQ#BYJls1g96Dzmuyg`d%do8U~KW`K_*)ew1 zqjkH2#$B34gR3b$K?r`YUw6mz%PM$G%})K~Mk)_RdvvcjORs3X*(6o(U4ozU^P3mQ zEv8_=&!(rpuUi>kuUN!C8Z{&}CQr@!_Nq6@^XD;{?-08o%HKICjP4||R*NI&aAifE zm=kaj%I?p{e#G9&HG<6x_yX?_v4p)LihuqCIbpahHz!u(h#O|u+K!qp9a|)tpdpN=n=qu#n!pxuRsxz1b0>|0&=E2Pl7a3DEDRIS+T&CobLi{d4q}Y=p zFzXZr)m66HG1hg-lKqPGD)%*37~)<7(f;d<%%b!D#$>fYf`UsqV&7ULXAfK;sLkCA z$xi3}@1TCDS!A>1+=N9}Zr>J?s2Y_8U32Lzrbn7;WFLLroPWkO^vUO06te^C~_jE(6v zTy~N7;eW^gpxUszy?@+cUF26Fh(nI$;W)nH|@bd0hTI+EOk@YANzIu0FjG*J!4;`_`>Ehh`0B4Pq0nB)lH zjy^b=aAn=R`PZ7@jCK~Cx!KSzGlqCi(WWD4h}y_6H}fqfv�V}4A34Hx)=lU*3)U%Kg5j%21xLcPj zS;DYP$VrML#gb_#maHootAIYKwb&T|tFg^d<85lJS#DV1Up8pM`G zjiN^GODaQAF5ntg^R` zPSZ|9J!j9JVsCHBu053#b?|NG_es;HEhoMCy-9V{sFk*LFu``e_DUOPCKC(LK;A*1 z85S=lj2*iRS^}{MO+RE+#p@Kv5v=LW-C8Q4!TdEw1_ru#a<17X=BO`_#p&zl(2a)Y z+O`=dm2;G9t3}TaoJPgo)zrup!t9SahLN~0@ub{oWG2=)bb?spmsVWTcptNG`G#@8 z5kk;Ld4RkD8QpCy>Bny=s!-`QHMLf2qY=6$E<-cyZij{zdAbW_!&j{$|NaRpOqqp- z#`F@JW&J*VsBgBLwUgv!U7Xtkehdow@s+6d70_70)0&9DhB$7@lqZ#ySDwAc-g4=c z(bmIh9j(Z(qYSFL?0if$G?=fAJr50vzPC@Ap8da&v<|iRFQkm zv)G41-fGW4x&ZZzjq!(y6v}}LWl=DiI#MvQl#I~G`cXT(+WR z_GTDMUqI5{!=uQFuRMOHg~ix*xm(aDOlBJeek{9ZQrx^+h~9^ zxMj;_Z_j@~zt(KIBL>$uNFv0rSIS)Sx9&~CYV_ybDJ>18i{j152OIwXaQ7wbRBF-5QZYQwU7JLTSZhb+DuLI$HS+~ z4qdvlZc4Tzy}grB&(Jl{-P@pZBb^uI7GGEXLWcY@)+k3$N4IxBpDbUOUAM|+EiSNZ zpg;6eQTG+2*3j0|M^UvsBX}!?$YUBe`!CA0+uX5xs$NWr3`?7?j{>RN5*^!PK5E^#aFB^$bBpMsWdlTB&QG3-zs}^GagTXvdQPy;mY>ll7PJ&QXTfr^CrVkA?D!)m;hZp6D)a&$Mek}r zBQk&84q^;99wP)dH8tHxg?HwqMW0*Ic{e@1H~MxDZuaO?@oz05)=z`Qz^)DJ)}8Ws za#%>BwBwP68z%%Tul>Rg;V*hL*bP(@yM_q&Fqu`Vtg2fzoeRl7tw!GWOaIc(h1)gr zb6-_4n-b~ZxpUv3C}@{y$ygZ6dm)%L4A?fd>(HT@OS6vmY+@0TFhV999+bi`+?*NW z8l2x-U*ENFkRP6K)V85UBe^>87#yFBMT zzRN<`QD+b%lN&=4AT>N3Xto^*Uk5jhR0iCq~E4xpN@UUU~n@ScFQLhq;z7}ke`_`F0|{GIt3befN5GK%d$Jx1PO6 zg`1?1$tpJUvPSR%=a)gwjPnZXA*ElQscDV+rl6o@lo~Jgg`^9@w{6?DU%!7Bw*Mkb z|CXhch^e=@M*uC<&G>7cTr!H<(+f>1*MQ{ zamrIqh&gAuWj1o1B@N%q6r2bV;g?xWr{w1kF)XxrWcOen3-c&r`F3|qW+%k#j6#g+ zM2#Sft0wQLql&ZfDOZg zTp@duLJ{Da5W7?H?IU&o5h(WR5XD~IN;<$dOJYdKqxfLn3}{&R-D5El6@{uvXXNbJ z2WT=RQ(SYi2fB|6=R0fsR(X7RoAh|r=i2ifKJNP>WH=D)(Ffa;C%xJ9Azp#8>d09Ld$dMule!e;eW|dK))w zx?5EA81w{zFMpRh0gd@o?>>EsQ#L^ZBOe^&%W*yM_KeZ>$5Rv4+9D)b@fuPs@a+Y# zYf$R=)6A&=g8}G#iMuH_E?f$`f-u{^TaY-d-?&3{pZ<5bYy&m5fA;_%@zvPtPw9Y- zPCMRf<*DiC8N!9vw)f0`*}UMjJ(`Ys^=Rtmsr!v3m4hB+sa#e$W_3uWUUISjQFnKA z<`n8eT#%m~>nz1;XkN#Wb)CxwfqIz@b+}}K0b(LoAkHa$K;VRr9#3a^~ zj_Q4E&YQSA_HjCQ568tU390T=G3NWR`e@B!U;Qf>q zeEw&!hzB}!ET0&I{FGaIaj@V2O&nW+M-Da4?2^N@mb~+Lv{duuIOWjM0~8G5sp;KX zfLJd<%TwFa&=8~8dygJSVOh>WBoY1EPimRdJ`jjUTay1cdi*%fwZs_GGW1+R4Viv9ym`ZQ zBfOLC9UUS6Bq>Re_eNr+{uuYLefwt7LH%p9%(jD1sS-`bws)lzi_xRk;XO#UJXWpt z@NdPdZ91JO8#mr5Dgy9DRT4UZ+l*RdFZL4N-iD%%>K(rYKrj2ojcTF)5+6mO67V-- zSHr`ABH_KWqjcd!W#6`CX>hrCFQ$r4#c4MMNaJX6g)fiJV9&o~TTUW@2dxunC*=8B zQAo71v9x%UnYQHdENnl;>nu@V!%ND!GeBhsL(fI_1QJ}HrXnS2cIaR=)LxKMYTl}( zV7HZ+S`0pdxbWS_DjQRf4J=Z`ux;#MF!d4F^jyqA3JPp=G+>{h1q&#QviAu3(BgFH zl1E6fn8nUEV|T6aDpiu-r&_vQP>{zw59Kpk;0?^PDFmU+pBqk?}R>>>vL zk(4*=oL@DQ&)gR-gwaOfAePt)h-;%8VQ?dZWP(SmMtI|E!R_!W%UTFiHe#R z(KDMQX~lHFv0?SC;kdw#}fi&FJu(N7utzm-5c1OJZ_=)|lRatBw-^=sFHKH~9E zK#GgsLDk{sc>p!oeBQ8heZZ(3q?5b$T`irnzJC+T-`ziPmT$TgetlarP#+D%Zt|@U zvGxBjU|%|K-SO-2;loHZ5ZP?&Gz=e}ZB;!_w5(m^3eZa=`Yj`!_{FEF-zWbi56=x) z_UayxEigE$rypp(=X83BOK(laTR+fi^IM{kwn+K*99^AQjDth>&KX4+&osZ)ROHy& zHg2#Q)~dI)maZf{BT}HjH1D|md_=GN#rzZBMq&}qcj?;o88vtvtu8p0P(mIEj_y?MT*1WUk};))hk-zw`Cy_=Csn*F z9#<0^t3wAU4z+}T!}Tf1_w)ys;=_gOZu8AokSL+4b~oRN8E!Db-{J-MEu%|7RJL=T zC#8_Nnc4R}OEQa3%~fkPW%ESiKmTn!U3=t6&nj{a%lp|cKHzfASdoL|n>Y6i+Fpe| z6mg%fXZiEzX&61le|P>~MmR%<9d?B23`JM2xUs@-#Pd{{t=1prwhxlsc)>>xNa3gy8T-< zg_ZqR)pWSE#&6mz`KNkK4hw>e0xBxG`S-vdJA0hDQYefwV|513x#rVm&w{bDE(FWE z4jlM7b$NfCg*vy?X#k|XBs(R*d=~bl1wqtw=*srg%>Od#{(EnVu&`%tB^4nEoIOWr zn_1+=$}Pl*`C20kfJduIv4a`?gK_5&Yw&WVy8+9cy#B!>$Y; zdV+Q=#A|I8y|B_I`QBflU;1O`1kv%`+O*fv?9sxy~soC}yuE zmB{^~q5>`HeEM%?zi^Fgs!6+^l6I#VHLV)nUsoNvLS^;;2r=JO_#!7d>+?gu=FNaJ z+W)Qn%v?JDz`^I9n*j)^mX>sgh>Y}pQQ|h>Pwtb`Hs95g$C{=O*}7u@Ouu0@Cl5e> zk2|p^d13Efy~K>ef}bZ=E#{vlV&SHtp+U00b7z-N8twWirKmS*xclU9R;+yaFG=$u zg(kJZAXXKsxC z?40S;SFFR#%pbv%DNnvU3a(%EyCc+2+_<}If~$SZXaz_Pir4Pcso#HAfI)-jfR>-$ zcb7K(b?)2>`a8MmsiMAaSCOo(AvK)Sz2o@C0P3`hj3H5qT_F-=J-yDIFP4<7pfo>Q zuPaT%wg~AuhJv$z;=z-+{Q~T5yv|!%bjtl2y#p6jq1E$e#+F{V*na|Sw(k?!n{o4^Xe*f^+2o}XM z+5M)$wx0ij`GoMlsG>RR!$0Bm>WdG1#A=Bhqp3+%qS?NEZ;giSI&Ho;S{^xEHoV}! z$uCJIJS^-q{YvEJU=?E5tR6dYV)yx7xa!WDH2xh&Y!U1fBOql60+=;NB^7aT^sZgF z1w2h&CM}AC-M}pmwCAw$y1S!f!;SD2{V#pwgTMx%lPmsDUFP)+jVjDeqt+UQY5xyH zmjBu)W@5gN&5q-Xmeq{`U}tl{i4@QHBQz;=5$tF68mKT*ruMf|PdBM)3Ylp=xs8Lc zhbf3my>$4o@HW^-f*27|h$bRBD7m!alwk57XVqh{RovJl=hgh8ey{xz-yl^fZWLe$ zz0>~R^|`o^Npn_v2b11MQE~O(am#@Uj@?r$Qh8M=R)@ZGa<8(K#E3i}DH5;0m8!r(MZ|sE z(Hgh4cz|YHT zI`aJ?Bhr~9h02gx3!v`AbLp58ROUxo6zDps^+O*QdlIgUK7ah?{TNZtjcnZkgfJQx z*q-}WdNY}keSOzy+*~@Qg;kHT z%Dr3#xwT{LVFkIhX#V_ZGiO?Dx9-b-1@@j>a(Lxa{dU!{P;vl6m@NOIAiyQ zjP{qQ0a%?|3MQ+|pomwgd*TPmVqN)(h82gO6YS8T_XcQ4{z^|HPlG&yM-=7Ifl!-r zBxdjY&Ao5_S!zJG-%^B!opkNO5nQ4BjNU;0#aWr*3LmoFLszYsJ-ajCe+G2~9e4W} zmaVOu*|e`t`OS>e)u7MR%74u`Gf79|q`S{~zt+yJUxkb~@D60lYL9VFmqCl7Tfc2D zA7LRIzFCmjB_-eJsyoC8iGFSYzjZenw; z>$zhrHd07%!`}`XDk~XJ0D+XEqT{yU$Cl*$<&?pJvjO2#+jQcSN&^54;Y@1w_B_2B zmtqFc)q6TJ^1c}6$d!!d^m<}c2bb2x7yor#7})C6X4fHn+3v49U>=6%ApMf#`S$;~ z2l>yTe*^~7YEMba)}@oNaQ+2TyBHxV$dX{Ke7y(BVpp>M?I=cI&%j&IZd!LC-gG|V zj-LTA4sF!Z=&*lho`>S&Y? ziv^%gj=9cQ}wWt!{i z<`fm30Vk$+YfEP#G(2$g|1LDNSoGI`j8h(kdf3bQ?RfX`W4D;HeODh02>neRburnb z=)WA`A<3tXkPYw6R?I&oRvk`GzKacQw-%VAMH1;XZ}WTbsvm@6kSG!%g8xzx z{59K&CBycxZ z2PzZImMuqe+G87vu(Ih0g$?&8BaFGl&UR@n*JlgBM8oY~{A41P6oT5~C2&Xql7{~Y zDfDI4^FB>}=KkDi_F?{wy6USTO|jG%g=;JdME4iZpC_MwPDb$kh(Y-MN{_KpM4%RF58*w3mX`^7kRqN7x+2-Pmk z<62T6v?$Uq8pnESHp2HnbQf{z?vZrS%K36uWtT*GY*gvBn>+sUl!binej@1c&BN5F z@Skq;YlLFg;RBOlP{jOPUN-D(!K-_kf%t5a5I;*uNeOqVXsr?Y-ZOZi-ys-D*Ov5D z&rs|>*H(>kUa46d>gp`$ja?f;p)Qkq5!UW@c6N$Hj!H-7?^4^^f{YdD5=fbgO%QXS znzf?2FxCL=9hEsv&q(Fhn@o}SpfistD)fY{BkM_u8N753N0D!LNLjo`dGOEHUMDQd zHJ^0-)TjZ<2s&1*%($Op2EZpVeEVkbwV#JLgy7@2Qw`V#B2YY}o?qe)1lYb@^ zH~CHQOwzrcpAX#k{IhY7L~9HCVe*|Mxb45y7iY9Qsaxaw_}RP~SMQyBubUW!nT5Ib zh>jlBGPV5zzfqda2ejyRvDJY7H5*qiz0}>qYue>igXY{zSTIv*={1#B%e&VkOlfW# zZs*tFz=6QUF#p^Jzf#h&Lsvc{Gq= z%*m}Er6uhWoD9x#35Bm_Us@k`_;5~J$z|mN9m%B~H1TdOVwe%j=p<<_1I;o zDz$CduA$U614f`O7Iy z8f=>QqUnRaHD5|Joi}usHLLEZYqav~yJ0_`G~?YK1E)C$HDd(K8_>8P@3#l9#8Z|l zncfOV`~3#9S5FP7jF{#fJfvvW^L1@z`7^lT@GHAGcOvRp(l02G4~E+?*E zEC1st_}xCIB0JHN5@e<^qNGaQdwTG8cO8FwA}0!vwBzl{PS;!|-ck|uw>e$!4V zS;U6Kmat^Ti%LFn_lL=(4-5lKcDbnJR!&!BUn9xD0a)a1!IACWUNmm4G0ckWFU6+a zv5>OIvNu1zDkM9s2F)>4whl48Ly2+f%$Z@qzs~1N_qLFgis>_l506rvcWhIW21_#Q zo})1$f9GT>D=FcMs9R+4r(Vr^$0S5PeP`IW#LUYhm*r{6o|+5n7S?l9alMmAR@*zg67SiTj5-B^KtYTc|({?+^Os zjx8$MC|A|kc^w9OF~VkGpFR^+pC|H@(9=!(b!8UPG5UQkuop={y_>8_c)FNYzd_*M zo(>LxNd5+DI(ICrM^gSI*eAN5R@J}F^*W&44G6eCN4B<-cgJGP7pqBrmZ#@&@q5;a z-&4slgDHR~l5XtKlB@OV*An&{lyB%TC3RFFW>|!57^mW zwnPR!oxnwmTiE&fmdv0h)iY_C=$LNUkZDY5>{KQFY|=Cc7gASeYik|x z*#VDiR73IO-9;FtdrmxS6wf*ox@*^i10&Ut`(;`xo9~!(q;b=xlz!zUi{&9u`NxS# z$sRHS*1HZ1bQ0Y8LJKjK3ku3qm!``(zlh{Z2zYQS9CMqrH z_2)_vOnjM`WRH_Zo@CL41Ga4GQp8=G)%Dkhv~M_TMO9pFrD>}lv=}cbJXVN_kKXa` zuDLDUs;X?uwsLGfR+oO+I_S~Yhi`+vKq&-$xG@MRdBn7q`@WyB_k47|xS-&)XFAMK z?j^Mk8w`F-QrbR7Ib=2i?ZH3-OH$koC6{r3%}f__MOkj_vvb6+XL-;E+?jgx|@N%aj>{JvAWJy+Q=?{{W@n0IW_Ks5}J13f}`3~NazyXB@VMGBTX)*T~R4h#2&O?;t;5FER?4WN4j z<8LYA~J zr|I(SppEqlZB}YWHqgy8{B>r^Ac!-msrllY{H>oSAvZe3R(! z<=xeCJ4T*34nDT3I<<&v!1kAQ@g$Uj;fpd+U{gJ`nig2|(7&!S3NO6eqAXl*0mf$q z45-9)I%gPD9vj^b!S?Nw37;sDdKpR0eE9P42XwK8M@Di6ZA77Q-M7jR7ZdK;;?^6$_5uK?l>6J*2^frrX&_t&X0u(HRZohr7@1y zP1`N~_^kJu%j&$*Ue1~Gl(e1VdU`Ou1lx z)E0YTR~I$&I5CX1@D;WdT9Uz^Oy_Igeh=LX*RyNQkA;-~40yO=U9&ysgT0GytxZsA zIzg#oe0n-i8CQ4j8Q4b!)@dz>3qn>@Ti9-(=kzq4n|{+i{@u8rzSFssT8~zpNO5KX zKzjy2Q&oOC_U0-lrC#i{n&nvwIrU^~$mnc3+RdEkU>`JFZ%ppr8(a3&E9#Uwq19Vw z>*r)qlh1Ds30dC4ze~G@>izWe#s|E3+VrKQ2?m7}mtKq9*b!tI->{Uce)dcRC2E#j zf|8rDhLo_Bo%J2+5NlSftaSPIhl*bFz3_nV1TbtQsU9fwh!}JNwk$8Z%Me~UV%($Q zfjz?qX;_(P)H>U&tQ?;;%W>F{As0OBxaaud^{=yjB~DVQf8VKoiv0=yP3KmoziHF} zX-|T4R#0W3-cZ|L=dig?uB1-36S+$!Gz+q5964 zPb{wdHrH?5%(3NMwDmt9*E^l6wO(JQ*!2mmz~_jZQ<|^ z+bm+vmE4wvA15hI9;G~d5h|GVbjTLN0d!iez$P>3U9 zBhKw>ECMwB46`x98ShQ8&(40L%+dT(D33vFpOBr|ETLs_*Xq z_3;QdM|hv8abw3?e?IV^LwfHZSvl=oNhv9|GlWetl-DA$<#$BgHGoraLQO=jlOE7goR?Z#JSy@tL^srlHpEs)jHoa z<<$ifC+Fxg%hcGSkr`^5wBKOtgrP+ybQi_yMEdv@!#MceE?vXbM!zCW&K zu4vf!{$DPhE*ak)bCk!Av)(+}+%Gd>i!t>+$Lb*?Q)&l@Ku0eK{;5TH96;oT}RR-yW_U=%3~Vr`%`tb zu9@CRervWGpS;sqlv9)h-)!jppOq$oD zXU{zK>_bW1?;w5{&T={|NR$EDn>TN6c+ykU4dZF~uD{gj*E?)XR&kkDe$mOfc~hA8 zcdGw-4FI<=FYh%@Z*HHs3v?r<%?jxLrKsS6+bsVl>&T=ZK7Kq5M=;OSlP6E&H~fB3 zR^3D@Bw+^j{_;-ZS>~pKE#Lo6lRz;v$DftG+l@I^;&GskgNbDpEdm#_fvX zWb;A$zyIlk(}PAm$qEN0qR+5bnwkGZHIE{8S9m}%k|kFuJDI!tFOnLb^K4{$>G><} z@m$@UYu8?ol(RDC+FWV2V*W4x(ox%E2>yr9lR8dJEQFeQX2)RRY$e7@rFZ6)pT zeRXeRN5AsuGG0q`PcYSo|KzHgeNs#;J|DF-<8tn?2Nv&`r`&f&8XO2+KK*rcT(G{O zW--|LFyUqYjKlUYc!%;LBUHGMYICwXo({`?cE`d+9bqs}#>PZPS!(^3Z};fYBS?r0 z;N^TNTOTS}n2WN;xo2%1sPfA1h>g<(g<0IxqnY1p%r4C8M@;m4|8z7GNjJkw3)K>q zp_0RvLEQhcV`Ua6ku4(8Vpw4vP}SSVS;4Hw%u703TnFi`$nT5j^*<$*?soMz{eLHM zmQP>o54KM%gbWFlNt=%pRAFRcr&kCVNkn#2m*$DdU}W*A`EtAQk>q1yLnMm`tP9DM zQYmeyQKPiv*Gfo|9h10SGt{NFGslm|*X9Orfveov?oAg|528fq(b=FX-U~x zzxcCB)JlxL{E0CUyTqq?%a(^ayd(+sA)6q})jL4J^r7_JvP5`6Zrusv$GfVQ-|;nd zLU_x(BIL4sq4E^Rr0v^p(cY4U3g@5>*P^x< z3qx+74a=E}OE3+OWA?RgARm(f0zd`9L+vN-GcUe&?MOnxSn*JhI5%6IzAug$BIQq~ zIbiJAvA7`4yRmy&{jXJA6hWieh4Wi$YeSdOoqM@$V}E-(FwoZ#q{`1}%XbJNg~IhS zLZ(McMmd#1Mb+@UFbpRrSakofPnX&aHH95sq}zKW*sZwmh-iqVziG^*dD6Qjba?@< z7jh6ywkR9SgFIRBkHa2;?+5MVCdEbq z3XYDO>Xf3H(gGo}CP&QSRPL`6vY+BMd5P z2TUw4hFzbM#6*!X)M0(D=jGWvDiUOea{26V<+CSFoH(u&k+P^X@=Rb`qsr=A1qD77 zx`vWm4YQ#__$&l{W#1aewF*Q5c%o>5F#=*Mj!J)Nx*oB}+<~i#--MnBH6~cgVKP&kk#I*#K z%>a_v9z85c>ntgY+jQtq1~NvtTiU&k^tBDw<33#s>UeQs+D0T~Cyzs!O~!DCn}MuB zJQR3bh{nFolqTOI%EO8!H?p1Tr)}$?vL&Bnf_s-ztP9i7T*+qJZJh^5E2;)%$;g}I zM15`Sac=>zE&rtPNOsnkyRSb{reU;URs?1Q@l8-A85AN%nsn3H)1vqm@FSwU*hnxUB=y`Wj(~=uE zlF0bbKk?kn!+Guo{(5eKLmW)*LO0d&Ui7?-KXeEG{#?l-Y5c^AcC+?idK)f#w}2W4 z3_i@Ryg7I4IiDAFwQsovlKrN-n&vY%NosbQY?I(d%E4@O3gY}f?GuHPnLx#b#vdk7 zwUz^2G<#1utk?B0Ag-cH%C>3Ptl6~0LX!P3ncNY8trof;+GCn(_FNc=UeCHXsC1nD z{^=DG@JPFC-BrlvSSbqs2$^KQ#rv#igk#$I7YmuoX9!J-E|;yAr;*%7%j60`M@#}m zyjcC@$x^~IIbNd`7lMdkB)GqUr;>q~d%~~vI$@(FZ7-xlndX^Xy>|_X-ZTP7*kw=W zm!yK-oIN|8n9-0QD|mks?{3cdDlVVt)cSB|Os7=$g6AYxEbs>rGU`)lN7-s=wDjqy z#qS%N?}w_O4h^oo-ZMHn8bq)Zl?_8={*Kare;fdgMr7r_dC2_=s+dRySgfa z6l4Tm*qxgAN&7&`X1Tb;($L`Ro5Ha?uRHfJhX)%~CNbDXcg$@o_V3`S7C*d!LtbXL1Hn}m+jA7xj5iX}pA)HhLn3ZKT$U=1L= z>QebB1})Q|3)TuDB6ibgliSQPofS8A-TL*B;o%_g`68A6wTy3s(pP}QGgmbAUyKts zA``sGcW~c?z>xHM>&r=xlD*T!F1sTt*2L_&tLlG#;aBlt|NM=#`hw*UC9dHu$od|R ziFrsT3Xh%lg1mtw#@=!w4ir1d>6;TJCbVhS?%33$Usr2dw=(m4W1Uzi5`LNV>>Wj} zdi#M^_8~`}p~oVzWf#5Xub|3IZq)XSKr)Jp6-c=Bt{YUapRcd&`m&V+ROHs5yjss7uDKGaziOnu8zT=U~j$8cT4B+&H`?etJ-_yFXGRyDZidpnn?zkYF`KEJ$ksj$$_M+AUPElir3ZUOELArV5V~M@q|r$8U+~;a)d~_UWmc$ zWi}_>3&^66;3h>9VUu&?2EOJevHja`COfIYW?pzNq4{!S$z>Avx&8!Z^kK6Qeh1^# zZQN_AB#mfzgF)rM6euc%9=arLkr{r_TGFk*Z{F++_sLfcWlG7%0>lD#vQ-m2L~-$>$U@6t)kwjpC%hzfwW(`XpACFD&P?2s%M{OQ&rzPT0mlqt`I=pG9FNh0Z2RS z%8SW@irLZjA@eJ$ssfm3@1SCp%MAw~!L83-b?YVn7pG{C`^Sq>oB?;tJN9OqDy@A7 zhG@(GAfq*yOu48Rv1!I%N_J7ZcD<~r>8PoBm<^(uowE`=loo-CnqvvAa|e51la<`a z{1Bf?Tv_aXAG$o;R$ouOCbQiPyD|=>dhJ@TUP@BygFm*Z0+K!d<|kd1$-F=yD6wnc~kho*lH{L6q z>;N7^u1*`BxKgyFwrbo4KA}uRDZ^x2!_dxb|uq~hLC7+S>xCe z;X{J?DH~6b5lJ7G0orkqiHU)|dW|Dd_oDde(F=Ey($-SpOA5$#Ti3Vms}wJK`KcGe z?P7CoTwk)&gmiG`DP8;^@VTo9y|eNcBy7U#g&^MM!n z%5NG(`5bXqa90N8tpSYw?XO!fDjoym2GcvX-H1!!t4^mnrZA#c>nbFaW_VwmX!9rdUdb zgs}SqG0^%Q)O@(0PMO++X<0$S zp;AkV?`LQ@_0S!z@myXL`!W~Sk4VnuVt?*RB~Iy%JPx?HyN8~X3UQe2+5uNgEo01M z_lOnk&ODsL!U&&GxjUK&sH!$?*l>-J^q2A)8JO^GF&q-(QDxQ>IfSnZ6OR;n zxJkAmHzepdsN}Enen*Y?3`oS49)g~I`cyNb{QJ90%@}$pGzJS<1b`f}?{f@*$(Lf! zQH{6l6*Fm2;AhXRmOd|UcjhF{V#9G*$)#AWL(5SK^V4Z|WWx^qw|tA;tq#SH7M3Hj zgLUDyP%V`_cGm`xL)$AbV1wl(vTKMq#_m(;vgT>u#5*41J-*e|!7%rQ5-0mD;?v-Qu$tL6{{H@6%ZA=dVKsu74dv@~ z&=PEzi8Z-;E`A_o^LQeq22WgOGw&Oz4L}lwj1VrR5yPWH*WjTZwZJB0n$RXB=dg6okOwtUX(33k>y4`l6#QVpgU>LPN><~ za909Td;sB*%xFmiTsYHIhhcWHj=j`UfXJz1;xj4gfmp~82{|6w6ttXhddNZeSk~iJ zzUS~CMQpL)PM4egq=eSIq!26gn|?BzHq9BQl?x{%79uE#Vn;vgIw5;hua@N?d17T$ zEpC9KReF>rxaXcc470TNfxMFYd8%p!ntj4*J0`fmS8V6C`Tw#DU22fZFpp~}wHKKc z^xQtOQ;S8IOxpAqICSXHnMKVLX5pno#`F@q_)hjp@e6S#CKoueyyN;E;o;!HpH^H@ zm%n;mS-I@T*QKm#_@pDRDME;`gR_+kb}2B)RL^3=ZRV2xZ3@VU^hI?4blRkp(5PKQ zxuXxqi7P7@@zYA>KN4mUfBHD4w8c$-(h<0`mZz3H9%^QmA!59gpap9xMrpgXN|0d` z7c+F#x#LRD6VIM~K$8ojQp8L8Ks^)IzSh+Vc^gs3iRKpg50D=s9+mK9v=p&^zf};7 zDx0Dz9qU2Y4ZSh+6dFn{rYs7m*{+v=hf-%GvTfNm%19L|o;~ZDD0j%i<&A_0N|Sgq zARe_nH>gMI3eYKmNu4BB1GND4qBS;JmK`R}|8B#OX!C&NLx-4+4IpTHgTy&v$9pnD zstjKQl1%W}?ixh1dNyt$atkN4Y68+1AghM71DRgRuZ zP54M>1*&n0)Q$Js4tU~XO-4W*r|uGWj+Xq`#%70dD77bm)-3syM{s3=R=}{hRIz0Rd0X$N=@t;cvo3N+2`Gl?KeCze$m4OqT;* zIL?@H?aGzwoQDUzfpNQuw1;6yDZ&hOIEH*TuU>sli3w<7F7oh@<3s?EQ%g&Lwg`To zyYX&>GCSa(nSVL8ojl%Zu%>gg{A$2$jr$H&ilY z=Ufd>ui8oaHpRvj)D4p-O(F|4|C4QU)jhQYF%Drm+^CDi#OV}=FfjB^xk}lG8U8NR zfXHc7Et&wsQt>pib{R_^1gJzrAdG5JK@?Hdu@wkvH)fogv(E6d7zV}GX>E~M$hh_y zChAD7DFO7L9TFUfV^AkRv(GOzkL_Uv)c){cOg{rz{G<~_!ORdL9gmV(e;}OTP^gz^ z(d0E6Ux4o8O0DOTy-;pACfSn-e*jo`RaI3?RfJ_4rKrl+$|z^3+9dU>>>!jGUt4k3 zn+OWt@{q$xmk@QyHX6N^x;h4ZKzl5KjS)Abv$ON!F`FEP#lf7*G~IbTVE#H;KAPDp z7#3GkTG3m{YO10uGe_JR82J4+*RL-(Y`bSzaOU_pN4(eb8C|Fp`y2_vJx~{+!{pX* zOrp@w69(Q@YI~XTG?Ns9M@~nvMmyATrN|0yO4bL#g`p&koHDNq z2yt$BubCPuayR_juy~$ETwnke4145O9{7zRZXY3w=m(yu)G*_~!*k@7Ha2kC zm}Y^FzIwn2$v4~v{Z#8h?eNX5CV%ctxLX7^L9aPj8aOMD}NG5a$kC*#v zSmV$=DQ;?viI1f!BrTYxkkXN|B8;E_Z5>Nw!_6``!4qw@Ld~Yn>9hEByUG_?1&EZG zEI};WK*3^aX2um|p(boAPZ0R%nZA@k2$Qz=N`~LN7%EF==7J)r6j+*V*@WqR3@WZ+fO-1GokI*!#pEK2d zS;tle?f;{mlet)M)e&@VTP3+zud$Bk$Vkq^)q4sjb!1*AJITZK<{GA=VtzJOfZsb0Xbf z%D$p*6XTM~&H^(FfIoITk2_$W*tJU+R|eS;Y^MiAkZl3Axl<#8HRC0=Q|98uzM(sg z3Rq5w3>>SUC|7B3=sFfyO7NPT$1~{G*qVOTjxEUUUZ+NAA1 zw%ok!tvhzigqxlz#S486DQN2xbI1r@0M=E|_FGvQ0fuixZNo8O>DWr*>RQIe-)b2~ z!?AL9IqVW*vp~T!O6xyCA@CKf>}8E1(Jw$P--tFELnv&IdYh82x}w5Y!Me(?e5K#P zxZPH7^L+M6an`R^En9Z&JH=p8iE+TD7V_pcvre~i{=1&4*1swFh-e#yZJsh^2fICt zN8ly5e^~G=cDp^cNYIF6Rc_L~^^|pI78Xsim#u+5Z2HF^JM5t8!xp2K5E@PHx9bWX z>^P3dCj=TMMRsO@;Qu1*z2mw5_xJIqnW7?O70RX}N|ad%cL z%M2k!lwD@BA{i0MN=W>!r#k1n&*$^GeShb#v%Q|r=i_l7*LB^mJH#EWt(a82yP1^v zp#v7vC1DD10!qip4*%7wdz0_w2%RLT!LZJ2U_g+H5JVM-A!%{LTs2yytuZoAoB4LL zUxuvWnN72*F2xOCKn`clcmZ2M+S#gp=+Ie=0OJi7Y!D$1oE6FM&7+Rm1oKfMP6ksib*- zi4#RaYHtn|*Ee%Q&}7ft-QBRy^b(F=JY1?nGBX{Z z;4T#AIGh9-JB(v$R1^p)XasRVWG_xza}arNQ5M~?Eq5PsEuvk`nVgbRO_XNdVhVux zh19;X-9YQDOEUT#`fIS94;2-T-&5#yBh5b{ena;OzV3{r<&TO?GK2u<#wXt2qik|< zKDW*FoXfzuOIH?!?efQMIAr7wpQQs4LivdUq_~KSFVO0d9~Y4j6!2mW8{2tWuZd2; zynjBxRY5s+u7Qndpv&U|{EiHNe7=j#j)Hq1$066zHYZZ|L-=+8kAg+c5Lf~TxragXMYA4%Kn$pwCfvC4Es!}b$bHhN6vtq@%l z9Re>1A>o{n>*v^L-;U*eUUhZl!{T7C9u(GA8hf;TCt-TD+?^; zsd+rdl|d)=&#ANP;=3JeR#mp}~K$C=q7&nn(t+s4-ESLP`vW%$M?y> zJq|CXdBlG|U3^}C+Ur}#Bd2{Hk^1RJB1mSyIVqCl^q`Hy4w4aME+Fy%f4@#Xcvtdb zyo|nN>GyZ+n+p#OJ4pXAe@S7Bw#d*z%LM)-;*QO(7%$Go-qCVN4Wz=90lzP zBm!_XHKK<*fgq6aina7IaF+X;Z8w)C4-%B5Ol7yLHSl24of=0&0AuSKW@h*0R8~@P zN=!d~$yf5EOMd+2j}-%HGh*xPyk%>aMvj=&1}g}IHU*&&y}b`97``|dg}s2VfT&{} z)%vi3*%4P4!HArhai0GB%U1%O#8kDJxj9rYhUlbZckhP431T8mOlllP;w8I#f)7&} z4;W^EDN+KEF$AQJ6Vtz}WY_Jo+u++s-g}Ld`M-UQIsPSiTx-)~I-jhb+J8dnwy!pZ zSEf3AN~F!+J>W6(HY(=J&FeX^_6+ag_>tjZkzMnNfH?t(9)E&G-|wrdAKDvCQ{z^@ zKnK1ynA`BuB~)Z`?;tGuHabe`49PbQVOx#eH#Ea|)AJBocRe`5XW1n}RVsrH@m)`k zi7o{n*wj=+xhhfLD@Q80aGsVg0ntZ#&;f|?0^8p8ZdtvR*t%0^m(fd~JZt({%oLCX zN9Gr=W5#n6qftL~+(zs;ukMWeVrX!pI#}TWlx!#|Sl<9u&7o;zPGtDFG}pfuIciOBDL5$KcP9bwIVCj2nKAM5>X3J$B&?L{jhf?nT2 zjCiUrc;HCpLXzB1tfGqI@@l{d#?k`*$4k1|LP`c_u<-|SNtJ=2BUm(vLa!VtOACPabX_ty zaMmoSr5sH+DM2+vMxh68tJ8HNGnH^z#39H!-N(_ce|YY|g$zg;x`r+rW8#g3a=w;C ze&kS|xYM&Rh!E$3g9aT;ZPJPlUTVwlk9YXTJa}jzRew}zdDpLBKN`3ZdJ=r<^?;zH zmV42lY9Olk1UQ+T<`qE(&`La^bf><1=mSJx=oH1K5T$(^3-H39KmUa(InXO;ZLF?C z==!0h+^aS4!u_qEe(YLuxVzh};>w{%UE6uR2hSL`+*hG5Y+Ql47GRUQPcX@d&0RV6 zbKB)9GK(iMhHg8z&vNd)o=JLW(t0wNDy21JJwi)mrO@qKZpxjb~t;#XZM~klk54u=U(i=oBdK^vQ+-*Qz`3;R(rYM&2i&2A#dZl?ez7Y$hwYZp+>_g zwFaIEuKtOB47%`1D?R9KbiK2TcrFj?;wc+70p?RN6vG9d+ z$}`-Es+bD$NSNx@G%NvS#BtC>WetlGP#T;y$)tSU=;lUuK~yKu`TWK>5PrX^73w*J z`enR|c#2`nbhw{6pL1b4Lossb?8Tn>%aeELZ@D<0UuP%ni*+htZEh7TXGK94Hz5_#nvzJG@w1Thy`UlmBiP&fUAXxql2{S$=u=4{Krtt|>)YPgl5c#X=p!f?UdSKSK zw=k?qt6@n!T{AJrFzkqQiA0E9QIT(!?vl}Qg z;1ZgXGK6Ls+9W6rA*)@M1rVty3i`q#BX>IYtF1V2rTXAyv0bZg{oZfXCVhUu6ABnh zt)dlMFprsKL_RhN2jOH`=Au#?yq}m@ih>U}2^#VE#pkG=m7aR%nddR_&t1WA*{c*rHa9~a0u)kI(mF?d*Iy6 zf|}s@gn_(wz=KnlLM{(NPoSt!euIBEeF7i1B;Chw>=rc{uOHPrI!CP!THN#=S{`y?7$>_a0YhWYk1He`@Z4b6kE7{E{n3hh1R@NQ zhFickpnv%d`kaGshh;G-zR6e+VJFzraXUIXJ0Twz>e@OC~TO-pB?O-fj5GnZy zHdn`(K=t|Y*0l`agb;C|(Yb*J7EIr=WLxzKekpW}WICcSeFA5{mzK5b5umrAZNa+E z4^Ipb5G8bLE@Jz+#)BQA?ZKEqDJWXBx-5u+5p?2 zZb8F^GVmG18FRC%jK<>@QhL2{94 zYA4|s_q?D0a9R~uvR{BQ8)G&)DCpL!%z{b?N-*ua{2Vmx7$g7y^g*ANffw#e9UZ&3ZG+Ict_su` zpr$9J){FfGU_@+&)zPKsOJ&F)A=k%5{9VZtNYaIn{o@i|CGC8>yS;HJfFJI!sghPy zG-07AeSqBwXRxFC7+67+>+!Ud`qy!_KmspUNJ?&EzYf&{)( zfKAu4vEeG7MRN|qCE_?yk2RQ2aJ9EaQd;uLK*SgZKUEwIYo3F z5j8+msRG@ln@OV~Y%e`sD zNHb;NcDJuOkT=2Op8Qt$$mC~SK5Wg|Xl!tI@pRaMy%`27B9B4r$;*EPU5B!o{A;(N zAHwt!^e31c0u}k;v7Q6!8D{}Pg7RM za56u;nm%H1Yz)>|bCXxl^#aCz5=!NM2!lGddAp^h!TXrr$~F9k3<{m11b`AeDxR}s zLJSfsa!x3ZA~D}!@1Ftll@bQ{pbR2?gLqyTDPs)5?FRU>$M63@ty5t0$i%dJ%Jl0$ zlmWZJci+KKT%;oS1Jq}y#rlc(9#n@rIknKJ;@Vq7s)ADhaX`t`yFHd0snAQC)UK~7 z2KSBMi5Q^3OxQ+pz=z@Cu>(=u)2M^0*O}(vW)>P0yJx4Roi;X(CvPUHGKL#RSK%=P zpIYp(hiFp@UJFEYEb7f4aG5~x5#&q)2!j8rQNAZ?PEy`4yILm+YgVyf3)(IKuc-V8 z8Tdvxx2$4d&{<>T^Q*ImbacnAOA7!-icZad0KYA-Q(+3A z6p6Yf2dm4UKlgYONul!*A(V8$TRy_ROkyKKvjA2=!jpr#2sALQEL=yl#KU4G&N}ho z0-xUeaU3x;?UZ2osHJ9KF=jBvMa!(9<;u|Mf zYQ?kE$Um8xvMW#ieRH{^rc~w6sk**nQ;)yKZ@Tx``}i?Uu}Fw;oeModGeQ$!WF#12 zX=R0zPU@J#py&eehe|*kGsZ_YauM6=UC4J)*6T`lXCC`qL%+y$N^G-k09riSF0JZ>xkatS&bpeZM$~;glGys6V>&$PENvb5JWpY+cr-iA&ygmg!NV! z23c&tpj_XtqXy6@AfdDg6TU?dZseCYac$+I;|z90o<>H6e+rZU)eBeYAuPW%oiVT) zbvJ;f>Nl2>?U<~ot*JrM(~2MK$P-ggh|d+-vIW;=g^0^r49~&E1(Y4MOphOnv9Xl* zD4}b1#c9AG%2|5KW}=kZl!_wys?S0n4{GQHpGDad6vV|u9nl{5zSUbEP(&Al9>g?k zXfP#v8gisJ@{B!8sakSc+8z|`EUP33fXbKS2!8zd5ivDb{5{cd1tSAmsNwN<>}gJog*4J;S5L$ zbD*8T|7YTGHzdyIj&l>G680Ur*SUe^(rli~WQ;+piAc~W)h?T-by1O&2PmVPZa(+NU; z_VW#K)SbW<+EyXG^?3hEzkT}yx?}vyq#wAJV7SN+a1(Bq3_J?Om?Q@=erPoalXwNM zntZrJ9@W*w`#L{8bcFof*Rn1V1Vd}W(!%Nd`lg#v4!l`;dFc-yp7KK}=SroFAA_T> zXQfd4y)B#1N0Gt=M^#m|0$+0dHlwQ6hs>SAyz5s;*tRJVsyAIn@LZUWC67k>HyrsX z5c6-}T8a^+xuJ8>*qRGzT|0iNinEHOKXkCTEUGDxF=1rWmFgA#PutcL4Ub5Z!oZtk zTZw13UWNBST(;cLMTaT^#dJ&}_Bk!BrzIm<%-og)3s(f8&j;8cwh#7R5YIoNv}KKH z3!W>e0<3=9VXxmS0QzEFegZU@7Y3k zUi^G`ZI}<$0h+Bw`Lok$X)x$-ry}@I(Q(oFugyPl8H7FrK4=Cuy= z*VHC%Zi}LV0x7*l!2)0tO8V6+SN49!!3WZwnUQe_Qy96q{XCob^N;u{K)4NDciqPZ z;_tH}%tu#cn^!_t2PezA*A$8G5tOu1+#_xLB#(=%#a9^^YvJm~q!SWWfE7W+oK7Mt z$Q6(%@xL{v)kCEBx|PD0djrT}c=EyX44zn z1eh2^w97Z75+)+7U|oo(#)Qf0wQI$Ng+F~plLFZ_@)-WUrk2)#pP31N0}vI|q|V+T z6ur0lhLzD$N~~F$|4;%WIrz~^aTa?2-aXt7ZN^(W8e%@jd7uUi@gk&G%ikD2%$^8H za3i&+@eT99unA1oDpVAEln?W^)?>17{I4?jPM>+P|M@RGcbc_>~1oYX!?5HskQ=kH#E3LbA& z9%90aVno9Yw1Yq|7p4-Ha0p9tQNO?wz~rST`7xXUJxl@ZgZE|Is)iDji6|kav>Q5Z zX;`A(Bj+dbDV0`0xA3m2%2Zs>x(=Tkvyo*>r!s@ppGR-& z+EFT}b|>pY#i1B!Ru4KQ4IEd3^Y=8}%?91`oIR)({7;PZW$0&r21zx#gT=5MIjfz~ z_Z_wbYEF92+^0z=1%Cj*U=;fa|Cv3k@O0ahO!Eh~#qi8@M3;XES^13K+A}oD+?eav z*!A=6%oIa7WQ4CO8Ap8UnpVJl1#`7#{DvU6Y>a{^*EwxAX-?OQe1k9nPBqvirMo@Xmbcj z7JIQilnwUzNh~RMtexRPy<8o?MoEzjiaW>?Mu~C3iOI=H%*LSw1q(;|o8hhGzU*}n zfDL9R$*+*7u+5xEd{f2C#LgZa6;+{2_*TneDiN~5ienPT;UfTzjy=otTCx2^pk@I# zbrIGrY%*v@eTa)mIN{X^G&l#IgJLuuX}QPw$}b<(>^O zFHKc%cE8hY)&1RNr1x6orn^8x`G*J_X*qXyte5sU>LwWvK?Kq~wDFG-GkVa)+->1j z@QmhxG;0y`^c<5JR7|MR|Hej~pCGsV@jrQw--)QXVh&pcE?|W}*7bSMtzI6OqdhojP z!rDcV)PaRa`XoKor$WaMgxnuMu7}v*Ej|~3fnq^73=8o~dM~(phi)LJzcJd^qz3&T z7B?*Un<@lZQ@z5>e|2C`MD+r%X@@_vDgs0K-obA17t`U*nP_F<_69xNYvkirSPiM8 zRgctogHsds3sVJi+R$n&R&Y6hO$p?ome}sIIF*3*s8m&X-By!Ll<$V?nw2-bqPQep ze=U~hyzr^|!kZzU9)1f4Yo_kAF|6fQ5Orlady8I6z-XjiDn5 z@_`eNC_4?WtjqW1xZy1xQN7!3I627V!YAj7cgLPrYVl+`QBlZBZ`l$g|8RHjm)~Ug zK{-F%jFv@a4~Cv}f%-(;vWeSJfRzZC&E{+e+y#-HzYw*HDH1g%ldTP6O+F01&`3Hk z;loH=7KoEDqoQD6FZpu~1B0ux^X6+I(99!UEhl`aV&H@ZK&cwqtMIpsQCuDbf%RDrqU7_V*5Cf0<$tJU!B$d0SKP#vy$zK8_C|KYwoc zB;9t`Mm^+*t~)-t&_Za=qenHEC07Uz2{A5m6%pA2auWE@jzeo8z=3FqE|{8z26C!Z z+H`}ZSEU)peNasFQuB1{ zt$?*nR$Z^huW~T8?IU)t!xKwE9ef5u1!OF;PR4xALK;E*KwOEsSUA1g^@ngo){BNk zni$P<%V`CE&6{ULT|J7!N z-!Q{|Ph56pWSKtfVL zIV#u-k{Put>W@tWa0LV=1C?n$ldlafNEryDc44&v?agBQ6O*b2!jMJfJ-K#G&%gL1?excFvsNh42w6FGH477 z$@Y74=gcpSD~B8xW*Jp~KcN`Nk2<_6ROk5dH}AP+9C;-qLZt-<&;VTIo!ccSXa#yG zc^q9nmRMb{c-6&TM(d}_w_!0;SOgHU$@6pRV;{7C+IRvjMQH)XLr@#AH7gH~392Q1 z{Q~pKHAe?y!$vR@7P14%HUn7sSN9amqUC}~jbgYvFbdcud8s&iPl}30ioz}dqd@f6 z?;Qx+d-!kz&=ypzF}vn^T8TgnnNuyrmp zvh5mq<6G4h-@k>hS~=D6^^Ti>yD5*?+4!4b5_JqT+JGzj z2;#=Z?4qI$h;V-0r@XjVLM&V>=1uCAvTu}SbXS(dMC}TguVh_knf>4g1k1^3yH|}@ zJ8cr6MNCr|T|j!or5dP#t}rnzZ@JI>Toe4cB&Ms&DA+CdB1Pj;h-7Hh*t#3KX)5U&6d_WR}Rk({+IjtWq&~ly2 zM@X2Hm4xp8^k}Y~3DwPlB|DD`Mz}c*6}dJ)_o(;r9QxWg%h&n)0L}DI_R?IV{ByD~ zg@|{ROAI;1#hz$_QTlc@Bh`fs`&e2EoH=~t2!w)b#~gBoF9E)WLLk+|&3En2w-FO( zc|Y|$4_<1Qn>&*>0W7W79rxAdJsUu)*|eYNfo`%VX5r6?*ZJ8&qYKTxz_8TBW~DR19K(c-&u<#Nhc zwPp=BVkclpZB8E~AoK?=&d%dB{HA7Vn|EQUNmtmT)z{J)m6H@|=j#+DlnP`&ecE*( zRXn;e>DklByyJ?yKCn79@)@t39{*txOB2FSS5srAEqYi-Cl`Z+NbWTQ&H;Os_2Nc2 zqjF`Swm`#w2bN55l~2F_)}LwX7kklOdgT!^-X6rl06di(Jh+ojAXXPR53K5>Bl+rcSfs0yHXKIGk;Eo!50ufCyRh;S^siq6EApG%pdqlVmhi#^3~eMAkc zSp~}BBxLIN$KAWy0AbLC1G0zHg91_~#;f`H_)k)JF!+Y;aT%-we1r(8W*Fy0H&sAYzz|CNm2>;#g)gA6H&R)imY3= z4)KEjiP`3k`gWZ%HosP~LRn9$#l1W|)r#JO4?~Za&-v#)9)_@9ZAiG6O(Vr*uK(@8 z(_bEILOW{;x88Hu@=I}D|FgMInLe12a!oQ37SN1RfaNAY9+()wP5=uhu0GtlZQD5) z7kB_nmqNnv5(*Ejk?xNtbGA~>O~u#$x&1W@MNMg%U7el3P~$JqRW>$;bw48g)VT++ zT?-_A#sWr!SBhT;>UJu0(~Q;Y&qSa)ndSWid6Q5CM@edMaIXKFGA{UZzeB*!p)BzC zjr`q1>}yq(bC_5Xwd8yjJ#lC?Qo<1dnw@dFaBX+*L?1R7mG3bLf@xI&nDdo#t*6$>7pt6FPaKCYnWu}`7}j0Cdg^Gi;x%6iaT zeWd3Z)}@3PK0kK`OM2MOySaVLvtx@Hgf^C3-j}2%At;zyT)cp+g^;sj44clND3D}U z{{w&cnZ532@Tyr-CK#fY4|mb-yBBr~^ULs#56B*w>RTf)D*Ka(<5P7>vYhzESL2_0 zllC4smAs20JUEd!vw72|-e)Dhx4!J=DD4lsa0tD1A?q1zRYN&|`9=U^PrnhGYSz|6 zB+U2sybt`T8m)E~o-Q$#jM=jL)XrcFqdna{F20?n=Tik_qq=K#893-)F3#Hts_l9u zb?_u09K6;K`fqMpD}KSHls?;~-_0v64U>hKj=qKC#TZvU3P-->oSnLwT$iM)Tk-KN zTdW4U!?%aAg9CFUn8-nA5NpSTHXP0tRwt-@3(J~{+K-Ax_ALr6jOUqa<_pdjc$+n~ zsCNa^63Ls|D|xmiaAR8tNQjQMww9Gv0%i&AA6i;KN|LMeHn4MZ!$6_*jg*vBb-&8C z+j!*|oS(Y6`Pe%6IyqP2_FBtfom8$p{H0S;EU{6AjpbdCjG05A!oU(QLAzYq`c;6F zwXD58H@jxN_X?(^?6Y6y?=9|&JfhJQFHgh1wp#TtF?~NXII#H zj99*Uwe&J(b0_#=IW$qww*dW+Izh3{c5YQz``3Y{k%sq4b<|S4P6OWLA7i@Swcfwu)4$E>>@2i*1i`7|GkDNI8&o)=!9miA+63U$z6 z4F*tGoPk@=zP<(>w1C$6z*bOuk#o}^dig(YR%e@ofcKD9C%l7}U+zO4CaKL8+6!78 zZz@Wzd}>HZiby>KYd%^9EkZvNREM_;FRC`;(;Adz^Eh81Rt6@s_ObMQu#FfwU@Y0}c`{s1916jEF=e}_+AdHTd z*0kvCbGxANg{8uFWJmaHqut7RPnc$8<(_>9du6Ck5=wdkPu}sj;rcn-U(xgI+d&38 zI^L}lvXp9?2#^x;)DqjuR`N+R?%3>n!J^I1+-<3QQY#ep$;#RJGXAr%hM|@;l?yZqftOIMTj*UpT7rJ&%;^46@DMAUztcwVHyqnWn5U;t8>Ta{Zrhk>gpJ<7mS;u*#7Nv^#pz&*ItK&u33+-Y{NeC`Qo-G zU8^229=-8=)4n^Qqd>n-U8FPBS>%sKTYE`5?NGwe+4 z+K*Dr1}^~6ktYd?pK5xC&K~0+Gn-dPP(dJt=xUx6c%`@+Dh`~>96fQR=3pSx08{K) zk^@-pTb(G{?0mMx)5=(OF8!fo%#$1YKBU~~{^+sTw@>e81yB2!qG)1CC6PM7qq`L> zy#TNnq?kI_*)X`8!e=An$-vVK0edl5Xws0@wKcmSXT}Bn+_=MWQ%lPf`9nRI@rt1a zDv(Tw+O@I>>?IY|;zN-mFSeQ!)IYxHxeW#GmvkBCwal#oOEMucYkKH(YT)KVKSg zg5L)GzQEi~*m2F>zNPN}T79br;mgneYnG~cAJMm&Z2K<>OJ4t5%yw;V7~&HYk#=YFfwX)a*XwI=#`qE7H_2yS&a`x5``^wOw4PqP zL{XPK>2P~ZNizHXlIny>`co%p{}ywPG9El2p(LPWMaUXZ3ZO0mJ%A#+_I=H3#XDG_ zz7}Tjo^#GBDsM=k8vx?(U4;>ko4ntFj)%itcCj)hUenUj$g|YX`X^r*B2+{3dh(pC z?>6Mci#W~}fzMYErKR8!!YOWi%bKP=I6|0a{f`F^z9G}^G=7J#nXPW9v9rCV<59w$ zk?RFROqtXdXD>>dGo@vmdTR+63yezKsvTGruvtJLKzG=|YroHF>E)EwU(yPSHw4QLqO<7L6bWKkM zTP_{&TaYetFs`q!Pmr{{j)_Ff{(xqIBZA7~+(*-u9yLy#PDct<**0uYN*B`?y$168xqF=p&sEZQJq8?zGIPt!m`8`2?Z}1khKLrFp&lGC9*NR1&M$FWejG#&`zKXY`+kURU77J#@!WUQN4! zmGC_k{)FpEr870bE>XSyR46kgJKL#L|JBs@{q|k%YhsS3iT!_|UFQ%b(WFDyitS;6 zJhJd`Q&J-I1ixsisgWj42rfv6hK8JMFahLJ^e%?d53MmKIb1Qbv@Je1RwEW(Mxc%x z1^9!Ni*_oTr^iH)5mL$3bsE)r`-ApUeL;b-ZtoglOKbfHx63-gz?|rn-)+BRPT=*6 z-%5LeiW{847mN2}xMl$d)jhQ=p~ zNgOp&(9Ss@Uhc80e~SOHP@#PFcv$^qo6!G$6&jx)thU%kycMXsm32w!)|K0p@%6`| zcgDv5zF2LMGvxn%N4V2Bcb|HSvzI@{MD^FqE3-`?DFE9*PvwX-r~1E;mi}he*RxNlBj^r0_jW$N4R8MOPE`5zggEw8cdF04!%Ha_x}Z=! zqyDa*o7Pl^e}r~~D~b;R_NM~jd#N28*eq^HY^`7U<2UQabZ?Id!HsXc`gd7Wg%$~N zS7G+(O&}3_Fj@rI&I99ZFV>utui4UE3?$8YJ5O=kCZkuU{*9!mRRa9rlb#ow+za$< zA+5M(>A{mH_8&4f>Oq@I~u@Ifi#OhX7NUnr4?%$fK zJ3nSg|C!70!%O#Sgas7(iB062um~sTM6!-p(~~GL!;?fs6g2Y6dZtEdyY}v8Zb}Ia zQEBUJSTTG{?Zf`v!mfKvi^<2$-hfpVnmH=bQD6Ky6`Aa|&KJCJj|lnv(zO_hhm310 zCU^c)A~yZGDu1hxs+|{vZ+_J0^&A5A4sp-%jkax{EYb`OpK#PJENH8>SqO`X zAaX!%!J2Qm^J5!^m1p0o@x+FOZ3l^g!pwH1^u?>PWQ=G?IM11NWQu%Ej*qRZSrO?3 z;uU?M+fzAeoln`}*S3mj2i18gXUkiXJGQhu?zQUgUiH246r7EdoTQwsx&H=(&HPeA za~C2eFN7~e7!V$t33Fb9UHUf%=m-hZ@U3N62mF`et^=*(&oaSmJ$�dT)>Y`>EL+ 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π+1T0k3^!kaP78}kAYY(G!nHPX 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

)nWDaFhGYO| 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⪻?)upyH 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 Y(e_RSO8D!#FyfB}8;v$3uiNAIzu{cjVE_OC literal 0 HcmV?d00001 diff --git a/docs/uml-source/ArchitectureDiagram.puml b/docs/uml-source/ArchitectureDiagram.puml new file mode 100644 index 0000000000..89af83641b --- /dev/null +++ b/docs/uml-source/ArchitectureDiagram.puml @@ -0,0 +1,22 @@ +@startuml + +node "BigPP" { + [UI] + [Parser] + [Command] + [DataStorage] + [Menu] +} + +[User] -> [UI] +[UI] -> [Parser] +[Parser] --> [Command] +[Command] --> [Menu] +[Menu] -left-> [User] +[Command] --> [DataStorage] +[DataStorage] -left-> [Menu] +[Resources] -right-> [DataStorage] +[UserJson] <--> [DataStorage] + + +@enduml \ No newline at end of file diff --git a/docs/uml-source/PcDiagram.puml b/docs/uml-source/PcDiagram.puml new file mode 100644 index 0000000000..c3e291d939 --- /dev/null +++ b/docs/uml-source/PcDiagram.puml @@ -0,0 +1,202 @@ +@startuml + + +class PC { + - name: String + - isPrebuilt: Boolean + - cpu: CPU + - cpuCooler: CPUCooler + - gpu: GPU + - motherboard: Motherboard + - ram: RAM + - storage: Storage + - psu: PSU + - chassis: Chassis + - budget: int + + PC(name: String, isPrebuilt: Boolean) + + PC(pcCopy: PC) + + setChassis(chassis: Chassis): void + + setCpu(cpu: CPU): void + + setCpuCooler(cpuCooler: CPUCooler): void + + setGpu(gpu: GPU): void + + setMotherboard(motherboard: Motherboard): void + + setRam(ram: RAM): void + + setStorage(storage: Storage): void + + setPsu(psu: PSU): void + + setComponent(component: Component): void + + setNullComponent(componentType: String): void + + getCpu(): CPU + + getCpuCooler(): CPUCooler + + getGpu(): GPU + + getMotherboard(): Motherboard + + getRam(): RAM + + getStorage(): Storage + + getPsu(): PSU + + getChassis(): Chassis + + getComponent(componentName: String): Component + + setName(name: String): void + + setBudget(budget: int): void + + getName(): String + + getIsPreBuilt(): boolean + + getBudget(): int + + getBudgetString(): String +} + +class Component { + -name: String + -brand: String + -price: float + +getName(): String + +getBrand(): String + +getPrice(): float + +setName(name: String): void + +setBrand(brand: String): void + +setPrice(price: float): void + +toString(): String +} + +class CPU { + -cores: int + -threads: int + -baseClock: float + -boostClock: float + -power: float + -socket: String + +COMPONENT_STRING: String = "CPU_TYPE" + +getCores(): int + +getThreads(): int + +getBaseClock(): float + +getBoostClock(): float + +getPower(): float + +getSocket(): String + +setCores(cores: int): void + +setThreads(threads: int): void + +setBaseClock(baseClock: float): void + +setBoostClock(boostClock: float): void + +setPower(power: float): void + +setSocket(socket: String): void + +toString(): String +} +class Chassis { + -size: String + + +Chassis(name: String, brand: String, + price: float, size: String) + +getSize(): String + +setSize(size: String): void + +toString(): String +} +class CPUCooler { + -rpm: int + -noise: float + -power: float + + {static} COMPONENT_STRING: String + + +CPUCooler(name: String, brand: String, + price: float, rpm: int, noise: float, power: float) + +getRpm(): int + +getNoise(): float + +getPower(): float + +setRpm(rpm: int): void + +setNoise(noise: float): void + +setPower(power: float): void + +toString(): String +} +class GPU { + - power: float + - size: String + + + GPU(name: String, brand: String, + price: float, power: float, size: String) + + getPower(): float + + getSize(): String + + setPower(power: float): void + + setSize(size: String): void + + toString(): String +} + +class Motherboard { + - formFactor: String + - socket: String + - power: float + + Motherboard(name: String, brand: String, + price: float, formFactor: String, socket: String, power: float) + + getFormFactor(): String + + setFormFactor(formFactor: String): void + + getSocket(): String + + setSocket(socket: String): void + + getPower(): float + + setPower(power: float): void + + toString(): String +} +class RAM { + - memory: int + - sticks: int + - speed: int + - power: float + + RAM(name: String, brand: String, + price: float, memory: int, sticks: int, speed: int, power: float) + + getMemory(): int + + setMemory(memory: int): void + + getSticks(): int + + setSticks(sticks: int): void + + getSpeed(): int + + setSpeed(speed: int): void + + getPower(): float + + setPower(power: float): void + + toString(): String +} +class Storage { + - size: int + - type: String + - power: float + + Storage(name: String, brand: String, + price: float, size: int, type: String, power: float) + + getSize(): int + + setSize(size: int): void + + getType(): String + + setType(type: String): void + + getPower(): float + + setPower(power: float): void + + toString(): String +} +class PSU { + - power: float + - size: String + + PSU(name: String, brand: String, + price: float, power: float, size: String) + + getPower(): float + + setPower(power: float): void + + getSize(): String + + setSize(size: String): void + + toString(): String +} + +class Chassis { + - size: String + + Chassis(name: String, brand: String, + price: float, size: String) + + getSize(): String + + setSize(size: String): void + + toString(): String +} + +PC --> CPU +PC --> CPUCooler +PC --> GPU +PC --> Motherboard +PC --> RAM +PC --> Storage +PC --> PSU +PC --> Chassis +Component <|-up- CPU +Component <|-up- RAM +Component <|-up- Motherboard +Component <|-up- CPUCooler +Component <|-up- GPU +Component <|-up- Storage +Component <|-up- PSU +Component <|-up- Chassis + +@enduml From 360bfd7db8846d6650bbe4e6caecc0d2da77dd3f Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 23 Mar 2023 16:57:21 +0800 Subject: [PATCH 190/420] Add author tag --- .../bigpp/command/buildercommand/BuilderUnselectCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java index c14a42bb2d..5afd0f464f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderUnselectCommand.java @@ -11,6 +11,7 @@ public BuilderUnselectCommand(String arguments) { setArguments(arguments); } + //@@author Ryujikjs /** * Change the Component of the PC to null * @return component removed message From 76e926eb57cceb1566b9efcd3ae7184cea2390fa Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 23 Mar 2023 16:57:37 +0800 Subject: [PATCH 191/420] Change architecture diagram to be more clear --- docs/uml-pictures/ArchitectureDiagram.png | Bin 16046 -> 16897 bytes docs/uml-source/ArchitectureDiagram.puml | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/docs/uml-pictures/ArchitectureDiagram.png b/docs/uml-pictures/ArchitectureDiagram.png index 4e0e1e67fef81c37d163619deda8758e0deb523e..f18779fc7f6d0b504a45f378143ea1785c279956 100644 GIT binary patch literal 16897 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

D)Be(@ADGZx%nfh;c2`j1VEKipyko-fUD;M@n) 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 diff --git a/docs/uml-source/ArchitectureDiagram.puml b/docs/uml-source/ArchitectureDiagram.puml index 89af83641b..0a935bbacc 100644 --- a/docs/uml-source/ArchitectureDiagram.puml +++ b/docs/uml-source/ArchitectureDiagram.puml @@ -8,6 +8,10 @@ node "BigPP" { [Menu] } +actor User +database Resources +file UserJson + [User] -> [UI] [UI] -> [Parser] [Parser] --> [Command] From 58bf3d0e0d5885ddf05422e2e4af1b18e0322411 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 23 Mar 2023 17:23:00 +0800 Subject: [PATCH 192/420] Update UML diagram for PC class --- docs/uml-pictures/PcDiagram.png | Bin 278595 -> 264558 bytes docs/uml-source/PcDiagram.puml | 8 -------- 2 files changed, 8 deletions(-) diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 81cb787e588626b4b2fc8bf906f0f665c26a6a13..7a5ffe5e607a3633bbecb1690805dfdabf95e977 100644 GIT binary patch literal 264558 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�Ws)?100zv%SAn~Ca7 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⩔(fuJJL}-lIhFzgV2Jf_XH|7~=mgPz+@N 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

)YEg5fOpx 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
!LzngDAexw6$^!5)5Cc$w`A)%O7CsG#)#qOH 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

yGV$VKP@k}IyvsPPcfZ78`e0@6((VFm8_}bl_ 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̒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

#>HVsI(x|B0GZ=?1@W5?U`>=4-P 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�V}4A34Hx)=lU*3)U%Kg5j%21xLcPj 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�dT)>Y`>EL+ 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π+1T0k3^!kaP78}kAYY(G!nHPX zNWB1~<8KNHcZB@U&CE75k&i2n!ax(wY-rFW_kKY1wKSk5akinAXl`U=Tn`>Zsp^5e zPu=OrI8NhEDW2&(Wv;tCkwcA1?Ok2oXq^-pgWyDopA7X?tj}xB$*sqnoZf=nfm^e) zNE4lVgWd(*(VyC+Qv?9;Ln=3_c|zn<`2WLidBq$> zNREE|{3zeJ&#gZW#47&1vk5#Ue}k`Y#W!vG9%G^^>|tnF4|`JT=-F8J{t6$_uhBQSN`9vd2RG>P1z;WZM$!Mvof2Km zrnALsabH;pYm!z}5kS2H9Xe7@qW|>5koE^i_!mj3Me=o7LEpM^0QXzOpCP~;QKYck z3yuD^H0wMI$4NjEq>?KvIEL?EL* zE{e~j?G~U>92GPeT>l5^`v(UL{c%FzGc8&TF04Xcs{4^uni~Vdbou5o=yHXvO1#F< z;+S7Ewtncdp{3c44*qy%=H?h!wyX^a3cB69eli~K0%w7=YkD1hT&GslX_(_p9t=le z9%$$73H`^z3ieB0>Tdo&Ia%0rSHJ0-Bx#Uz=D#)GsCf|0Cj4pXm88WB$F$1K+PcyA z1hUC6cupzDh$5EjCq}&+x&)16`p_CQ(73fl^H08hL{;TSC2{2qtO1hJu5Au_fVp2?WG!}20 zV=fgP-d{9GIMXJs(YkeveMinQ^oZERV6=y~7LbB#=c|^>*};^yDeq)NX+|&ewrW>t z`gg1bdTcnT37q2d&>X>MhD#Y7kVbmTdV70QBn?9T8(tX?l{+^Vmr;^p#FjVy9DpNX z1J?$5S97yn-cBA_8>47VEvK~ei;1v~F6<63k1>io(rYrki+_#@ zJM9{|zJ|#HMvs$@fyW;VpI~RxDl&Z`yIOk{rva7gTco2M{yN$(r}yhZ_&=~Q|ENOf zpXBoy-k+)3wUtXnlz-J|bGqs!G0nZLqO!I0DT6~pi?4wnTv^k)Z58Dr69T{4jD(~m z+yh%5SdJC#t##E2vc; zA8B&PoL}AYnQoOs5l`SGJ+}B8RH_q68ZYT;^y^j%FpyLE03ji}361Bo7cV>!M39)6 z2&#Hm`u*mdEs1jdaIua(XpN4K-bavNW-+~-XJ+jK3MFdLB-46L=0PEE`g+mjDp`S7 zZ(tq)tmMQ_G=S3|R~WWhG+&szU&zZv^INpRi&)^*(?1Sq*QRF)xCzGtX8fz~j+jqo^*Up)7mT3X{A4hNt+J^#Cf;Jumq2!-o&^6u#4Gxi@c~Nd<;2PA1#ods@6? z8QFV$cL>(Kv9YmXVNBd&56Ua9!9UsT5Q9UJt>N&P42%~-VoP=tR7xC$`U z&Xb@98t2afw_hR!DCqd4_C^017sWd{YjF+xM~m$~&9otC^KWjPXj#^ea;!4o>KVc+ zumerk^~=R1B6lo=4_tQ%){$Jj z`g^0>X)VWxOaWOH;`AQFBfA7eR^FUnA1?}6Xy0>;RUT$im2>qINoI z_u=~SvY&VDt6%i4rr(Io;Zhl^$d!o2Go&3gBQzl(NM-Eno#Z5Ba@Fhm#Bc66h?@+A z<(BW=r{6yRiyy`GHQpGQ2T|Ml93!Ne&P7I?s^oX@~VBNK!4&4IM2vNw8Igk`SRkC?Ual4 z3FOY?JJd0@_wGu}V@Ml(<3scf30|waxgUB97NV&i$bM{_yRBrjb6I{t^7kK3Ev*|r zckS$z?tGYTd(R`o@g!Rpj`aWaK2KZE!WVPy`y(O6=(2SZKi6g`>`tz`Yklt2?sS$I z=~#QV3)Q~kprJxrB%-ISt-iH&t@SR0vt~wdDyfX}TC>%HW)~_IY2+j0xV8ouStJaH z{#tO8<>g>;vTC&l>Mt_eFc-ioAmBOlqv;0uiGHpp9b>dVhB$#U!~P9@U08b!H6K|Z z>dFuFK--#LG>ClQsc}-z@+J@hp-rAoT-UO+3Phh1+@?^kEbx`9uZN0r(X(XmZi*BB z_iG8-cCTJ>y|C=p$mB+9JKZDD^O6Y3jriV?8~rKQ3^=xJLyFbWcV-@0d81`NKDxne zRxwAI`uwXqlE6Oe(?cs09v!%`WA&3HT(r1M#4&HKvdz@R>LGr=$Ipe<0sI0mysPNXq zn+my=??S^2r_6y^b}aXa^gopT%E_->)id-|Dm8nm52qIBi!C|L|7FF#Pk=`L6pc)h zBS%3m+QyJ@SKiG3$1 z=>@;IbqouTkaV(lZTyS%KSzbaHh;L0v(EkDcQ9CTOU9WRS;o<4zYC2%AQjZ`IxO+< ziDhHrf8SG|u_We}wktBYrTjB=K(THCbh{WIACKa~x$AAla6hPd;4)##Ge%uQIIUtg zuxYmC8x@YdZv)vcNAkJJqHCMAmSulwjQqCW2Eu`;GhC(k^f?J8#SST3&tH_oN3^7w zjtE9F&8czGYK2L$)O^muqs%93b@g#krFVs3_QL#QwHiq1K_Hh4yKeh>BZ|`jWu=?lpzM70<$9jLve8^4m z9)Bd@7AfkHX86Az;q04%3Q8m2pw5=Fa}u9x<}6dcrXh?_Sx)N)z48aRn^B}ZoJgI` z*Jf@*u#bq~oYl|G;amujt4WM^H%nAXCLG`hih;(ICqXet5n;AxDn25zI$m}Y*E?i# zyxY7Q`lhd{QH%JVUivl^!m#uwoE}YoOc-_DKcjL<`Gm)wJu9M+*1NZ8;TlF;4O(ZP zq!uZN4yYn{Q}cYF_ndWr1oPd#iTQkclYkCPJG12{dMl`CU_IjK9rw;}x>BtBdoXA( z1zb7Ap`>iRKpe`Qte51$Wd-SJ9Lvb5FJF4mDsBD$} z7lZ|RlSdQSxU`m~-n;j$z3k@{sF)RcmN#FZGQntdrb{qtEn-VBum`4IyMKSj{}@xE@Vol&u|X`E!R z{}(BBhDFzEqu=Ex0j2#mL?z#TP0-eAwzurt>>Ojy*B!0r#Lz8q_p+Xw0+L{F?hpDa zhMLX%|9o>*Jp)mvJ6Fgutr7Q0Z~MSX%YW}LxDABPOykQlL?EkZ)LJMr^!4@Sk{bK` zD)LNEZQsuA46eZJk00+~Xm9p|YczJ`*wkGCgTXXFL`VTU(iw!~B^ zt8LQM{cEbMn-+M0UzuRz%{X$v#bpFCmA#+G#417LIX#tQ+fpPDX&`k+xt#%TP<0S3{@+dD_vX}ny zdw1>P`?2ySgW>?kt9X9*(W4Q!3+*DCp8Y*JDiQ0Kkc1UqzlVJN1gKgA7|$VkEwU5u86vNKi5 z@0dE42d}E2515qoNguqyN=rY8!5b>Z_=74Je@zF^wC_dC4=z0a>!)8evGzQ;M&FHm?kW&N#nCpJ zgvUC}l{VDV^dcuFCnKjC1}_|deJQ{(V;F3Kr~=y+B8Ei#nw z{5l;020!rTkWyY>m|O$M2tpi?Ly~}$+___MW2Z*UFw5hU!&+`waHt$Z+h83oSO4?- zf$jL5uB80z9&CM+wvQgHMM4q8(C_5vnC^JCTQd5P?Hp%a77!>u#0hKyibm5mgGhqW*4Ad>lXrwI1tb!}^#HR<0re}e z4H6MKzc>n=UpUWR51d6L*j6d42Hc@iJPimDa+Foval?Y^=7ABhU2e^-+8-0DU!^fP zX6580t=(sgC~WX#v5U~3vQ(urUE4Pf@5EF8ng)xi7zn`)arOLMtxY+eCja~Wgst=| zKRK|pfy@vxmqxbAr_))O{+@%Up@M*QU5zkyB_VeW$8})bsOEE=d63VrWlhPp8s?D-nW;?hbP{D?#7nrcLEN>W;j~b$CnO^$o_65dA1 zRY`xoZ-A2jV`vP%jwXrc?3q)ZYtFECL6ct$F`=RWJW;TfNk4)6Z2?+VG6Go(wjOWNER(*c( z8<%$D*AWbfGs7!tbMuHUqX70R}Vi5y5fvRj&|Q9SETK!DcrQVhD|&tLT$J{T`VSEG}rc<9Q*QX!YVhj zjB~S}V#@d4eqSe#FU>?F2vCdrG6G=EyCzty{OORL8(AJp_#g(k8MQgLd^zSh4W61H z5!;naE<5)zefkbec`}mfVIo5s#rSQb4)?cio8cFK4c=+7XO5KPF>BNv@EQT-QkZ-n z+ku`!C`?B{HJ(?PVi8#;12t&K+^N@W0(HF?Ip;2zU6h7c^dHpaf_wS-(c*OjrVJvX zL>^A_z6uS&8BRVvx!n`s-2ittBzVmBW_p|He_(W>u*`Ek^7WE5e*+s`$E zVZ+2ORy%w4hxSxhbI0cV9=pIjHPdJB>(Dy-xo8JZ!;#v&G~Ps`jU{mpVck~?_1>Ls zmcYs2Zm@v=k_Y~=z!aU^yHX%1kcIz*xPWMvKLy4Go5?RB^rOvCU@{9W4^av`U zWJo)laK4$VYP0EcseGjv=^b1)4w1Q(Ve`o64FMXeX#szWkrGVUVmzgyYJyUu_T>wY z$EB4AAIk*s9v{Wz)?mrBm=i}#b=cY2QB}5?^x5idx3)g?MVj7|hCZA`dIe_mZ?t_t zQmcd~;e38-rSFfgv1cA-pHXvJ@?AkIxlZ@L0spM82wJR=9UY-aYkbzzV|-^3n4ch= zp!}YTh{zCASK55sclXU5*VzbNTC;;j)6Z$TXpE2@TB}y?SWNxB-0c2Xyc6kpPC&ek z{L~2RU6rt3r(S&@9p+T5gtz6sG2goX5!7*^FWcH2i}<3~cvpP{a;{D~uUBL$Zi#Kj zFBzn!Ba`O(hmG|8CUqthTif8??xqxfPeRADB)M=z@lJDd zbN6v%{GM>RTIycrWr_4b&H1NFjd+?j8B-nCDgSw7n*--}GP;$0jT0;&;oEGg$I|BN zi0o1}U6-fi+%8L$JK3M@)HN1|bU>pZb2}qW<#t@H%P^3DC#n+%5JK)FNQPB~szl5w ze{}P!PP~-dYHF%6MS9xB!p@ zArY&u@cGxCYFfMh1JCqfupCTB5qXuLxKb zbX0?uvbyWpt~W_e=pU9~J-cZ-m|eH?R?4{=w+5EZuhY2p$xLPzxi+kMZ$V~*c8Z^$ z9}Uhx&D={iP!2K5X;C*esm=Ky?D3Ey6EpK;$VZVeA>T1EFW~c}NWndQ{{d7OPxHl%i|*OMk?<+j=vdmcMx@Y3#?af-=^p1iz#-x0(zzn^DBpEfpr z3i~Mi=(QKWygsjHoG7PpYs%r5{^i+PBx{wQCG1eV+2d3sXQitToLja*e$OKo@s_wO zt21joTPed|sJZiq{mj*}!wIJJmrGn-F28ii#6Kx2 zk9O{wL&`4pyHM)`J*Vs+iIS<(v@=yS`^) zb$yz*PEpJw8;(Nr^aR>hA`O3zpKi|1sosi7@vc$JE2XG!F&p;e?>#H2RzoiB_bfiU zB{KPt#X6N0zgB|^aqmyGKk+rYLH|S6q-<#x<&`Cn;Bx>8%y$uY(QnHFb=G&kXUNA* zW~GwU?Hum=S&nZB7&Y5g_(;i|BPfA)aP?j7$(6P82jB5@UKzNS+Cg6@x6n5e3L#5; ziZz90jccVmAEY%UJW0;7IqQ9$XC%IPDCaPTr+~})z?NJ3mro0wdauTJEce}&v|KJa z#T&NqE}yF|ZaVIYa7X8b0iRuErN)}Hn5nX?G;9tj8wnLaVBq=llJlowD|3`i%8gfk z8lI*M1IiHhVqw|$Hh63nwDa-~oBKyso@!k>EPNxxd6Tqs#4-*Q$3!%u;r@Ahi0>di z9?JYb1&XTL?&%kJYlT~?7_d)*Q$%oR^}*aydhx(vkS~xI+6cHwj#y#MGtDUs4$U+) zG>|>^c~GKXG|Xds+deK8>9l$DqN~f04VpKt+Ex)ZE3|t z{Z#-rqfT+vp&1WVUAb~U#=T~adEp>w`Euz^rgZr^S$FOn0TUa90qvEW@}LC5y4o?x z$4ypr-swTTYLM~ex>cUy1SuRT_NJz`#(cu0Rp@eR&rbCgK}5?h;`GZv~=-blnkr-iA3^ zrZ{9VE5B%WrNiiDg)sGCus@(;Mo8Gx#5J!8^M|GvIjz!RjeZSC4ft|pbzdyuYj#MH z-4WGwhIvJ}{A)QV;$WZ4Tlok3sEOukUcgvTys(mXXVz*_-TH_9l_+ zvbQLsQZ6DRWQ54xij2&Zy~&;tsYo_u%l11ib>Gi@Kkxf{|AKOz=lT5}$7jCq{cY*< zulJKb-t_*8wi9&x2d29&;JM|psd-M*@`E;6#pqVyB=lb>H6R(^R8%zSLvHGmPnz58 zFUQQjvu(<%#-^%i8y<3wHv=?=p31`YoU6N2VLQjC4zJUrXu6L3tc+50{X5|bpDJdZ z@8m8oARcxdOcRVBK743=GBfPQy8ry`^u0t(>p11n>q)Am)X(Myb2nmiz%rA+t6|*? z5D6;>$1hD)gkp=T2KebfLSe})E+PVl=~ZddW5{6%iH!7Jn?f5QZ6q(%NW4Fv`4Sv4 zR~YCIU~}U9se?W__5Hh|&07TV)LBNOXf9h0f5`(Vt_%4*fiHRgrwPQfOPtbaqPeTK z(UnemE1C#C^ZK6U-*P2XX!s4id-p23;zV2&#ZfAg6Z78akduzx@9(Oxa(RtaKN6l4 z{~~MXjQZk^5|(BljK9;9CEAUb*%s=GpY_OkfMDfG`=oj{ zt_>Bi5HK?kM0Ww$%M_9eED;KYXtz&)xHG8AAny~=E1>4GMG1>z5IVsIP$8B=XGo`j zsq-jeLzh~CPJ-F%{aHj`rkmjTgNSjfcay|IgQzH?ql}=?X|DgDj~-=&{>ug zs&~Tah|)R!YQkYa7?)}iYt`YkdFgL4g>KcQ=52SAKcOjpz*6^@_g97n=uVO!P+NBD z{oSn|^NMsJ)2XEBAG(3ECc-W|qkiHS7K9I;Lm%fQCDgV&yf8R0;3HnLE ztrjxlvr&4fGM%>7I^W$%@#B){!&w7oEw0`;`z23dX!<}jhx|4+cwM!j8Q+Y#;-AXN zTh=Q+V=AA4ndmE?xqg3$^A8n!cOs+EjKUbDcTiv`b0U}USV=e?viI@hBO&IC;BogY z1qP{NW@qfg|MS5;0&^y6;tI>9rx85;Rv)G|k4fu%xc+vs9=vT3P{Mrq?W&b>!w~yG z^A-Owvu?JDBgw3NRrPCt-AVc$d+*x@S|u{4Ajw02OZ}BN6GvhUVG;Rwe74vvPDp_sEH#`B`dwyrob4e64lXtk$UA2i$#9C{63c# zG;`WoE_kPV|4t{#RMFGW(5{}I7XeyBZ*i1!&f?=+`&!tOtSCjdCcBK~3WKdUwo6Ii zSc?X@+Hgu{#qe|NkC$w}U;pqISIgb6ZY`+r`x`{r%3vekO+iFy2!Ej=koL(CB!@;98t7MM3=43&lkK?iAUvW~uUKgxIi=WzYexo6Ek z<jM9Oq?zZCX3?d#@+T8FBCQopCW`+*7H^d3O_Tm;LaHs)$oPYMTTdbH&DVwc z0FWIWt@;u*!_fpZaaC*Hakm^8r)yN`aNbHwzm`>dI(GWy4flw1@{7U?B}d`FFSp2KxihHI;o_ z0_9`#cGqVZfG{LF=tfj zH;iw8pMm`RzLzIk51XPZ>X4+u^0q`85ZVBwhQkmjC>G1Zng5W`O5)Grdc{M_{v3RC ztU~`n7!d7@3HYaJe5VqWBb1E!{hi}O&#JBm4vsJ4r25)%Z@KEexu4p7%U`7*Ux%U9 zN9bjHJa5*?kJs-7Gf#dPp6Xs_MjhTwe0`+4gN*_tYRAbc4^p$W54Q8#*d!h}o=f}L z>#%b1w{|#_I7anEOuLlXfTF@gP?#s|I*-!`=HMpUO;8L6xkLHR`uDrolMgzPXh z1;*)bU;RS$8xcj4&jeX^4s@u`Z+mJnQ|10tlLZmuQ?RSR9COvoOr}-Ez#wj6{WWx7 zy#Ddy-Q+m}0s!Z;T>O44EnWXtw$0AP=yClwj}PK2@tN(AD}F(U^@ z@K1B=WR6Rz^r2gF5bBDl@|SZUk6z~X0vmE+7RV-jm2q?5BC49B6GDJOU;rj-Xo;#M zN>YaR0LJV;1`zQP;2O-pp9no2F$p>cDJCs8aO_ zj4giO)%#@ei{?wbPXm$f!NeqJLIc%T{D__XDf;ohpl7n28e2ND9{v8;OzZ>Q ziMMYDam~OgX5rnm5aeH z*#Sb7d2%a^Ye3<|hvJC-B*cPeiT{cqqrTXR_k`d;-nYuj%1OGiN{%!!D(F| z6ybh&eQ|pL);{0lTq9z5H;WPypDVwfb-A!G1nF}ix$D}J+A`6ZhtaDoorPPAlT214 z32)8{$R?af5B%e8GprlGpPM^ z!2Xp)zk@e=J|Q+kT_kz4va~~W+Z`I2-7Bd|-2?28ygNwB-?vXocOLMNA zfyPbHKjhn&I|63Fq~zmjdKD!EQ`+OgUW_d@>ohZmbK?2m zrv-?qpk5c;_vd6#SxQ4sq+867r`Kql5bF7Dv7IJ3y- z8E=h<&;7&hE}R}SkU_?mIr*J|*jf4LaU8N@z_D#2U#HIKkh`++hwJs!z-vl#78DfZ1@$XtAdQ2}Ov|SGiOD(0;HtSX2Yg2+rvPK9 zE%zv&h`%)T#87Bcy5dIs;NntjM9$z@L=V z)H063Mc6sqE&&F#orse~W80 zBiQ1+ohU5RGf@jnEr)xXOxHkU$eUnry)Q}B32p`pu`=jc-QN*XR&_*WW)j^A`W*m} zKwrD_$?0RUImbQ#svt%e{-<1d3ZGcM9_O*TqlN~a$vK@Nr15E>RQ{0ys|rywO79#_ zh3a4*4GMWS^j!p7jOZ>`GN$m&$|Y39?Ue8{K>fUF6DdIJiOTA{kl|sZQD|-SMqn#)aYL~BEVG|PN!c6#t ziG#z#UP`kqq}+bxg+0%Zl_SWkwjn5TSXUE0KGWf{ItZ_?y~3g!{ttCtukwKagw_&# z#YIK8Ap{MkXvi0>1W(OK`F8%@FsuKaFaL5%orZD^gs3CPp2*;fhql;yD$OQW^5~0W zaf@<`>0euVBlGS@y6AQ*@U(GG4rR-6IRnrsV;&R|7u|%vQ)X4=WU!KP*rj zM^}jeX1X3)a-io}y_L5+1HBi6t)%ECh^1ERe$jVk>{4&PtvF@smDj%nmuV}lXH%N8 z{1w=haJ?k*IVn>$T^sFG>iw_d6;716t_^#;yHUpDf3g;yc*%L3WlnKp0O_qK3StPF z<`Zl3%s6=nDusataTt%X$g^CQ`Uob3eD?;o0iigJNkA9qIF*z)Rg?Jr(ghvAj;599 zl5J>svYK|-h=XI(R_PaJcWUmpTcD_Vd;`lW986QLzEOU#SP~GoyLo~h>;OvBEg2u( zI3@D`yniwWE9H?g`?woU&O!1>Me#ot_fLXn{h0^tznQs7B&+Jl_`Y1qk$Y*Tqf372 zHPJ0n%c%9263fJn6enW*U+Ms@5g`HQ43n6jg3CQ*pEDPyIF?_xSc-Xxr)G)!sl=4jY){gxJ2X8@sq z!5cOPx$VH%STX~y12$~6$BIA|1^TU^V%I1hVq;1}C>($6fB?W|O`p{d^m|Gs`}(ix|50fm5T39M`zm@j@+ zZr3f1Mi{Cdab)wQ(;tJYrsE{x=)KDwd@bWC*^b}(gWKFi!Q5Q%vOucL3KO|eKU@Ce z$M;mSIzy~Pnj7Y|W@?Sba=6 z&Eun?A+>e1pEEnqJE&-C5}cjZPLV+C&7mffh1bKNOq#VEf*#7O2L&8N6Mo2|k23YgeVd2M zYmx7Mh#OOca{kbSf{6;#&HVSlG7#b73$l7~#G_LY2v|@Gm7mM^CKVUEfVbMtE@$C+ zW1&i&X0#jWqGKt|g$p*;zIHcBDhbq`FOS>HZxUG}L=~|DDy6CmFs7ph2CnAE?{Vq8 z3rSjs=4$2`!}Ehu%;5vH)u&mF(Od&he_vp~LR-eAvNo=KM!gu@Nb=9eY#5tj_D~b}Bg5MUkxwpOqp)8mLlWjd0?^hDVcH>FYCB^=n@J%mHoPkufh6c;#ySxKrIX z?v-9t1X_V7Pq=t_p(C))eKxeBX&PKRvT%GuaY7MTyd8J_2BLsF3gf?AUd3c|e^Kxn zZ#js_Q2SaS+@SD6ZldR>M^}t?Nq|6LS5ds^<2XgVr2C9o+WZ?(Uys=oO6F5Gf@d7U zJ|HxDeE|#OVmU*v3VX(CtlD8 zT?u#?i$q{rTBW4XFEupKZQeGhqJK$pCr3!ygQADpk(H&(K`D+yqjHm^NwaMW(~`VP z?a6IM#tIeEueVnqr=YFmW6zJYguovDeAhzFJU=7J_?VcO zwt4ZVRD%AUAmTV2G=j*Aw^(7|p6o?B(&97yFY40WeFH>lSbdN+J^^Q9^8vU<}k#loz8inN&WhK2YLZ4wGmge zwbLOr1Gu;`zP}z*4?!wCCHy1ae>|iXgAke9g>ll^BqAFM6hO~4Uf0nzGTH?%rLeIz z2~1S`FwO4G0V1^bouOj6m0eu3|JH!yFogKR2DWyk$95s{vc7E(0l{WvE!<)P)HKK7 z6mvi7f4p@stWpvz7jtuV>>$@7atKmKwg|*7%b!C}#@qVthpB9oUSmMV7uU4({(5L9 z&3v1t{tppa=N5s9U6OM8LdQ=J%fRsqZ?rIVP4(88^|Q2fITh+r$)C|kDlx(xoh5lh z;1f3_GGU{Bn(+Q=aV%xoBTw-HlgMjNBy|(%FX7LHV{59k{*R~ENhXf)-X1Y@e{Sr? zqQNH;Z`$TDz)h;lB(})P3WQ-rm{g?^|2Jnb}Cqbmoet=FBXx z%AhOR^$+8QYahVzY5)eI>jzSM5}%EnY2tfhxbvMhnb!YaJUxr8?Gy`YJ_bFWC)$c| z+30l%F&>^}AV~*WV7-FiVawIs*!_t|6e1Gu?Zm6RlT3-GwU1UAjZwK@;oZx|~0AVZSNQIZExo zk;n?N7*Rgq9=#DQ(jOlkX@k_;<8O`zh+e7C-sM6fkubEuBF6U3Fg^{xkyZM;U${`= zozE=W0?srm!cyA;GPNRS72kftv?S8fCOYxh>q#)hpOkpZRdW&N7$t>d!cVy0ViK9p zVzAHBli0O2W-MSI$i|XC7{aR^>pIWopBO5s zk_Alz0HQb9TbK@{w=|r_nm%)h_7>$QKI9_Kh%3)6lRX2+Q7@fv7xpg*^xGAXkaTr< zc3#wpfSGjqGy8r&tGOc;pyf!vAcNtxbLD9|Fmni)H{d*2Bu0_ZY zvg?AKAEoOK3fez7=uZ+2liea&zM<1^`^u&_NfhpKn3qr`s1H_enV6&$7xOC>Sa9Qo7%xiXPqbVG2?4o_MHaA-Lb)a< z!{YS%@wXDsO*<+Y0XYBx42sQq({JohcWW))Q+}I+It2(&o@5^Y)Ry8(VxRiwWzyE+jmbp^Zw_GX;+;mr>~m6c55T*Y#Q{TbtV<;+`ZNdH%s2m z6C;$!EJMtJ#^au&NW_1iPt?zmuB~hCa0x&n5~atn5;)mS#)Murjg=@xnu^gyR3HPbJQ{4*JooZMT7Dk3U-@F<6 z^eKfX-xjr~xOgOl&$;Bk{rEV^8Y3?+52k7N*I0&$q$&Orl}tyKS7L&5=0}W}Xv*{q z3?PF~z386PR%LBwKps-DihhQ1B^{4WQ2Qd*ywCLQ$h`LWyn$ii+rnLXP1lH8a++iS zUR%e&qHb0QQK-s!{rUpvIu;qK2`_J9OmC?W2l7m3EoS!AR9)}cf36%s8-NIokC5F z)rPol3A&Z%6fD5@Ue84@$K8+6OcZ+D84k14=!XviiTbZF%jKo`Cki1?HY5a<;6GtA zD?bJ_4ojqzkn@M5O%p}IYNxVPl%dL;bN#l^+IzyM@X1Sz>`$R&8$H7Cc$c0uK&q^u0> z>$2;uq>$oXT1G-Z^x|IrJaYG2@VHYj$P}mKMlX)FDdH7I&nf8uRFe)$8s%E}9dxUE7Q}mM40TuDs?8z9Z}QuJz6L?nR>s z)FY2|_&s(dh=weho=GnjJWKJSFaq7_P0MhSBt{{%bq-u&NB4x z0GJ8loHjYKuuf@u%s21~MjZ&SWfv6STWy0CVdAY)|2F;2($az3+bw7PueLoNQY2iR z!w&Jx3fg4GZMmwVG5SSr&6lP?<%jp;cJ^|4!JW4TOzI0Gdm4w?oOIDK@r8I*&nN^stR6N$BU4&oxa=JHS(nb$sW z4mx6VK+_&vY_%Rgk}B~7;iWW%s2K1EI6FRDEWOR7`Ph=4jMny|-!g}o*xSrZv?4j& zNns(OO0(@URJrgAv?)~ev8PBRAsxZ^c7Gs{cdR$o53>!(PG{9FFWzli& z!x^X4r7BeSxSF%vqa05pvWyAU^aRj=`U6_q^N%f!V#Zm*;XZ_>H)v%^xCXlama53YBxG?*Zs*A!-t0mcS;|BGujy-6r69XT=gKAygyjpa1JE znDGqGn6L1C+;IVx1zgPl_t##Q|9^bMnwcdY9bNjB7^LuLh29|vO5vAir zSwniSORHN?f8_qUWaW6?Mk2J1I2=vK_Tj_2G>y6b^vO@3@Qk7Kq#rat1et|YAy$G_ zR0GXbt;hV_-2O<`8}SP`;SpbUHP~_Ae^Xe@toYhnf!I_coL5E!!NFKq<2M!WW&ZF- z2g8Qed}%{UQr4SkO;09uXnLyg-V=(kjJjifZXei#H7oB6`geECefDhc-i4*-7lbBT z@)hLgPuJK8%0os|&1!wOO`+ZTH#NXys?ivtUkqbM^{2}gf1YKkJ*)Y_`invWUW*i` zSl3wN1xZoM`uyF10JwzQZ)KV~rOQDP-LL zJhDP-+XSR?5b%J3b}b&FKYJmAbq4x7mW-HN?O7G!zl96o*k!IhlY^RMiOS_FKq z4<|UA+Qt%NS`xs*Wl?`NS+a9esAKaSSHIH<9FJs4z|Dx;oPrvbzvZc}e0@1R zw7)Zafb-BX732V&04AOJ2Kfht327SO7NhMXF$^G3NBby@7S`GJXeT>TCP~m5JBF?M zsD4Ed@2@N1wlZxp3S48ywsk(xVpw^I%-E%GTs?Jpu$+h`Q(PQ-c#3c0y7TP>oNsS%qcK|r>c^H`%S*ScJ4Od2-ak2I$PnLlHA6AUaw zt>Tu#9G+&zw9@diqxE0rQNpyeLv1(yIq3e3Jx?r$Ef`L%_mh_n=H<<=+q;8Y85TtO z-R}%1l`uq=hO4kmFB5>#yWf`GLa-_rG2l;MhT$QLW`l=t7OuN>dF${4y_$0mmOtZ` z;v$ngBA=6mZTU81NS`_5SN5v?2XB{dJp*ocMn}ub>(Z}Tz!CG8gJ}Bb6$saH%rqB% z{741H2Ml2RK_e@(vu!N2*v|gfJ`jZD6ABrBZrw6^hsbFbAPS8TN^RU89vp14sVriw znA%UrKbs6{djZ#0QxX|h0lnfAfV*V67?T*poT*Tq2XL0aO=tNE3bn9k8S^b(>q=9; z5CI|sG^;E41iQYF2?KXZxs?&^b^;Uim`&%#!yeGTi9srWeu04?A>h3)a!E0AL?b#! z!RaiIXrJP~gFcsBLj6ptm_XW24O`5ZxqtbL!{ZRfo^aF(FrX)g2$U3r`5gv@@gd~g z{EgGs7(t5)-SEa`;%xn4MSb+V!-khV9;*oA;gJxlCkLs;WSQ6yc_t1M{!YkrxE@Rmo2nMuc zlb>i=7Z65W$@02r z@`$7vh;72Y;e*0>D;V(?y_ z9L~#vx?)!s$N5GUgMe7v;#vOzjF-Wf@~^T^&)PF%roRTQvG@;WkJvL8L`M)fP~_Fy z)3dU$@W{v>(pNvnQ<9NE*z~20U<4DS%`N7p+wC_tHUfD};a_;;9pCTW*3{JWujSV0 zIejZ8K(AL-cEb1y=U|V9%{7e8Qdm?}AFkRGc@cg4m1gljm#Ut1>>^qbLuF`EQqokY zKTq82DdD<8DpE0*uO@I5eEITlZA$+5jG*(BMac6zo{&fmGs9{blx!k2wC}28UmPS;ugv|-x8Im1?I?JX4vMmD~@>g8zpDePyxPhx{nSfJqC${Mx z)?zCsK1gcL6Zw1(G4(-w?*G>+s{xNjQSrkaYHmM4NN^*gqdSBa$Iy3b@7vnIcLp@F ze_m~^L`W-Asbti09u`Y~MF_lDjAP#=LaDA~m9%N~d!q=P-T&;gqVQ~h<`HJ&aU6M( zd%bEV-0@0^vu$M;XE}w>uR0q~^>2_z4KbgY+8Gn?oX4~F{cjzi%Ap`v({@9+UkW4n z=vRTj)DxwEv&~N`yHck7cG;bSSo;gUr~u}Pk*t~ak(lbOLg2lcTa8#};^j3oLTyxg z?bh-!XjXAqaHR6|D|_uT)8$>tR5D(f5V<3Qu3*uX;v7r6{Zi$;gxlftj*x*wFC3DBR6=>I%|aCA}RT&|?`6pguGe zg6Dto@fD{}7OLZjV?tyc6w|~;Kg+(&I0YfKu;&>RiH5?=s2;=qBnb@A>$h_HnybDj zI9QxM$#JRG~a0b0!)xh`0fJ z`&TE=xxilQra6p=)7i3cUgv#NCQ0>=1HrIdj0skjl_7MMf z51dj-?u+JZoy8K2j8VB%vrY zHeLXcK-rfj-ED(_)`x>t@pHQO@cn+j`BlAJulHZ)PrNz(tvJWtS3j6wM3BU8KSnE8hx(Ex(SsHxA&9OdPvRlCpP4U3D3)vq<< zL#7cxRN7MOt&k^JScuu8IEYtR3Jkr4EG7|1e>*xm&z?IsN1sAIbuZMlF8F+r`L@y7 zRfHMsK}1+&q&74|h{SNQk@`~PrxqiNKz_Ch5_T*YHqg%57}Bgvo6lR^(yMb&wi(?J z0%)l^nHM{h8FkfV3X;oB5q|siNWRiWm5z@h&hK7f@N`SrEdq@Wd)B-w214ccKH1$c zdo;@~L~AoYUE#?%>>uc>iD{`tkc@q>q9t7t)z9YO;)0WGSsl07Tdt&yP^1IA#@mwO zn3j|jjA;>clFvGg8twE|%Aqs`gq|BhjS!OrC{>S*j|XqNE_U#=&a>G(3}@yFro)zM zbYYbWMVsdcMKs$NGf}j-S}79I0FfFp&9K6`C`Ef850w=n^YCJfyaZ$$oE)`V=HF%# zAlS_Ccq;TOt@2CFy`Pw3uN}4DYBAWJtf1)dNE zQI_BZ5|<1zQH|XvasYaKf}t&=qy;CBH#JHfECC+>h2jHjxn7F=*|3%Lv-LfogFu8 ziL6ee-v{xS-WjG}0Qwp}tjF?q-6bl!iQpTj40bX(WAwgDhBwl$J)@ngq+jh`8OidX zWAZIezrN2(<3uLK7cW>akjf`e{5fNIXYQPZL>kMXN8^xg+)pAcPv8bTQdz=UM1zZe z0^<16MfSim*wfXZaybAMhAj=RMLBo2-|iCZCYp1NRSAv#Pum`RYWfCb&Lni}u}@GO z=Xqe+5sWgCeIXQuQ&|zXCftv00z?|w;Z$W34`YwqR||^I?Pqr@0r^zGMq$VlX_#z$UuBP9ta`?n5;8oG>F?@AKx;dO7wyw1ejdb^oiLz* z*8lrH5cXkh2?$zRo@y=ZIc-6`j|Nj8;5D<_04GWA{=yV|t4;6}I+3;cW#mTInVEh)puhgQj|nKVblymEom?5G367ea&v=8Cw;#IF660+E95ZqnAf5yh!8FdTQIMA z^Q#h!6?Qp5H3NjVRGDGF!wg#&@o#}U5(Gs%TU!DzZ+%NI>mDKA8!=gd5}{5qo*(9*5ZajoLto8+~nwJyLApw{DNn;*ViqP z##cusCT{5J#-yf7gISfIzZlpgo-lZzd|-HyJ;W=Z-YR1tkPo4zqvO39yGH8g3blax z(uO2~q;C5ua`10kW)s|C8Y0@w0i7Isz$P9p?$rLzpSMe?NE;0|9+RJgN2L_pfm)Vb zaR~p{Wm%c0q&+mU$?!N7OHriV?qlTnuzR@tYp@_ZN{NaBMJ@JmX2M?i)gRs?cT#12 z(=L!bg{)yHi-*&mQFdp{8q_54ypUTbm4Zr6RfRXP6}4kZ<#bRua7iAcfXh>=)5r-X z{GHZsWnU3Z7e^HZ#VX#zN5?uNd@Z%G6?qqRG&3%CUx__x#2Rr#J4nE7e)BKd&%sr* zBTcRZ6#oFS)EkPTKCJc4O;QY2>RK({_7?vZ2(Bm*hQJt}TlgoHXj$RZEKKK_4HQtr z4#^ieIm8j53PYSMLA-F94({Q%av%z2(q8Xl`U9-L!B_!3An!F%OLcb>jr<6}!ma7# zLNF=c2N5NLa>L4~7iJWxTI)u3PUQ#^-cK!CnBRC)WPtykupZ+CYIO^vJ})~vpmXXm z;LcUY^9s#54Gprpx^D4-2f73!70+R>{^B#U zibfmOnQzf49=mbOpk{)A zUtM$@#$FqUToQYhTdkycC4lE|xHEq);r{n_!kjl34t0Ov^-vWma#qvc1PG(r?-AoZ zj7BeYR0xbyWV$@kjs%=l_m@>a+8fR{p1d-}*E6pW_1v)8S-X~zmF53l6TxU!huofb zCqe||LzWx;6gupQhz+4c%7Bn4@NWB!&{0r~4h=Eigp_@(T!g4bi38CvX<)hQe|-^9 zipCzGJu^9IRnH3*qrQYaO>iGAebR7uFWbHQ9zF>HNoMA0m@sT%rKtN~o`KFNYT|x= zdR#GF`go^b`khTD$<79pNN)ka-=8cV`J?&MtM>$*f>+wnm48bW{3B@#S|*db16)C# z!f(@*CSj62U;6asXWplb&SrBh01PR0b}j8Yv3Zj5Es}B+l5XxX4uYdj)Q=_1hH_> z*{2qqUg?>iJ??;phx(chvCC z%*}0d!LACaI#c0rt3m&_fv3JL54JNedw~#V5yK^lWrP`{nAi>^a>4Au!_N=3M-sY8 zr)S!V38EXwmvSC&n1s^O(%?#RrW|cYljRR$Neagb{WDx1_P2$a|MVQ;|0NE>#J!(5 zW2C`OTT-K?W44i+u}U8G=7;B0RBS_kS?~u4 zIIM!gYE59`U+3prd3mN9h3C@HZDjw4`5vb^&ciNE5Ht#2P%p&2uRzTud4i4ZlOAT{ z8QuAN>1C1(F7N=%`B0hh?Mr6(OTBi+?Psr}P2}q&6~5ONlqO0-Y&8||#v@uLn{ z{6f+q^(s1BbIF$&Db+YUO!~PIOfuna7}F0vc%s42M^!6Ysowc?`Kt9960N4kD&t@V zfh86IBts*kj`TZluR(F_bzHooqa*v?q_%X<=P@xDG>{b2Nir|bh+BW=X=q4@Q5{m$ z_Y--|v*F?4JvAGL4+N!Ug%?Vy?0RX~trY{7ZL$8mDwIj2h5l0fmh>>3(C{c-^eZTO z^X6{sW2k37PA2GyhsWOgZ+xLA-75agt9cmD4mI3h&Nex{UDmuo-pb%o!iAhR=-eaDd zxXt(6+9c(PW<1YsTAWJAI&Sf${e~LQbHxoJqi;XDDV+Ls?;O_eA+Y&4Pp-Aft#Vx8 zmYEy_={FM8gg~8)?ASOLvga~c-zysR5NzcVU)HIslw1U?CYO4uu(5J|a{`yAfivoe zA{5i4JtqDc3|z)Owtv~lFJkYce@L~52y?Ic?p8n(0tKW4l0(4oVm&3V4dqDLqkGPTL#q@MT-jyP&n{7 z2&M3`wS_Pt|6XnB?GHdj8ljn;jrD{?z>IG&iuvw!o5wz{5j^Fmv00p^4_q*BAKbd` z#xB;ydf0r`?47K+KM|jT8P&qipF6*P*_SO=74#6Bx*?)(TzMAHWIa*6jGCB ze^`QdSz3>>l&ykSj>4=(4^z`2N93cnSxp<;^aVRJ$17xJ64j}{?ny!Fw znno9mBYq&&ArJi>5D1(24C<%=<8W|P&-w|7r6R(<`+hx@7= zs?r27_+sg=l{5)x@2Xac12R-ii>t8|8CVy8yg#@-J|gLI_;9$z*X#w&LW!z3Ob5`) z0rQ=J?eB&B!7Ox-!@ogflS5f&YGOjSdkm>qMc+D7m?b^}h9E8~s{WuC>SD+^xbzF0 zUr{LLt~0`7ol#!C37p+D9|FowJYY+L4Yyn%dhy!_z257(!RWzT>w=j7y`2e{fatE6YH4^!oMVsRN(=U=?|`$L z-$SbGfP6$J$dqdA9#0K!6|XU$SBOkvA@Wu&lpsMj%2gwy1%SnaMqv1)yl|b>F-@ly z^^Od=psk zK74PKeHz>#9{-ZQAkseaXtO&%FL;UhtqMgW5hisR`HqZGJ19n$mY26#`C*TB0hWx9 zZ)bho6BcHsW=hIerQvct@>3?$FMtNZ+*S*1wQ0N~*``MD^&Wl4P#y0pDuMZ|S!DBK zLt|Il+>Mq8hvWoJ_RtbH3~t1i5j&^1$g2JlB?bayPwQ1G*VOFs0F z9h`XhukHK^bZCUGK9g*NZw40V_)eqVvS60H>$Zv&R2L&~_P~YJWlG=dM5ZjA;076q z>@DG32Kt7ExkpB<4n80vNj5^oR>H{&!?J$a=jF!9S`_B6ZeG6LWoc&D;DrHOn#>Dk zxX6L4ZeKO#eOh+m`CfiDL5)DkvVjM&J1Y49f9~#f0=G|>6{yYv)Iww%aA60Z-aMoC8V+^BEh-{+P|j3#J_cnF_cmMxhojsM zPmRc1ufgHst^3^kXvq-rZm`g%wT^EFp(tuQ|BOT4sTYVQ0pssXTDPBA((BE0c3(P5 zTjFftBUq^>msP624~Q+`uJBR+SXi*A(JLmzEi*2G=#pK)cOm%B?{LgI67r|jhorI} z!<;>DzRN*<=3N5iVXvgR}|-a+>?BPQCY{TX7J z9c~bU+uXwm>=Wh{EWkiWQJ~hBy!Su`3QKZu*hBRnwWItY1Nc^tpK< z(vt8-#SVEnqD1_IeEKq~lJv#XlhQpjnyS{F$YwDOpFmoY^1?^bKG5L!GwSJ_N^deY z#nd~?e(nLgawYZRJqT>pBn59(k)yjv?fD1mm6a0gn^tg}K!jS+>({ewB}sL)wUv{$ zoT#5U^%V_&OxqPrS&*jJU;py;D<4I`s5~5S+#sVxZVjq3jbd8M9Bt|55D*Z|NMmI7 z14@xlND~dkT{pc|eg>b)ZX)OS$yCRaPYzW79Bc({#G$XuXc5uDK|v5#R>m)IYV?QJ zmEO=r$?O+m^xGzlr$>-6{UrbzK^u*Wu?IS>u_@-1r~mp~VBEF$b(P$IW14-|Uj{r>zNKxR;ZXihvx5X^$ z@CBm>Dxe=1_=xWQetQjLtE}q{oR{GE;eFq>h;Uc`}t{}1|gs>Rp4&-}xirOgXt zVM!7&`+iP@4j(`1DAk~aA5hKNMwxi`4_;kMwYv>NvYAS=6R1j@937*b4sM_h8Dw~T z=QMjxx|FAo*F{nY9%Q0`Zaa#USeJbFe)k(}-fN&|{qf_6Z5I?-t|zLosDxVx6?+4@ z3oNZB5GVB4h~ZrZd6QTDMY^{vsS!fEvUVR8{_$H|d~E+~W5%8Ry)i3B^?Ll{r?ys6 z@Muk+WvidMl3f?5>$=a$g4?Vo@lcDgpC{|4m>sL9nPF3jj@=>N;P3Snx5!EITQ%w} z1`ZX-?Ld0eV6gVV+V{xba`ouaw$b{p2%;0u=$lJTr5=u{-Qdic0UbsRD$>4yo7k3@ zB}(}ixK3PL+}(NE6KWEY=Jbn1*Y{uCo;f{GD8;ovJy3!J!rw21 zm~wklrDbBanjv6){+w2N&W)={9QNaLex5C1TUwl1aU4UYCVeF^1=pMe0?rrRyKEu5r<@En@TeNBlaGO$8j z>SA$NujbB2$v+~H#G05v7Lo|w)p-urH}z%@pr$~EBZAx_cm;J{o5!YFv0}>_7@VDq zot1&F=tGhnNR_zUKJp_WB9z zO}@S-pwU7V&Mr1>`nC7>6U_if0K+DT{U3OFfgYvMtS(8mBt)_ea(g0=9X_NaCUS`> zp`N0x*K-Fd{^MLOONP)h=jo3yXuT= zE-8+=!Wb#*xX_p2;K6 ziN(hyGxXL-zL15!)#ZCWPprrj&=S&IF-#obtGt}{QCZMAmbyXV1+q;eZt@=F)ofRM zG#f7GlVU`bDL_v~A_2Pd&ZGt^7NJC!xx&a;{KdaE>YQ^;m|741 zIR+Wf!>@tX!-s7}@v8v-hQh^?*Z1-rW(;WTOM9K4kkH+K|A!yHM@-v|uDAIVI%#$& z8+MfeBRYNj>;8JE$M4DJyWU2bQCLv$o#yZJ)0P_hV>jN~72}`T9P`g$ig)F{okDMA z3E0&X$o|H8OtJBe>4rXiN{WsawCkZVH=hJWWLcR|efQhJ(DSw}Uw&8(gy>&lq;aGC zCI<6f@Mk#-5^f$IXe?s=SSB=#-p@-I(tSjE4iC>tXypPg zulGV`u!4euL7`F8q%;nMlUlu!{OA4y5($2OetRs)V9nJ`Y_@3!93N6=5(=fb0+#=& zcQ$+7@mZC6Q9=454OD@O1wJkZ?ksZs*oO5j2?}+dh$R6d<}ej~cavS)Qs^KMEGI zqq4O?!40Sr&G=6molITj+$@4jDu|EqR7{@@QH2*BpMyNg4s4JY-br8?gH zDyMs-Jp44kJ7*AdX!0X*UglPM{VH1UZ$g76;YX3!II+>uP1~^F1iQhCN$_(UEXz<< zYW+2i+z9%w3QggJKlAdHPICmBB_I!!{ARVjC-p|Jhpzj(iu}!?OT&7N+x$(IBJi?W zD^K3zij#Ai7fP;}83n1Voy`R`(4)*Qu?iRNAqgx^6aLyY^wy&PQ2sqzsN5lNEkQOL z*m4rh;}TyFiwW|Vyv8OXeRuAXXxxp?KL3%q%(xE%B?lw$!dU-d-%Ti~&PVYy-MuiJ zeDevt@Q@GZJhKTp@bBqn7gLS4F17}uVAtDdJ?1xPDHQlnrbTvZKH6a(Mcwf#kZv;8 zM`KFBybRXj#GVUHONJ`Cf5`Z*vTr{<67w)io`=;z8x?89KC zN(K}uuaFk+YI@4k>cCX8_G?b4AHwdjBWj}_1AGPEBw=do^XZ53zVm(O&3I*G(#~ex zN7$}4gAWm^Vn3@lnNbmI*83b?lyEAt*A96sPbjo9jb!Ic$AFA5@u^iQCEu<|S?1w8 z|Btb^4C`{u+K1^zx};O2Ly(Y?QVBsoq#G4M5s~gLDMdg)LK;aGr5hKv9Yr+eXpSfzE;_rH^8?_^n$=I4FkBHW@hONn^~Vl z^^8sB39awb2X&8K8@W-Wt7Ze=0^2qFv9o`G_MsLas$BSc!4p{IR#{8t>lGPr2WNt|M5hj$4*|u;bwe_ zBMlA3|44!K&en6sfFKj0g1HfFll*U?p!C33vj+p|dJRx0RI#jNWl@I0qh>XW*6Z`E zObmT32+y3M1dhi9lRd4aTM-+M#fkXImg~yb_lBYrJ^(WL*))d-zMH%=DU1@l(vKqz zjQ5^!R{}>Z&Eo}cKSpk}V1&RfE-HHSZ89@M?w>N(cH5_N4@b(d6VDu5eI^&6udE4Zs=1lzlufjp`OX{BQo!ooN9f9t@ z2fm<8qSvlmfq5F8XkgRBmsyViUFZJ=uzTP29pu^ne)**39@lZ5+i#TbiRY}_8!U!6 zTYNNy(SsH|7<|T+{L&V$;?%;%MVSNK$qk&08&m#`HsW<9vHm$GGuUk%VEMu3R(cm3 z1H;kT`52)SJCCm;_BcSS8ri;4@*V+-?eSKH4EdjHc8q_lXfi*=mAf98yZH&AAg^wT zHAuGsrctC|Q0@cGpsMy5N(*XtgP zzofG4ZNt|?;cxY#$A=}}YP&ZgN8e5n(vH8()=A3;zE{RKZ*nXbzCPG?Crir*#`>e0 zTT17HPo&NEQuYw7xP^6}P@pb!9=8z%8A}l1vW&0njd0`;9#3)62<&Lz&+j;!!}(W< zA8_XYwgc6ffb%QNA9ijPDCgLfRo4fd)iz-3P`6D{*M7vE$aCM^ZP7~vn%VaV*)!?} zksp(4#OKdVQ`@?2=9iKG+w}+U2+f#Xj6orG@~ElUr03m|$t+k@D@%rl0}?`n662c} zK4#>Bb2f-rWKoD7XB{heHy&e7Ik${*Q8zNi|On{>o} zlLSDJP0g(d8R^*v=ElEwpO<=j(YPOSy(%h-#J&p0ghNC`WfJ)v*5PY>2;UtQgi0mfC=e+Q6C~$dgf~cOHUk<`Hukne-<*|RL`BB z@Gr@2sK`szdg;LlzHANRD!3Ntkv`Xt{sPPm&X%`t%fR@o%1BK;+}m4E7uKa^Sm#B5 zaK?L*eK8OZq*!UOAk>DHSNyMC=6oc^eE##HaXT*3iDxL`&RpEhz9atU|e;<=Q`nA6Hu;ejtP;2X6;OcudMjnXTa9u zHL0b;Dg^q8s%jSqjCU*~E}VHk3oZr!V~}oeVa3g{IAQAQVFrFX6IeN<52#EB|4k0c z8is`J(E$jGWunM<|KA*Tq(On7P;T4>D4wv)0eblC)D(}w){3sHAU3KX_p_L924Vjx zj`fq5YtNrnM-;JM$S;L9)PXRd?k}xA32^z%0|j7D^*%0npO-fe>>;)v3$4)S+GFrd z(HpjDH;SGT%PjTSu5owMRq)auS-gxdg_jEylz_ESP*Se{2=Q??sB*Hqb0@d1?ij4} zclZVBwR~XgzJ9}nZyby$KumtzaEWyhxW@EW%&e^b{Jpt+*&z<#Tw=TB^9h2k1oT{Q zwE7%rzfER}kV7~~Z*%ettQDAz!+M zbPh=9zIj(HyHq1&d&_~b#Oq0*vmeu9Gu!+`^Y#y%u6^Evp%7d_Z#%nNI4^!2A8j8@ zp#E)HiU2+X&MZPgfU!~l*MB6s5(s>yv16pKy$0`uF=9S)0aYpRlGqe4aL$JtG#63# zQu9o`k{l2I!&D}q#z2{$pEvykvx6B5^ntLMa08z-+xVAFcBatef+vy4Q#qecNBcSg z->)>zpLVx5nLCN8VJ;O|;n#oLmf&ildakPp+=3c@`TvSrq#iKeUg&!E8cmqsa}pz% zUxH3onT-}eLy}H*| z5q5j@om~@4N)X}M&PU~m$_a!`N{Ov_F@%2!?C&U&_-Fo$!!Cz0!F94GJp6OyUoVnA z+{8#NQ`6D=N&e4P#MA?@Oa76;L6O_tbO8Q>>av!L{RIpydd5u4gL?ip;R++6g-z;( zF$Q-%HgAPDs}26ES4DKp4riYY+8(mACp{m-ZstOVv{JmGYeYJS@48E(K}kZxz))*5 z$c3Z7Gm#JTN8qeO*ZxiPSM(z=6I5JKuSBv&&5jx=*s3@2Osq2U z>ERUTs3obVj_BeUPe8btu%e64n_uHwZuux}P{hRinDDWt}OFC9W8=SQy>2#V>k zG*%62P$IQPX67CcPOP0Jn}!MIgTgMEA$?eadIGknfIH&>pIWT}D-1+$iYyXr; zgGix|=?C8%wR__^0}em@N@nWrKU?5ZZgz5JMZYv~Qm92c7J=*kzbEzc{AS!+hOVMqbww$sClxrd39!4mijRtE)A!)8DPc@;1kn#ZL9oaQwE#b}GvV z%ZKH{idt&^@9Sb0c8 z*H;CJprKKXx4>)rGiX*$Io4~jbZhp}R6Ms(9`=AyL$eVR1m7$H@7a_T-z32cTE~Ck zw&%coui}QN8Iq0gEJG>u&kqj@z45x^hdfRz{XW&=XM0vPpL}Jf4-Hs!`}G&MUy_DD zQNVpk4H#H-oesFeE%fE<5wX)elSU$Cj%Ztyl$6q&z4Bme#(nek_=5|M$*5&Fg##kz zhlKO3Q3Ol@%MXOulLrr0&b@S*1nZrfH(3auod=H>MD2iVGe9K)wl)n8i`CVnoEu;7 z70anK1l1i(^LKO@VG2hG4PE|o+|6mGLE>^zvvG7KVIQw`bo^B)=-qJ9xyv-vRBub% z(i(kbmsbW(0_kG=ft z2~YOJM|nQ=!1)+=Fx@VIg8LmQxOcM|0C+gqd8vD_VSSFWCNhg*xc}k*T9dSj@9Dlt z1b7ID>E_gDz+MW}3}rPy+V}YRzr*qKuhVD$Pi`@h(WecmsM&(5`FP#*bguGH>Fde3gd(nU#G+1=f}Cs~|qhUZ9$ z_$tY#WEpSc3j6>d4P{C5@-6`b@NEL5z zUF`$umtqtCiP`DDI|nRu!^7{aIZ;CK^8Xz7_@=mA&a8+j#r3kC>3^sT<-Gm#Z{=oW zcln4c?-Ic=Yo8u73r^$1KbT`=(_2^HPTz0EO1P2k7QlT9&S9tm(J)`3@{)eq3*=6x zAv{w4?1Ng9GHa0}TxiM6QwYl6mz6m{mvYc@8?=|8B{}REshr}orpXVVeRh*L;HQ21 zCiGtNG?i5;_H?JzjEoJcYNsh8*PM-ElbN-`yDf?9mk&J;Am(ysB}*1C--#+WcX!x( z!iwT{SHi^f^gGXer|ft|;e+4Sz_x&(rGkMb+s4@#WPd}1hZoD6aM>0_YCJaDg8f$- z3E=50)!e#sbot@4n#YqygPPfA-~GDErT~~agjPDYgi+XP{dP))cHOG;xo?Tf+9aR| zrQ7s8dS&2ua0P*Jb)WF0_|%LqBzQoSwiy3Y`r9Z$Ha)p7n9+ku5QyDM-lbj@w~|Fj zC{_(k=4gj?!29=t4z3J;F(VqsmH^f`xDpgeKK>5~Ket(p^?LH^^C8;0{pBjvR-1CW z81)=NA?yxkS0)wr69F(_Y5%8Ud|qAZsP5-VZZ>j>G&G`vQB17kF(;s(NkoZTHNX%n z0k;UiOm7~bb|Hf4JupXuyw_EETLXvL+uO2~JyyIdIOfFZo6$@-IHF{Y0AH(>r?8)6YI?YEkP>8Jok zMn;CL*J9~MKBLMLqDq0%bM^Y~2tmH-Eio~1z2!$5pNVwQXq``{{}Vlr*|fU$cmBT& zS_N-)5hr6~8MbKT1fBxPj90Q4e_~Tpi8vq+HUMd#H_n!X!6aS*DCshO$qPG!%%__p z<8s?Am8|~{Y}he}VYGWuTTQAY>nAAN2V3}_FnQDu+Io9?Um^SO64f0n!k9ZlLPJ3l zhBfp*N#Nz|&Vrr2ug?9CANx|NbEr#_rSTGW{`;$8($eDMdIxGt@WCh0F);8+J7gAs za|SC%fs$|;;OegHQ(*iN)D91!A>#>|y3rErR?83RaI=!rAKd)a;+j-($Sd2=c}DrK zRBwcT{mn*tb|`6KNg8MYM1+KPwzif(#+r^nY66eO3yRN=l&;38*Bg5cp%Dl|Mg+${ zMF+-Zzves;x0RP~Az=EIp{M8RB^>7eq&aKkW3Bi0gI~5WX&6yWF=5BW83Y; z>S*g9VwvV{5m+lhl99K+Ea+xM`+r+r12Q8B`~7HK!G-)l=>hW7C-A*UN=h^|GAexY zgrgY*EOMu&X}`w%Tgi$dfu5D}a;UGs1?bTrUaO7>7_uE@NnxP1Ec+1p$La)uelyZ% z>Vov$LmL#4$t!4Fdt3vZPG4M(;QT30|LVZps=3>h=eNuLKx*j#x`6~3-n-1EILi{P zc{@36!Kd(Pb5iKtyMht$he2fG%gfR(t4t>EXWd~d_{Zu?@4ko_1S&y5dq-zyFcD)n z-f;PpwCQu^7uSfJ$ARi;AoOfhoq+Q6F+jn&2TNS#`zpc5`OIff(nIU&>QYlvEq6r* z!QR>r{^jov##f59jW}!A7@V-b2S5Xg3uswqWJ*biJ~ra061_I5lV)SH9Q*JPS_lns zt;+-K_sDJi%v4*yND%&cyPs%o4XKD+UEwDh+ZqM2XUU&ep`^g5@xiul0e#VpnRVwA zeR*PPYLAl{0<=SAGH&xmbnLQMY==`&V_6C7iNhb#2%~5F#m15*U;wKW*p#KOm9A%F z*p8I3GclRMCuZoM5}%6GeZ~mYJ^j~9kM*m_tpQ{!(&xtpv!1jF`{fb2@!?X79_f9a zr>U+pG{cK^CV~G!e0}_W(ePb9LL={Uq4B>jF4rc|l$`c)L*foa)Zpi_F#;>go--{c zFGv&C6ER;{Oa8fQ!d`(_W;~d0kver08?d8O)|WKkBYbc_C+fOb`q{zNAq+t#1WlS4 z%adiDe1})inrCbKRY37hLZRSlp-?On4zlI{G=Sd!1a=c|c2`;3c}Lk?^pJkfpe`^LsDIW6Ae&^@)T8iR!rmo(cK zy^ueX&n&0blaq3%j#Kq5CqExAQsU7}&TFhcu4bB2uNHZbHXD%K$g*ev-5BF$#L!D_ zhP&}uSi|zM`9#8gxyS#ox|*k;@9Fug&u3B(yVBI zhzP0kQ$z9{G!h^?x@YNhLcapJ^kURu)*8xa6* zHqKQ$z;(o&xq3rf3LEn$IJj+_$kWZrb)FMrr2E1K|A%QN1Km@8`Xs0J6egSq_)#4| zh+qdK+XLl@Gc7@4(Ki$u*F;t~>E0HEdYkA}ok zXPSthn1IiMUH+BJoNrL|BqqKeMF?e~K1|mv|1UGIp(W4|G&MFtuM4#62c;Kd+;I*( zJdO)$YHMM7GalakoN@$oXN0b94tJ4AYEuIe@xmy$n?FWy_ps}IHxsn#AUDQJka%nZ z-T+TanP-0e;`S)w+xf@Ut@q4Ak~%95!mk(qGN=+i4v$dPQP4`*d;N zpJO_gKJ)d9zc;`kJQW=*esuC3^};_E@v=QPA+0!19CvgND(Q)8gZW?;ipJ~LuR+mj zANYr#ZHYPjKpK)M`}_OrafPxnoo=*q@V~wgH!s-qhfs|}TK#WAwcM@nKMsg{rLJ7{ zEXKHu4~gCR4L|e(@5KCZtqt4DO}Nv5Y7yP>A=C;8Na8IR^GAE^SAzZ*In$RA?TM9? zBX$#zcgtnuiKP)>dm1Pu@CpnAh4n-@JP=Q@&TtqG#&3xhHt^MUqyyVKnU00*`;sXL(&mn_Yxu;e3DA4~S7vu%1-m1{es8w?H<8$hfRzt=$Ik z4YC97+}M-`#v>%?m06yrq@~3tv4Q1=Lhymq+;GLsBE$3HjZi{SuW7zwI>^V zWbmL)8ll9_e^F?YsgTDqaRqwyDnuUX1hNi#n^&r;=f;LpHM29Z0SaBpIVLS9+EU&})eiB&t6RjHQIE;x=9=dp z`KhbE3%mVNQR2j0;Y1(CQG48aPx&a?St9Dt_td)cdIMdCL*BIa@wWGDS0d{ueq>zT z>N>!|KV?`ZFoB2-8BB>?4eB;YR5xF6O$3G3m#lAYS_+BlH8T7`d0<(Nv|89mb~hlQ zQd+)B&EZczfY7v5AFBY2+L7@SzsIabKAY)H}gzQNt}a11vMfzJGt2lvD*F9p!mv$!2C}`3=em0zhYv_;=Qj@~;r^{ZHdzIFGpl%*i3@#ELuC_b#p-ydem2a7=}q_m?&xi|KK1C`q`np-CLcR6DV`2+t`Vxwa`f72I zHh-AKJkenbr22^~^v&D5LJtawHpC(bUP_dRA?Lb-42nWK)5x6o0I&4v*O@>awH5+& z@NxlIWTrcXmY)7oXLuaI?Hci5TXB|M(s#)*g zW`dnAKP*+xr&C9nPh=7^3e!l&$H!9$X zTd>crwJM`vIe`O_BBXOT1jra@rM?1GC<1fF7-E-*5XH;n**g9D{_U{kbYrx-BtI{~ z48A02U!kUeUnj`H8axE$ZUvt5H++xWLl+bAEJH~6MJK_<05(*KUA_{`H<6tSK`X3N z1+o~>ZIf6mHPY0HBkTVSRmxkKUw%@eEW!bVA+I}k?pRo`Ry{^JN)>-(4G%v!$_Za9 zZ}mN4PHX005hJzA{9hn3nR|SQiN(~QR~jg;q1bK2b3&r>s+cXnv=GXDSTTmKjV_Y4 z4v#;v8^n6J#LSi_=7&nw~HCMqcPphZ1{GEh|iMCj1~rH?;35g-JD}XU_`Hcx!+mn={>gG0&kuY2vooq5hhVd2?-|c zlnZxBqnh9){_Z+U-z!fY|KHr@s3q$BK3atgu;Vg;DCQwqK{14Usa*x}*_8R$b}GPO zNIi9Vdl26iEVRSUvTHm72d@9t1241xzQ|zU4JLHTBmwH67ZF2Sw>p6;|3HEdYoSe; zPQ6Hb`kZy;n4TfoFwqc#WR81KSKffl2_HVR&6C^#hy{iFTyHvvEaKwhi5R7m&!3hS z-9UjRc$%TBsI02`buu)$x(=H9GdZ4UGfzxFK%w<^MnT=_@fonY7Qu;MOv1asVr<)N zcMAC_A(7s38}iq$U;l%(d7hr)6E#QR%71i=WeVaziheePn^4j^CO@j2{DJ5ZifSU7XA`xG}@&oKI zA|e9ZY{89_gPmPYsMYx{fsrIl$qZoZh^Mqe;nO?!?itj2xPtPh>zcqK7+5v_sQkEc z?uL*lZJ|{!x3*RNn}p1ZZ0J(Chp)Q0n(q(H*^O3e)9LkG+8_WrZn0kwA(r=Kz#53X z(}s{j;$gDy7@Pr$vn^H3Oo7y=#Q!pe#aXn~Ftv_gdBz!q$K zW35ebA5^qH43n3NeAPlimGw|oM%Kp9X$)5|xjlb(Ms(=4UX$hE(`(NMdw?R{6yjeF z2>S^^+Ee9%@d*!_v>$m-Ko962IoElK0j2$%rDHfHuMo#8VV$u~ao__30h>ARIr*C~ zujb`J8kbv`*3{V-WloA@8<(~x)JBnmA&{X}V4cC{r}@V_Y~7@E6%EiyK$74cv-fP& z>4>@^g|uk{M0ajMWdzw>X1^(g0#0?cO^F<_geGDD{UlHJHn_nEQruCf9u9%e=7sQW z2=2TNsX;>~-k+XLCP;yFmOv?2FAB9>jpVHLJypk(IqN!Ub1&ko*W(Jtwu7R!eCBsn z;sj0mC(<^6I!*XYnK-~Qa^nR^yIM+gVR@6r z-Ec;oot+~E*@Y>4Vw1iS=uvVfNTAs(Rg1tjEY)9Hs=oqpFViALlbS^fHRx^*PW-Q{ ze$hJ6;)bn(f|f%N(aHV-yu(Q_mBdH zF3CI>3a3ZCL4>sB_rG!3Aj&pyjNtI^gka4T*nDKY=ysC9zLj=rz3OO_ywV+7i;o?3eM=_6z3C zAwXFuHmr#CveK(V`S6BAfGT?^PLn{Mbnbc)X&(PX-@pJy6M00<05B*a0~a$U{A*TR z2*#36Q;D(lK3<<}`}xSHfg}o&>%W;&>|dtK2K*!-K|j34a^={3SYY_`&;aYi&kHHp z3}1Ceub?JS@xWC6@gtJ@;W(b*&c1<<)wUjJeq}6E-dHKeX(X0sU?tp z6!rYZM+jU1p?Btr0?OL;7Z(uctTYFGeSLtfn6b&~f_Ft?!5alOFOcQSrT!vy(0pbfizUmI8OM^8g>Hw8@y#03ER3g*J?rBQ6rwQ!$; zXW-Bfw<_tTLRo@9*lQpKeEN+&jPZrKn%W_->cNS8I4Ui~2Mu~mZ|Kp?n7&sz^XFb% zxIL;Qxp#Jkc<;KSpzbTe@cYb9oa%pxeytbQ9LZr{L?PXPK0dHd5 z+J}cf!83#}^xllybIT(IVlllax+j9vtF+1yAD3%XS#NhIhekyOk1%z;|J>g{_hZzy zd1#1g*?8_6@L6gP4XZlTLRJpX2EVxBUP5h*)2`Ju@o884*wA zDZCxGLe5)gAoaVq_N!6^Y>r@JgSw(|1ZEK9TV7z#0a6#yQVRJ=4*D>w%{#gng$;@& zwjmoh7%}iQ3IF?R@+z5~?NmSDS}|nUeV;cubX9TQgL&g~&M!|J=S?+wGzQq-NNNm1#cT^!s>j^|YFBP5H6ZEGT(ODD z4n~E5>!1f16~ZC`5h_M}1@@^U)w#ks1Jq%oj2-3(*p!pfD&1a2EC!`5(aCN9?I!rmxypv;|otXiR zMXW7A?mz0hQ-|S#upYO7%ZT^x`m`yJakUFrn@+i71MLEFaLxS6k|a1?NySmxj75UK zL~2lnqQGfP(;^@ycG$kWpyg7Zg+oZlevdGUQ6^{)LWGz@N3(t#aNVJ&Y;sFn;#R=% zn+x`kx^m8*Qt8m>yloVx>Q-g*5=B9{JssXAROhe1g_-+Ma34VcvY2^ zAzFfL_xsatDMdLc_U;*BbOwn<$r9t{1mpPOM02xuGBB;SAGSZwr^|;7&m|lenLvJw z77q^wDYs_#I`kVH6sVR@zcSqu5*7wkGQNKBUKE4Wg87ljI`qxoBZ`sYB9P%WX@aJxb>)Qw{B0Jk7!7yc zne&sSyqJ@o>Ne^eM9LO~DbCsP=O_Nsi`~8Y3^rV)42o}?$1{!}&d2idSRV$Y5?%(GSWz&FDHb-t}{CC|T>M%26g}tYg(Qk31sEl3GOG=0%V9UE_ z$DvvE){7gX(8Bx{e-i}@#zV`gUvd(@@(}MH846*+Q8RhU-z$jroEMny8r!jAX*U-2 zlbJpM^(1gy_fuCCnMK4+N@-n!Vdl@-p*_mFc(!hzL;QsIF{We<2a|Whdls8f;1)``P|O3+SfGO zIc3)h^mm4oPEQA~f=bsjsKKnbfSD#iPO-*T^$4vzKI_;l{LcYti#xXz5NOp ztrivW_0j^pkyRZz5?ai{pQithBXL=1;4Q3swD$u}rJ--uCJB6Oot-cKhI8@qIsyfo zTo^E^lJ=&V+v72&k=ht=r3ES%lxE8EjXSY5ZW63m0duWx$hpMYNGM3F2P22ce z<}hC22(g)QqqILh^1S2syRDBD{q~zAmb$qzrZa)x+-dxf|M-aUBr(1bDT3PVRy^>O zFBb3z6VO~<1R2p|*sxEHqJqOUT%DIP-qIskS&CPmrf8MhosCJWWZA1Q!Xu)W3b;+878W`3FES#4fjN~cr z6k&qey2SAvFOcD-Z>z#Qj$qJ954OJNl@F_v@D6S3Ra6{*W08IMEp#nV#dE{@ zqvzWjY!3l=_Fna81S}d|$O<5GczJ;Of4C6K83@``aBy*Ua`IyW4;(A@7HIOA4dUbC zTwPpp#RiF>IgoK)rYjw39Lwe;D6h^i($FY*{OhKM3=z@I}w4Zu<&Q&S!Iuy1&=Fe2ru(D^$ zG+np!$-IriGHgCT8OYq9x;P#87MBPmpeQx<2hhoLl?V9j+HT1GDxv<;8DYZgFoQAG zH5+;Bqk z0V4)l{uUzQJDH`W52292{Q`Io*q@*tq4~ys4LDiTr)H)=1B1z8z{JRikOAfb4O~Eg zH6P|P#=d;n{W3laDVv~9Uj{lmCKlG--X4Tjhu7L%Wh0R#@YM$?CO8kkG7_hJp^)BclHze2I2YO^P@!I&1D0L3C-3?U*Z5j2K$u&m~wjjy79H{?4e$cqkb*DjTqpn zKi&Qs#7P~)C>Z1`#KHOZw%dzYb^-k!9#>efMAa(fl$G^QS2-&*TrYv;#T;|k>1Qza zKE@hg$2srqK7N!wy*FMq;f=)e*SFTMeGLecoq^2Z(DxE z7%gQdRn+E->6oAlY{+=1{T4@4fJMengMb#xeeohvDhgk{vH+8E*v>rVP^*Lt?1yDF z^U%W+<7yXBlU|(H;CZE7m2sqgXoy-FiuAe3)^52Ot~`wyM+GeSB4I3XCBLJ=HVmF! zH!0b1AAs5+hiLt~+$T6T@Ya~)@T~HAl(A+*{akLpH2z_ZwZQtzxaepNEv+WEML$n| z{ESA~MJvw?&H?h2!$y#bQp^rl0)B@kGzp8pG(#W)K)d(`Hk)NCQPkrY6Bk^IrRPXw zGE(HkIfm)^B#D-j#^eHmSuJky0}mpk=Dl7O3|}QB(Y3bny2F{T1zn*qf%Q|&kf+`^ zsX}Suhx$mnVYaGKzlBLrV?#puo4-gvl4CfMH->z8=GAO{~|8=-iTm6&E@Jmc3Lqo%r!`2CncubNB zoSMbCxECLyZtm3`ziG}G%y7nvJ*JaqS(TiZIjw~fA1hDe4Hb2M20pyDk7y&*Z5)P0|72|Hs+nL&}ayaY5~r214Ibg>~RHH_QEC`0!x`^z)}i)$Yasol5)PW9T5_H_(1_Y z$D?&4sY7AS;7=+lNi>->R@-Qi2AzkN9`oL}xP?2P`8_tQo35Aaej~`pWa`noupezc z=6S}i7vz@1VXhP4int4=1`WBz#laR=y?u=~akX8c-}zK}H8JgFHFWm2Elj?!sepAM zJ?ZnDoLSgM$?Q&%xw7MAVD7p_tLGA6GF6jFtD}>gkpXM5GP&UJ&3v|H^Ry?B$usx! zC%V4A;DeVEkMX{;JEfx9Tlh_eQj_7jGlkEQwi78|jUtdnu2Ayb1wnf%q=<^~MhZw_ z&{H4xarFkQYAKRkGxzPwp(MS_(9S7n-J-2Y8vIFTx!?N+p&X|})|4R;F*K#-0Pj^h z+dqWT1EhHBJEoSf5VJVem|3$TU|{CzL8ew2;9NaKDd%61gC1dtY7B% zZZr0Vm#YwK71!-=iDP|L-bI``?fYx+6#$L^dZ*AgAa({F$E#OAVJ{2s6nfGQMIhBI z#?_BokpM>40+S=Q;uhRjV4&eB^cLIyibcyPzX<}tYxZBSc@Ofl0J|Bm{H(0NAAS3( z4aOy=sBaO4h!Yhx@dTJuq)K~U`*I`n->V4o#0SYLGyKI(?fq)v;2Pcj=~GtHDs4|& z8wx8wf7Btv1aJVZqU!G=ag}yoG2}XE6=ADj(P$d@soQ^t<9+ceH7C?P1#Si9;(^{S ze3=F;B9pcV&hsG-l<_{fyotvcBFN@|dnWMWcbA{z4gRJHsz|sg>A@cpw7l}RY;nHx zDraNk*>DU5ub2X>4;GR^l+2j7Z{G%&AqQ-h5GAAnFrUSfbqHQ^djy@R0D1lO5(>o+ zmi}jS`wBAnp2x-MXloCQjNr8msEs?5u{HY{;f z1S1`4#v>_NA0|)pTUaf|L1Mg4D^@bY8yi;VyyBesq7Fv2*M4PYIMzn9fez2tW-9q~ z{?ANu5NU4|_ue1FCry{pa-Nw*+uZQY2k>*9c(Ou$1RF`EN&7*v>FUVig%$=II$vb=oz ztIIHQM}~yJMkvVg=ICbC5RCG#j^m%*WME{xel&F69?WrCOc>3nofyf8EqkE?lNA!H zjlEC)RBh@X%x|gmj9fuHTt#-^KEz*q`ean$z&@hgg^xIl#~-ss`~loOR!pHmMzAAo z1Iy3J2S(GL9Q;>_%gv+dqSs*=6bkQMDLHa$LxTL;8EZZfVvbMXCzk357tHBsQXz3j z1?|Yk`J5Z0OY^zU2fzWGtMz z!0fVf*;?WMc{Zfda5Obgs?GW3lPO^iOC3wK&Fe^)5ZNA!^x4+hxg6`bIj0$|1)Db* z`L&s_Ffcv{xVXBK)MczrCSQMf373fI-1;)Ki5kMZu-{i*gb+9Q+er)tD0fD%HScmC z>eS%@KWlJsaAafz`kUCQD!8blp{cF1i?DZcdV03Ea%^R3NzH^34bnI<^*sP;cGQab z&orGeWbFP#3>h?jh!6%H3}HM0gR+F-DQ==>rA0rON-$_PPw&%_>!aZ=e9@D?`KsKr zH^ZpO%a0#D!pFtEs-|Xl?;dLv`39P$YFV%F{V}n&q-gmDujPtaSmdz$y-{Cd<5gBl zLer_)(!q~KSojeztl`T_pB}kJtbmWKXiGdfOB9hxnj7vbmy{-(0?-d^?iP2P*8SrJOT?AbN&e7|8gER>mHmg=}Tu z)m;(f<-Jyx$#Yl5ILwS2>wIF}RdO1dyF!UD^8zbPF_c1XPob6}lPn`$cE9rqThe1O z-$AHSK%xVUq?#?>0IvQXjA6a|_kYx?CF`R_N8zrM338A=Ny}7D#zRJhWH%<9$@*bW zw_GE#FpMAy{WcQIbV|);Gaqev;xNPW6X+N?{rF8noLfT8cVV+9Y;+KnMt^=v%b-){ z6WzOe>2q2J0bu8zU%;WBeC2y?dpc+JlsfSXCc)$Vx?^`}**DK?bKca{l(WrEKAOKg za8pAAdOWgkmIm|jdx{v?*jk0Sj*gB#du-*rz*Bv89(s3HClJ3GEJEe(<@}~S6}nr4 zpY{M~BDo!4$Y$|FQPi@H*!*(`85tQc990(c^SO2(;0cn#z6wWZPVjYn=*$T^cO#uSpw6$Hoe|Z!N+P{nSWb|C!}gz5eIbA zU^904M;{1G&s}?s(|->6eu)V&KNcm^mOf%Q{LVWJMdo+w4f>)CT}2}vWTL*OlKyyk zII|&nXg}WH8uH*;p5=}8i!{?dcg#k z+wjl2asZ;f0?GLuJ4N}$?T=mzKm3WKd3EV5oB7 zvtAKG+P%$9A2v#A{kPF!GbDE-jwmd?s8Q%Nez}^@jH6ieY;hMw?)ZB)Ovt{w)Q&3c zK`-V%D?K-V9FCwyUsY$9p8RQg@%v=|5)GtPVkQckr_NF%oVa>%-#QM{;tH^ zqyxdSN3D$U>b=9ysYe(`aHAJ|)uJD=e#*?sdgr^Z3#hm;aJ^i+-GygOuwLR6RG98y&^r3U7>etUMV5yFwRZ^M}R0A;h^8Q z_C||Au?B(mH9ySU51po#zg2-a!VxZFdUkfuNECrO)^vhT;*f;E#zKHu&1;jJA)JOc z>{X|((mbV_EJ2n98Q#HuzJVU9_LnvKS#uX$Sm4?ML!M}W)MG~2r11YY+js* z*cY_hFp(OB zZ|^G1cfrAk!3_`#j=&~1Mwi8}dZE6vll%O6T=ihFyHz|VD0so40tyb26mtJN@LoM= z0t*vuxr|i>ARiOjt)-b6C5HSo9lNm)f&v2e1G$<=mcTDqX$=lG#$!v+!fzgDyv0Zu zN4Cwo?R|VZl(CqyW>RNO`q{JlqRZVR-%K;vbiZd6kABF{w*l&A^K%SMJxyM5g-A}9 za_h1@<&|hs!GV-*;qJYAh=_-bgi!jQftNZ2IKNEA9>f62cNy1zgB97C_fo&! zPQGUZy;HUdj9L%adPDzN7BKHPe|HVunZN+(#w}hE>s+J&hv^J^a2p9`&lgou!3_za zpx;8Hx*-Zz8)D3!3UTl^$HWw4&j&2YH~1*A4Pal)=%ZCuY)(g7UdvzrlP5@fZ<2DTB<{z7`nm@ikfZVy=pQ^<&x-|Ck6;*1OkF4M6d6WE7J+0t*Lv*2iosGXaVLF#U|;}5 z4%zAHzK2fPmPg-bA)#e1`>Dk(EQ;Sk30E+@1-9eQ36~W(d`a$(-1%(~_8GTjU&HZD zY2AI09cM0y21y3Tp@qTu7UDcc<@o_CtMgC70;F!mEoA${=qB zbO%7H$vuDXrxD#~8?b1}(d#*IiTxT}9L#h1@&(HrxLER)Y|55oEKLGzX@CQSAl?ZzI09elSx_sjX z>90&8$`I2QjCbjGqs5wQomXB?7Ko?4|4>;;Y7owXi-*U>#Wk5c<_m<9(Q-T1@~m^~ zz=?vo)cX1JMx3s(Z(lV?-Igc2HP_551x%JL4~bi$GY=*FiD{q%kYZi6rj5NRawcW7 zc;EG%CUsqB*W2p4)`?=n`gbq;{nv@ie9w4I9Y--3)=OO-Q-iK9bK$}>wr?M!7@L?L zf!)s4OFO+C%(uNkhSV(Wxp%=i4(lQe(Kvo$#7Y~-g2x^z{ai8QO}+5(_aZc`q4 z8^p+=7fwKi_K+Ng7|ihDypNSV4iq^IEbn+oH@@Cx4CCI)uu=4iDSGa0Q+VBu|89b$ zSloSOV)XiXWE;F5rfYK**)=1^L zf{?dsI-p+=(wY@-4Bpm&tVyoDDg1!L$3boXY1#`siS|r2RaEc|DDE^sW$jZt_pt;4 zv7{?xMsCE(&ytSXlw((?Hd2v}1!p8ZIee`0^}fK9_kuek!7nIYm1XEtyv0~Cw_O3x z0V*hz4Il^2;18iBl(u~ZBR|I$FfoReu%-U%r+mfkLe*6r`NXV-KsSW=wB}%(!GzzM z18H_euS+S|=&{X+TNSX3Q|K-#4u&1D7=2RHVYB=Cl3|%8K~e)`&athey=jGkCwSB7{ zV_4}p4{JRr{(2W1N!|Qorly*O6$K<9Li7`sik{MWVGD1%7t{j3H0tO8MEp&-QFm0=jXFzi#sj99{=EaJ~Ih*zOm)aVl&q5EAn+s=6y^*KCoEDe$+l- z@o9cB#H21u>^E_qRZPN=H1dp5>2R-yJHGSC&rlrQ7I(Ji`WDHAJ5{hgphd1`woc{-E_{qD z|3drjP6M|KTn~E9;h$z}%fq{}vH}db>r{*spya(*cx8-0pby zB)_b4Xd;%@)?P505^o@0O%4vv`AyWFN+&}3vfE4`^%*(?Gar<|A7=~@+7{rEj-T5F zdHnM?%bJcKb9~*zud5bcV=TUreC5h%nRJfqAhd3=1D714Z6e<6lS-+9`@Oct0vc{8 zOa|q)=?s12^4!79IFrFO0@~6rfgwksJZI%L-qqNd*h61RuS^Z4GE4)PL3jnF5lB<3 zcqE>x3PQ&j=V63^cNwT4>%jws$nOWhUSM_LqD zlge{~AG!J8x6vz7CRUK_hHW}v(9mRn=5TsxNeY?;z%!kS8K}h{Ek2dLZ7=ptVd}IH z`}ES>#d14u^nqj^g_!QN)%Sbpu{NnVxwyP+45|WC)3oB^6$C|sKpOg%hP^z(xN7iY z0D=xU*#WPYVSm-y(eXkAJ>Z(eT)adJ*e^D~kYd3suc#>K)!4UhQkO18(urSA&a{Mx zVU-7Lo!3FU{|lzb@c+Ux4ajL3oW;J8@A?9F94dwk@WeTu;&SD9?L2PM$vC-B1Fe8l zBK2mgTeG5}?VEX@9l-|8mI66am&xE6G3c`BStf=ZvAB)9I zCQDOSC(XKASG5w5ZiHO|Lk`)?w%{uTK2Iqqm>~sh;q43P%Risb|7LcbEW>X&Aw^yAC-uF1({_Qxr@89)Z=lNMDkv~M*9rif*wURCQ zpRt`8VOf}NdB`LQf~y8vy3dB_iO8Vk`kQJnQ*j(FlDbp~G4ne!j2r`?%+7>FL`1;M z;7>wv&7VwBf~!-W*2Y#}*Vl(fY%YJlu0=sR`b%$XYkp~I)ZST(NAGHe0PVlz@dhLF zWq0JYK)~iKLT5L1ds)Z}iG0N{{UQ!3GuOtm-@%9^;2goZ{?H$G1jsPKSZVOWjbr=S zV|?_{f>2x#AHi;EyVJm&Xww!>0;r2IpxM4pxVE6+&zXU=EO;|#rlug%De8u-M$WHp zfqD8|$uXZcs!=AakG39+`o$FdIq;;diF-9xU4u)&)s@fv0_J065a-RC?CTIT2g3Mf z%#eD}NSp#}0CvCc&f4qOvKj$8XcnLpz@mhU1sR{S(itBZehhS=Wtupszn7(np~FFX zIn^c=5rOJk_+GJ8D-ZE(y)kZ!pE30+CV5m822JS#K7JsmSrMts2wUYjw>p;de2lnx zUo2y|`Jr9Qjg9RM!6oH1crKm+A}i{VhZC4Z_rfiw6mZYdshN-0xz^u&i6#P}_62~t z)Ye`R5!r{7{d0a)O)zQJE5+6Jn7n#(4kr9rHlyNg5C-24F?!atxJ87YvNh9_wbqZ9 zEM|V|ucpj4u}eV3}9)bB??k(GAEp*_+mGgHOuL`<)2wVtaFIEEr}tWdESHzE92%y%bABu=P@ zM#xP(q%_PNEQa8naUs3a3`SmV2p1kv^#f_-eX<-R=m(MPIvU08jH(`-L#IBbKF~V$ zzAOSYDjssoj25@5hcR4jGKbEUW;ZMDzB4kHRebJM@$*!37~-phWlF`LssuO~or=f@a)~E* z@KrcSdfJl#mHd1m1B{`fqO=ckKobHnk!y!~yW<)uOo>f;PbDT#a z>gJ>QKM6pz1Qi`SKyr7#jQyhm*7NO<*Om|7O2hzw99QXBcim?O%K>k~-d3z`+14d?M1hNaM0`N31l%72R$wH713brU=&!D1ny`I%W_W1G z!qRep5yw0CEAcLjPlQ%;P_@wwmH*sGdF0OB=7!Lddw?gK@s~Z)!Qeo_$_UEK77PUR zZ2fSWpjoPd*>C~&9$+vK2OrmsZ@X5wh;U{8tcB}RL`?n~$=!!~MZN9usDa3Fm6mGm zXXj%Oy)P#tfWXYD5;QS_XC&5+aK@R3VOKdmhNCiI3295%#eyUf2&<+S8a+0W{mz9t zszj!HHx6G2hjrcx&s@Aqtq~QGennPB=INW0h#*-gwCy2N9!agnz%(iv#;NBZyLg&% zP9<{Odvs(k6a>i;2dBP{U%YZ8N3Jw@;kC~8)O15-J^JeF^N&%`=&m_CJA+G6{xZ3% zHVFG56{{KI)PBO-+3u|aU!cx?$w*>>I-ifi+Ox*89h{0I#i74a_5tJ2OvQkv)>N6X@!kpHN7<|xAk&HwjgR8HWEcE;$#G! zOiPO-H!QD__Yb}=XQ1hdCMMWsS_jj~-WJc(v%(&IR#WW(;>R?K$(P3IQXK5l!anCN z7PsDwhOfUv`4>+@^RdQEHWRA!w z>56A(@(DnZ@G||E$%S6b^e`&k+g|SF?s=bcm5sTv+rbzGJF<*luc1nB*45UAhJ+M6 zcmTUU-VnAv5VAL}I00z|bkqqVBJADTZ&@#33@zxRi@5Y2ve}UOb1LAcL`Wdh4gfI& z)v*u^NYKwJ!+=_A(Ht#^!0Q-Hke|u$_?r<+Ut*0ozW|C6xL3>%%jGr(qzO7`G=$eH zEvB9U0H+*Ynr*MITZW@(o6RL~z=I&j14u38xBX($ucxc;I))Lt+rm1feytaXHN0NHze@;oBMU39)IP0Yu5 zUglNL8JN%e;>C+OW(iPZhgapb$7(7{YiKBJp`Zq>wUiS?G!Ou-{;3O*b;Aa3h!~G> zpreA4-SGJ>JG(;Uqmt>OOta3H{L8N~DgLE~RVq>V(3XAlWB}J39TjycRSEb>z#HlN z@6u72Zt|c?V2J><){mz?Ivw$uXlB4&E2wNGQ&AFTlPPn;Bn?IfxhXXzQ$%nII1lJ7 zMjOb<4{wo_wxEN z*Ej>=Y;WoNo0)w95bUm@w)W7U+jB+Ep%q8`pW8v@*5D-0KobI4d>%xXAjWkCB#v&!#%dqQXOBOsv}r!P<^b2NozjV*{SiTIBNKlX-tdBgq%&VogN`{S zHgs04Ho@b!`m}@0X(IkRs3eSLn9$1}`qgIm+1}hwtp{bv!S17P+mZ>FAi`q>)jX%Z zevCe|g#M0n-8?8bVFK29Pa9jv`vsyKOx>z(Ha6-Ba95{qX%bu~yK(g@&i*ZJ5V~J= zp%0eo;%SK)0u| zSd{)=n_V*L+8ncYCrTU499#Cif(o_&#_H-vnB21t|NCM4?OsYs1V7*1fq()S2V}yP zF}~U>Hu1;GpfI|F%oaFN3{Va=>yS;JoOdjwgO@n`2eLXN!t3QYgUio?hly{qfeeH( z&2hTuv^Z&tD!H=t`dWEy?KZa9R&xxE5X9MigpLLPH!3PblcBJ2)%1F8Lxxf>p=$Rue70KxX3c58mrcry^4ToI8gRLz{zulxlQ5H7d0xGf_%<1 zN@h*KAC-@KH=(idl;=8Kqon;}4NrmHf(2U*{i`jZQ!h^EVL}rKbZ0uC!oa#+c*ttV zs3BqS0OpQD<@-b5%#6O_yEL!LbT8EfdP7WoJTKJ#_jHc%E<+Yt2d8?Z0egm4a@Ae2 zXD4kVgF;mBDu||FiXZgDrAJFG&~iTqGr3fnNA#iTj7$~CyFeUbQ&d++y%GsWJuK`E zumRzfFJ5>oF$gWvqe&Fm_x$l= z(gn5GZ}9Wr-r_9f``a&RY$BABbZyl^gEzWg>@ zOiVz4N*Ew25YX;xF6diI72G$Iicr6OQI6Q@Z&FG#R%qLd4h1CuMP6D$%T1;gXWbcd zmKh$GDFv+W=zaXqj@*1-8u)3&SG_A0#)bXJGkIybw2xQZ7O=UQ z17M)7IoCTUc4~hXb9bpKZZ)q{kcosS0U@H`{SDscwR8a)UX}e`Dzf;;C8eby`ERoi z!>sRQn?NPhFGY5JN`JDTq(FJ^DTq{qE`W6FC>;c=Szkkg{$wVO840?D60s{i#n(h? zOCxD~xHXf>>37Z68w}Oe;~}uwyQy{Fb~h3d3DeT3KSk1^A%d%ZE-BP`N8~13`sb{; zajVDg2sS@^i+tHj-L_$65?@P8jLSuwj$p6(z@6^?pUn@M=+B>Liabk4M}&RCS4?Kw z-wqAZ5kk(t2O}s%geh>8Oa! z(NdDRS8a(--o}8Zn(&3>jjj`?z&j7K7C+s5eb3eoI}dK2uMIf#vPhk>FGQ9@C`Vk- zbkud*&7;DA6pW;205ik2VeK@Z^2E=X+K6#oUj9$JFMKsMRI=54?b)qU0SY&B@{r_jvShBpuir+D^EL-qRg>)^1FW=dljP>_yi z2#^1~rpBUW8AC`2+Ys&^y$zJ+rN>&ad&|+}*_P9TQ~TGe=SIgP$+ORm)HoR1+Rj5~ z^bX?T8}-ZnR3EBg-TGpcXaNX-ii!%r*6V7|Gw^CXq1G9GVw}>(_XG@*r;EUkf~xYK zLC&1O1ZkmejDnha)X)S;>xD8@HCvR)_U@KU3g&HAc(U@0uokwzv=eRYjqy9UEqpR& zbK`lqS#}@zrN${ogkN%4&WsvA(I3vR#>??Cr2Idc)k#GG+EOiMkjZW%vDN@17BjvLE7FU}l{9y(&O07q^mN^rIh3@bhPG`*u`ot4H>&)3Y)c38_7J5YP69wtZ-`}>k$F;3W>o*m`qR{@2MFCC7 zKVHK!OJfanLF21{XC#2xSYZJ$yFLS)1CTKdm?7OAR{8}ofB_-ez{AU{5i(M^?`iAk z3>X@ygxX9!v-=p%QKEM+UjSlWQDdnB9;|XMi0qu0ZmD02S&!tz|DpyD2{@XDzl8<4 z73{6tkag20+#{H%7XQh0YGEJ!9r{j3D^ythhuNmTmSEgFRrd2+Foqn{VRvjecCG7M z0jweOZx?Td($&(aPBE5_MDAs|(abIIxcovBe<1e-ur^3vBqzK+qO-~)w2rg8to-Vs z9LS5*)k(gQmHAb+TsNF=y(+T+qxYJl?u;PR4OMp2!Ol%Hkf`ck`nBu(zZu+ll-sLE zo?!$1qP!|%C*1xVeVU)~r*Qmx2b(FJJZu3GX<}(;o+=hl(SFJOh=^~A9hx4M@T=bw zW-*>Xvp>@U8KIO|z<7W8mS6$?2k2)&ZllQ6FtxbY2&uK6Pa!Ldmy@}0v-8EL61}^K9uas$qKZRkVB7qbKL9%-IUDaLkM}sv>c~9n#%}6XkEOTt2zEqNtD-||?*#=a28omTY zIet7@@(l|N6GQ3`ADhg6(7UqZo=o}TDMv;N)xzb|n~Rm9D&@%rs~)c+uh`sZsRmS+n5 zu3ta>RH6pbHAsdjPb8c`n)Fhap;b__jggz`M;%O(ce zNu-JXbhZh-O z@knt$A_C7$N(52^+9-fd`GdV-b0$Ue#`AhZm)BcM@NJm)k=M$UJeUl|v;gt|!BN|J zcrtc4q5;D|`AzVF3v(G>MItdVD!uY{mdzs4jf1YI?BBLdT7uRA^kW}Cd;l>BmS_A- z3ji}fhy?Jklr1mn9vdY))jK-*rSc8A$As2GW&bpGar ziTjU%>sB!}ANDxeKSxUs+PS#Q)edvP^tT6IYm3?Jq7Pa>MSv=Bw9(f)EOl&b?EZZ! zjo1HvN)a$3a(Pe=_Hh0JTMhgR!zJwlv5Tg}_(y^BVr0_*?P&uCWdl=&LcXhB0foQuVJ*?rMq9UcQ@ zHXy}(SV@-ufoK1i^iQ(27zycY=TjTh3Lh-BU(WQT!xXn?w?-vJU=!N4|JsDJ)&yhi zSFn2S3UC~|EI)L#w^NDwY{7ibo4l!zyLtD2*V$i?I-6(&w)RrPrV-@WoFPAXvcj^5 zdZ&awK~qyh!@w(F!`aJA(4DhG4k3`dA}e;MywX5C?HK2P5_T~R^tO&?m4w= zFBq)$=JjiEt4ML(X;jL9WANkqJows<)NuW(xZ%KT1VX@B@fkOm*%7&+V~^a7a15vg zrJ*+WKEY&H$=0zKgDNl&V9X#x8cRhot85IN>=(v&Qde9kIUbz#eb!PU$LVDIJy*cmH49*A%eH@cFC4bm+E0XF#)7rF8<0TS)RBf0TWepd&y zSb^Dj-Rz_Hd>{dE|HO|BlD@37tB2zX_gshufh_(4g9r)1hYB|W6~t(X5}=y zZ%c^VP|n=&Dt^RV&>luZxk>=M-|aDiw}my02}%0#7zy$x*-yRFG#O%`tYrw1+jLSB z!%axXbY`K?wLcR8JS!(SmX0X^zZb_8fJ@^IN`UmBj3h7%zP&Ql@o6`@HJ1~g9^g9Y zJ}Vj6+=GMGBUVDnPWum-x?`S0Iz zQLb{%VzxaoMxiHr5@km95(1TwXi(Q@RaG$4Dp+HRkP&e?zfD$TA%9dRx%negg&nVTwBt!gM@&F{@wbDo6=8q9UF-Z?i( z94LT|;HZRG*12=8KXoRRAqa1FTM&9ANsR6oGB;Ulh_9RZ0V9prFKB!zEsowj=-WTp zGzUH^`=yO1tLYPz=$Z08@SN7$Ke!R8Vu*CgaO2DVb8f}s0wYaNk$Io`QU!cXG?zi$ zLfey-x6|?dA8j|7$O~6t$|5UkadC0DGi0EN_-w`5tAM(XDq}F;4Y*32OfVKE^uWZs z9h&!0^2Z^f&-ZfB~6(4oS0W{tZa6H)Jtj~AywLb4D5XU`nAI!4P7N$G#YJ? zYC)8lt{t!rgxyQ4a==VK<{6@*J2qqe_rAh*ecs?pctF9&rurNT^aW;~of>tL6?VG2 z>6Xom-!qO*(j~Gs|9V?c)48ys9I*iuuEeim=yC}u4Uh;D$8d2h_P@Yv?t^@7fd2~8 zh;J<~hjw2p!#(fB;(^5Qz-Yf6g+V-g_Ec#F*`H)n^YPU`XtQuGQ@zsTcCS|FCloj$ zP{renevvX=Q2uNk;odwF33oqoOkRwnQT`i-mc>hKwEkbXOxUlkE%*WI5md}FT>OzII)b``CIQG+*6^Yb9X&5t6&B)7ODDot#O)&Bm>t1By6 zqQ0H{v2?-EXD=erT1!Mbbe$G3JgEGThe-OghP*aD-78#$WLB@($eK9U2@2JTL--^$h;EF0ZLG#~nqEZ~iZ8CC`l<)7snn z#cOBjTNoF)f@UM)Q+2B(3-(W7B=mG_LN5VgAnt?BRF{#~YJS+y-ESK&X1Yd4sMVw8 zJ>cn}|K(nJ>h0fg+Rl($bGJl%>m?|6nDXknyEtv?e;hhyeWa6RN{ zKC{+sC))TK66B&_Q;_w8i=x=NGF|o#izHc8du-k9m!O^cO~QB`?0E_@(}$mtA>r<; zb^fLTp_0ajJGzZxv%#z>KLm_VLb8Y7-7B|-)ALmANI-D*kT?~|UP(O}7BOgk7j$XH z&6f~eTGP(_BZ&WDTDqVtFP|#ny#d4bIyk`uHKVHncvQdg$aTa?B#`k~a{egmi2;v+ zkujt(u;lS$6-M#N5m2waXTT1zgdSuz3kD!BF4}(~t5*E33i!YGCg;;fB_)@#7|a-8 zXPVPJdF6bW;4QK{+bbE|8znAsjm)R&R&Z=1%>_)P>MdY6J5_z@|NdDmQrLsU?kk3& zl{dFi&PU%n`n2Kp>K`r2eXfbq#7JTMl9Q$|5MxLz#F$2M(<^U*?&*j?EatywD@o4s zjl_mlot?g8uqeS)RpK!%xt-g)_GRhtAd>ClyP@NNh}Z`NXZ1JxCJDX?SOYA8h6I_5 zi4!w{K)`RS^{l0Z#ZMtD0nmpauB)z1jB(=W3ShkawziwwgJb}J$}HbBjxoIQCWV`n zoZNM5*|d)b<{#72(zfXx#c;d_lT05EVmEBuqW=jBOBl3BdOJT)|5v0Z;YE-ofTOW3 zJ2CO=+}w7c-Zdm86Na%ti0;D4>h|iBXV3aCj%~7_c}pl7!U#x0m;))I7oW67AdYc8 z>O&qkJp%)%zX9Zsc=r1B>w%SpY0S?`q$f{?m$m%azqr{*^$8l_jo_y&f_`||BPKi= z)EWdRye)8TVdtM}GA}oGoY@yImt;)MK6k&$A=LQOnXQK_YvN6e#;mvuKH2hN6p)te z*;07<#b{G>#7ijm+psIZ$E9`(&u`Z_JNjcKm9)SfM*74)4P5K}YA?^#$=Ibdub85` z3J{Wnn7;-H(b>aR;t11U@Sn54$(2zwn=gd3oT&S5D4eEeS^Gd>}hr;Pkgrz(kxQx z$+(iZ$$L$=jGnEz@>{#9D+&S=WzZ~DpMYG3!<;rCI_c)mz#JA9vF#3+M(FN`opQjZ*=)asj-@$CvMpS|+3}GD!^Y?MXkXb|jv|gWJibHtQZzqkvTHqfb zzr3odRWIcRWMxEMN(4aCIKRXgC9l$Q9}-H`jf`k%XduVvgf8uuqUq5t{FkXMlWi2$ z?5Wx6q4{9`loH8v8&wd$eW`}J>4U}C7`^vBEPbib3_?vcy4bx(2bUxN~x*!!9+uFVeL+JkalEz zJzqZeLH*fV9Z) z@bK6QM8}>=CNcxGAN-lz1(2;FNi^+F_d%`0BKYL<>xe#WK|VIZ|dNf!yymq2O`#MIxr zR;6E6#d%jZcsg=uqD=4*y+R%z9SB%pCEIiii2Y_#t=h3GAtiS58gE+jV~{2~CDqHw zKWpsaXi@Yn(iVABi!wmq59AQPPOrTmvX(1U;wSg`*7+tBSm>T;m+-mM@Yid4pAOy^KgG@UXF$kmvGvAhD5spFa5=2RG2wLIUO9+MMP}Df&;TccAQ@@L4@E zTX1crk||+()x$ByMe}U}lOjYK%`xxk!?@v>?Ok2wV)PXrKg~dY*a-dwNLH7KTLF6j z5MdboEyqmB&*7$nWH<=oNnKd%Q}*XJ=xA#u&w%5l!#h5Z05Aw{NSR4YNNDknKWLTL z2_Fd&YJbTn^!&)Vlt_Si0VtIl;wHxzvcO)p74qQTdq14|!|dTQB-? zB$SeeDDETM%kKn+V;*JZKX{b5BOWD#8s@}IJhMCfREE!af=ex`Gs0HJnt*lzDxMDa zTJE!T=D#d4zBApYo|PafvQ3HRx!{Z)2sdvAxzcTE={AIzSgj;nTh&E`WU)yDok;i7 zTJ#dIj!cD!Q}-lDq#0n8WWa5>XsL;(kCObl>%&d=emM9mDk-(;?#^QWPkNw>M2vOo z%8RPT$%U{8#qW7TCjDmBUyQ#5LgxigDALj?zrvh^Dj1N~;HSrP^5U0hE`ZbneAo%L zkqbM|_83}xAL}aym6HcgA(`y3UGM(Tdh{M=fD5kS;51?hEQ(_+@|Pz?`|Y!|AE@x4 zhBD3psTx-gky$Wu05E{?i*$4^Lz}z0BDZQUP5gH%qM^|OGM^$cGM`KNS(eHsb||aBK>3#jIci+&FL|zfO*W@WK7cGJnz*MW^n7=0=s2V0#IT+V__z z?B!*_S?kY#Ry1RqCw-DT*kSz#UnF=QMUzU~wU}`ivMm~J#qzJAIb}mSd_|=raLK1gB zHGdQSZek+aC>1=EfjNwq%QAceasWA;cE7X*bt!$gTl<@-gO!w~Wg%j1=~{%CLc7Ri z#+VZU4Lgy-{fWRe?EgtWaLGx}aG9mNAI=(m@Vtss{{#hx&ZAP{N>)xBkjP%*<}L^O zp0FT_SZ}r%Ou>_l05y?@e#mfzZ5b6Lg1iJ}2ZY-wGiw3>XKtQvEkh#_CkhSXpPxrz zUi8Ec9g;CP^iVmEh)*3l5gUqZq!aNM#ZI3I4i0`Oj0WCBac+`yiY^#r4WeEP#@oMm znED!bEgda(NyX)i9{Y$r%?C;_!G`)NlC5n9bN0eyArpeGR(!jeOO&2I@5PIB0dQ)L zq)41N#TznGwE_x9$eTI&qNJqrVZnW*Sh(=TxM$f&n*85g)eW#eK0dxD*T7k-U(OfK zg2R_xLR-IF6cB|OE_+1gb&;Gk7L-kSuj`Yx4g%)$oWE{EHul~Nd6<*G;|0HB{ztr^ z4T(`#NwwKX9-Wk=?|Te(}FU2A0#8N4;8Oo%}J-f?C@#f z+qW8vE{b_LExo^!1YWnb5sQ`8KYvaIP8QG&_(QPGuZysa9@&aYnS#|NB@q*W;p!b0 z`sKIB$9}2I2)wvg>9O98jNqKyaq!E-wo}DE@6XclRgPYdE>N zAuG!rg419m7qed<>u0ExQC}QeR?sC-N|=86`8njJDL@(FQ*&ueRm&Eu@Ksj08Ek&V zjZSskED^ay$GYu|I}Go z=|f+T*R1z)ZV71%R+__(&Ospz^8lcjdk}67)XOuxZsP{hii%w@Ck*0-Odaq1^atD0 zGCutaEy5ZLHH$;F+}nH;TXZCC^ss=hFM{_LTnnp4ZI;0Jm}!#Vl==em5f~36RUE|A z4Ufr?`^ymB6#wmOnab=!pks{VgKia?r-CL0stDX_x~rCxr+)smq5+7Ic>9p3;HREf zBu|!NMN&M{*2&V7#%}=_%yDpg_0S^?)h`IrLF9 zH}l}4fBD+r0n^W-f&y_%-{sE|AZ60jdC9jY_5#qjfiPk8}#stUd4Ed1GT|V zz(i-P#CA_D$=rGkhS-W5fGGaYWVsHj+lRH(H}2dTXc4!vDgtZfQ_$=khq{667a)gE zaGc(PL*q_8W)0%cXmFfF1FihqXH$UU=+OOgy~xivG$>~ZCNI!?D>J`?(Wj6Z(daa- zu;VGTkM{X(+Dn7`Mo21cPHyhx`miw(5z*$_+8HswJ(yEO{{-WziVE~)%$Hp?#7#o} z7AgG?zGcAp$Tql~932Do z)65Kqt73=fnk6t>s&3fLqypk*D!~W&uVpEqw%fsP^>oFsU@D7XL~>3Z?|x7`OCgRZ zwuAeWf(^HrILgcC;_uC{IR8iB{?ArVa0;$-My{bF_43o8ri1k-kdQ6_v!=pY zyFa$4F3h*qh1LQ1-rI1~P?C{>G7GF0{@^ngWBv}Nb*ssU+b9%)A@XZC(#ezmLOZp}9zhp!#(UwM~0?7ZaNaAC7$+D|N& zsJFIh;zh=0(31CC&tBgpCa)_n1!eA>CR~s+&^lJ3@SO(fhMs{pd0hTVrn=sVFH=)h zUhB3WEP+r|QzNc+3n5R1T+hCr3JgJ@u8qCiWvp?rdt$=)T$6F*KGeLN`c>gm7gfId>|h(laOoUB_1JxR z>`5Nm6MgsRZV}7+ruW_6C$J?QP_4b3n|CmiqN!S7_`jMTG zis2{0C;fz?rYN@t9n|dI*@*N;!oTQoxOE3pveqP}ZD9m~^bQprD_p$+pgNeuq~QNx zuy<`^W9ICQ+^-)1w|&m<{_TUUM;SB>7CWB1$Kc%~?gkZ+N{n#OYJ zcx2sUFF6ZMZLi6c)4SkOI6+AGwyW!_qSL@ox`@bFucp@Q#~Q>I3(4g@X)YHU{q}bt z&KlrALn?Vndo9*WR6V-0^$93^q3m3j!XXP*T~{wka=bm7*f-hh<(GH27djQi9x9RC z&b7@Hbd89Kp$Gz?67a{p!puw>b{t(EqX(8J4ND9o! zA41rf>{^m5>{{x2xr$`9R8-!=JOfb(p`?gU7cnvT)iY=!REX)E$QfIlBGj{{ z603X_#t5S}wLv@B*=-FIp34_^76@nTKd-`(2f zj_}za?W7pEvN#l~ALs1Bwr%j%H}{;`Sl!rsFPi$tj&=B$OraQa!UA zGDo)kUU~~qPwDbiwnGuG3R7sa?E3RU3k#>gv=0hiy%HG8z9&VlW%B49Q|t*_B>xC* zn5BV2{N%&6A~9%(RA7DK+mv=wBz~eSxCNon>?uh}RdyfmC0FaBUg^<_t}iadlClei zEM6G8q8=Q`#Wjut5tMcljSZLbN`Y#JYrRm?#bphq(OpxsZ}Qm%$Zt(7J{g%Rus}H< z|7*E3-uu&K;IYzkYANqn1-LzTGI*STl9TmTCAbOFKT%LF31psVX|Kkm8SW+i5Q6+p z9e~?3ko4cXcPI5!1pVt|ck?)-*37@78Ijhym4eB{rIO$}I}Z;;gxsy?DiyZM{NPur zbX{$`H08Cwn$s3%fko}OyeX}Zue$wtQ#90IFKgSFD49V>t18v(~?sZf6{T9gyTsLe9t6udVd3 zklLQZ2G1kpc~yBXUi?aVyDkr^W=ZvZi3q4=;X_skZLY1t5F%JA%Sf9FImr~QMhh9& zd%gNOij0P=dV2p{&J~d6d-LXZXf(hy3x)&5(tsG?Ad(Bb^9H9nr*cthTorRb485u~`Kwbh2FkjN8}**Dp8y(4PBYxW4;JCf zb#qx^ZeRq#NIH;ZXK7zSR>XF^uDU9o`SZu5n{PBEw(SMWWJGvNiq_D7b~?Y`7V-Ol z=34Ec5KE{)I1yTPp++dQ`v zMT#@^x)BpL>$hHZozYnmqs~_!t8cz}gYnR?{cB4!UZ`dMHkzI8$(#p{)1h~qz?aU? zUjuD&ByKTBEeZW_ua$2(dz`W7(M?!XSWvLc9+{uduuB{u-lMJ5IXbGh(;o=7--;D5 zO@R=(yHUslBn$bn(P`YKXo~QqW!Ar40aMJjVka{*a|LhNTPt+yCumMujTfDU%B!lT zvNHr+=aUT31KwLqj6cTWQ-tUYNq;POmpHh%kPp1_1FAb1?o;6eDFjC!S(vtf$*Cyl zgGeCC569`}227~pBAJ<3{)uN}P*AKL1y6^>+mZS`7-Zg4a!prLS6%IbxF01YrE7Zj zM-N@z!3UT(R}c><5^x*|$=jEwKRmVjP&GNu6!RW(?b~~L3g-E z^J|sh5e60Z>rUWSg*nHH)vPb4J^8ADHc0lkzApd@ts1LdS{}S=CVolj;Zd>2Ufvs7 zbag8Os%($ySJ+C)AFAX@L??6c*R zg1m?UF0QJY8mpf`T|$Ma^9`zzOE3tEo<68>YJ+tlRNoBDK3}-b!*q2&@B`@IMn(); z21uqOCCv_}?g=4o~v#z{d92%*%`LCnN(JP{{WZ2OOtrSJ_E2TY5( zvhV%*VgD?qtqLZ!-$dD3?|-dlA6At5P4Z7h)?O}`aq=I4Pbrq)Gd-@;$xiZd%xV`D z{bi-4$huxC>S%;$n_0UgS%`T~^0ssOaczEM#cKGr568TC0|W|}!o{|~JbBot>q3U) zwX=U8mgrF5KArS2bL<@co5%8zG^?MlOy5h;VJ2R7*Ng_+J(1{Ez`;b?{rlIhU+2=R z2od`%*)#9D&9?wZ&+_NyQeo>pI03QFR9e8Uxo z8Or6x{AG5t)-}Bi)6@?KZaddLT>`_8`uBM#4ag8hilgIl)TzV$_ndt0d{ZAT?OA|N z3EG@~0 zjvk10f<_(sbI8~*m6&e@A+;-mduJ2x`-{nM~;pbztp$&bmY9B^&E*PH4el+vrM~|Fpl`d*+{=L_pdXK4L zgTiHqyj5>C_qSIDYEt^*2j)vJ)ELXGkKmOh!?<$>r`=@x5NchhWnAiEc!cd`Le~Q1 z5YMY(s(csAkrmk2a%K}3GGN8wnr6dAnV(y@w3Ys0GTe)WCf|PJ1u(PkJZFB?Ow4SG zRVfJ0fAUZ>Pe@C0LDOZ;ROe&y_2#S3Rby}>PmDw#%zTSwI#`37DV8p8C%N|MM4j_-pmR6E&+d&nM##FLrnY4wj$JG_HU=6a3FwQdVQticcmCD$#; z5J_ga2D2l8kp3~zWSl#QQD|Z0yRJP?OF>2kdaN5jJY9HfjLjssbKQFe>YY=opTA4i z78WGqVx-mU!6?SU51?cVK5&8i4~(-vzI}V6kydJizi@k^R0;DxHqIt|d>F(gBPR!U zug;sBsV-v%_6zBc2?vGqm?4VkZebylA@kP7oWZf7&s@`A+9oENq{0Y+DmMdPjDP1n z$9&1$QR~JSc3d^h=PQ!vV4ZRSpjB0sl2nb|RyI7X0KzGDb|<-}Iop(j)6+jf*xxJG zS#qSEc)0rzj$Urgo`%Km%k6FGlhPb90zlGal32rYxn=ICR) z`z5~4t`(}4dM&(Fr)GbC=ny05@X&u-NM`*s4KcBag@sI07gYQG*>u;Vj9{gft7qL? zX_?NIs))_02Kt?V|F8wu=!#a(}g47e#QWX`j0{zyqtA)R6 zPgBs5#R&GoDJ@)NkoJ1h+&l^NQ0Z963s;w@w{PE?k*!4|Mct)TP1FyQD9TYt4L9T| z5ajF9sQpL>+70CLZ!~ER0^_8}=9n`~%qH2jx18p&ZR9@B#%8;^%YWn1nY_cVXAj$H zQ6Y!JMn9$6mi3kDg-&lR*60xY{Kcf`h=`rmvj^}xhau6N4o>|>m?8O=j1JwJNZ%0$ zc?S@c2or{0wY3#MrEKiKU%etr)?1ewmzg;Z4H>vlSFZZ`HAY9D7&3sel%c8{ENHV= z9}F?I`g&lpz{Ss~tR9$#0|%x7{FXPho^Amk zU8I!i1Po%`ykfQi546{lA=NM;8&83u^WSyhnt)01t|mbKGcXfmrQOtHkfV7Ez{&jl zx2Y+Zl=?RHVpvfDKO42%C1YhKR9g&PBkOBW%Ynza$@Tla`vGYeUy|el-Kq>JzS zdEnpDj0$R0rzILV*&s?@Z1W|LhA?O8sHXej*tT=F(esLvMtYxm%y+By6J?dL5gHdE zhQ0^T(F;@n)mZkV!6|_FK~U0broIa0u{F}snrJ}MtFP%z6YrmPs0UGvF>6WFY#lra z3mA<+4S`bYIsY%ig z8VPm?O{lUa(MH+C7ypR7qr-MBucbaDkjTG=NsuFF^ym*B8$U7JOBZG|xfGQxScL>UTA1D{fAFagWc>#l{izBYb?- z<>fhVFK3rO@z{}-X^okA^pH_J`ZGLr_E2enRU8fxA%iqZbSiRSX4fBzE0a?Ga76Jv z0y|b(Ngin)aM0*4om?z*vTgu13uI(S_O-Uc462l-s>(`pOw*{e6o*gs5Uk7#7UT_$ zX<}a>GQlZd%nk8P5QkK`By=APz2Mg-v)yE+!KIWPKd;E5qyr(2ygyQox;VCpQ^`Zb zeV)~@RHYZ9K8mg0L2Dq_(a~AxHqh5s_}Jv}Gw!KnbScD*SwF`M+^PftZRDt z&$!DHxw6#HUOkS5nvpMEypN;hrvBKQ+%U;eu?Z1Hkv!j5p;?U;;GjqlGY-cq)35&W z5VTbg9u7qt=nbe(oq|g7>2pWdZ^k4n%IdiV1=3ekL|8w$LpIRY+YpX1DSC$mHW zKN@9aIyJo$GY}vIA|V(u47Qrn#zu7{p_cq)UYm;zVE$&4mXjj_!y4xFMpuo4tt})K zcXk4ONxXrt77N=u`0}{`Kj>6pQ%ii0i&snx@?>XOSQhI}i6y7>+Uc~lw0!*}X3#ok z247WPoitGOs+OlK<*&|Ysb>PFSiXS>1`j?eFL?=@snjaN-#5Q8C_)Bn>b=%W?sJ7>Un^e-?SmPKpp3dO@XYRdvU|@^l)B=>GkHy5(}Ta$)YKf!^xpA=0CS*RD_>n2 z&6l)+E5YZzj0FQ>M~SzZV-#b;=FIWN$uUk6ih?b<-1%X%;2mRd;_$-^=JO3L zSA>KVvwPoFSSac|gQ+#5mSqqodjuJ-%yZT!MZyfPiyR!$$-n}5)WflZQmM3Ct*n@E zAe@&5YGU+ELkZORaTs+XV)8NoT%HlQQslI>oW3J80lDf|1_wskUcCbQisIe`evUId zKM+Aw`qwu^Bp^-31D9rH((zCRyI@d5rDe27%K&w4?s^IXi+tGo6xwU~PS%+)25j={ z>zJ6B1=B4wKJ!5hC#f~4k21l4zPpHGOB74ZXA8quFBEprk}JT&2x$yAEc7#bvHFZK zr;2^7rb>(|MBcBE!r&QG@*G9GqH~|=XPzfL-z>z^5#^Wh5Sup0}=UYN

)nWDaFhGYO| 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⪻?)upyH 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 Y(e_RSO8D!#FyfB}8;v$3uiNAIzu{cjVE_OC diff --git a/docs/uml-source/PcDiagram.puml b/docs/uml-source/PcDiagram.puml index c3e291d939..3ea9378a7c 100644 --- a/docs/uml-source/PcDiagram.puml +++ b/docs/uml-source/PcDiagram.puml @@ -4,14 +4,6 @@ class PC { - name: String - isPrebuilt: Boolean - - cpu: CPU - - cpuCooler: CPUCooler - - gpu: GPU - - motherboard: Motherboard - - ram: RAM - - storage: Storage - - psu: PSU - - chassis: Chassis - budget: int + PC(name: String, isPrebuilt: Boolean) + PC(pcCopy: PC) From 1df6699d9996b711a68a2a8d211053aa85ba2f7f Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Thu, 23 Mar 2023 17:30:59 +0800 Subject: [PATCH 193/420] Update component classes in UML diagram --- docs/uml-pictures/PcDiagram.png | Bin 264558 -> 278425 bytes docs/uml-source/PcDiagram.puml | 18 +++++++----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 7a5ffe5e607a3633bbecb1690805dfdabf95e977..69a98d62ae5b31d86a5144c315350e7617217151 100644 GIT binary patch literal 278425 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�Ws)?100zv%SAn~Ca7 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⩔(fuJJL}-lIhFzgV2Jf_XH|7~=mgPz+@N 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

)YEg5fOpx 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
!LzngDAexw6$^!5)5Cc$w`A)%O7CsG#)#qOH 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

yGV$VKP@k}IyvsPPcfZ78`e0@6((VFm8_}bl_ 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̒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 G`~N@IS CPU PC --> CPUCooler PC --> GPU From d427d40e84c37bd8743b3da69f178660a05eee85 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 23 Mar 2023 22:33:47 +0800 Subject: [PATCH 194/420] Add more Parser Junit tests for further coverage --- .../java/seedu/bigpp/parser/ParserTest.java | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java index 8f5697f930..f65d3eb471 100644 --- a/src/test/java/seedu/bigpp/parser/ParserTest.java +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -2,10 +2,18 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; +import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; +import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderInfoCommand; +import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; +import seedu.bigpp.command.buildercommand.BuilderSelectCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.command.viewercommand.ViewerEditCommand; +import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -49,4 +57,85 @@ void parseCommand_viewerDeleteCommand_success() { assertNotNull(command); assertEquals(ViewerDeleteCommand.class, command.getClass()); } + + @Test + void parseCommand_viewerViewCommand_success() { + Parser parser = new Parser(); + UI.setPCViewerMode(); + + Command command = parser.parseCommand("view 1"); + assertNotNull(command); + assertEquals(ViewerViewCommand.class, command.getClass()); + } + + @Test + void parseCommand_viewerEditCommand_success() { + Parser parser = new Parser(); + UI.setPCViewerMode(); + + Command command = parser.parseCommand("edit 1"); + assertNotNull(command); + assertEquals(ViewerEditCommand.class, command.getClass()); + } + + // Test cases for Builder commands + @Test + void parseCommand_builderListComponentCommand_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("list"); + assertNotNull(command); + assertEquals(BuilderListComponentCommand.class, command.getClass()); + } + + @Test + void parseCommand_builderEditNameCommand_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("name NewName"); + assertNotNull(command); + assertEquals(BuilderEditNameCommand.class, command.getClass()); + } + + @Test + void parseCommand_builderEditBudgetCommand_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("budget 1000"); + assertNotNull(command); + assertEquals(BuilderEditBudgetCommand.class, command.getClass()); + } + + @Test + void parseCommand_builderSelectCommand_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("select cpu 1"); + assertNotNull(command); + assertEquals(BuilderSelectCommand.class, command.getClass()); + } + + @Test + void parseCommand_builderInfoCommand_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("info cpu"); + assertNotNull(command); + assertEquals(BuilderInfoCommand.class, command.getClass()); + } + + @Test + void parseCommand_builderCustomCpu_success() { + Parser parser = new Parser(); + UI.setPCBuilderMode(0); + + Command command = parser.parseCommand("custom cpu name|brand|0|1|2|3|4|5|6|scoket"); + assertNotNull(command); + assertEquals(BuilderCustomCpuCommand.class, command.getClass()); + } } From 4ae2cc6a8f8c139d2fec47d6cf0c787ca50a2875 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Thu, 23 Mar 2023 22:51:07 +0800 Subject: [PATCH 195/420] Resolve #122 Update developer guide to include parser command --- docs/DeveloperGuide.md | 12 ++++++++++++ docs/uml-source/UIClassDiagram.puml | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d53e513ae3..be4c11b9da 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -7,6 +7,7 @@ - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) - [UI class](#ui-class) + - [Parser class](#command-class) - [Command class](#command-class) - [`list [COMPONENT]` Command (builder mode)](#list-component-command-builder-mode) - [Appendix: Requirements](#appendix-requirements) @@ -36,6 +37,17 @@ Below is the Class diagram for the UI class The class will first initialize its `UIState` to `PCVIEWER`. It will also initialize the `PCViewerMenu` class. `showWelcome` will print out the logos and welcome message. `updateUI` will call `printMenu` on `PCViewerMenu` or `PCBuilderMenu` depending on the `UIState`. `setPCViewerMode` will update `UIState` to `PCVIEWER` and set `pcBuilderMenu` to null. `setPCBuilderMode` will update the `UIState` to `PCBuilder` and create a new instance of `PCBuilderMenu`. +### Parser class +The UML class diagram shows the features of the Parser class: +![Parser Class Diagram](uml-pictures/ParserClass.png) +The purpose of the Parser class is to parse the user input into commands for execution. With reference to the diagram, +the Parser class does not have any attributes and only contains public methods for parsing of the user input. +The methods in the Parser class creates a subclass which inherits from the abstract superclass Command class. +From the diagram, Command class has a private attribute named arguments which stores the user inputs as a String. The Command class +contains methods that help to set and retrieve the private attribute in the class. +Overall, this class diagram provides an overview of the purpose of the Parser class. + + ### Command class #### `list [COMPONENT]` Command (builder mode) The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml index a7d19dcab7..f4c7eea7d0 100644 --- a/docs/uml-source/UIClassDiagram.puml +++ b/docs/uml-source/UIClassDiagram.puml @@ -34,4 +34,6 @@ enum UIState { UI --> "1" PCBuilderMenu UI --> "1" PCViewerMenu -UI --> UIState \ No newline at end of file +UI --> UIState + +@enduml \ No newline at end of file From f57cd839b159878f8e725b91e2c4024540e97ead Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Thu, 23 Mar 2023 23:23:12 +0800 Subject: [PATCH 196/420] Update Developer Guide with picture of diagram --- docs/uml-pictures/ParserClass.png | Bin 0 -> 17470 bytes docs/uml-source/ParserClass.puml | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 docs/uml-pictures/ParserClass.png create mode 100644 docs/uml-source/ParserClass.puml diff --git a/docs/uml-pictures/ParserClass.png b/docs/uml-pictures/ParserClass.png new file mode 100644 index 0000000000000000000000000000000000000000..f05cf0c669fbb428994b9eb2117efbb4323edf5b GIT binary patch literal 17470 zcmeIaWk8i{w=O&ZK`AK-=|+$cDQS@Int+mmv~)KJBHbm8G!p>{=}^(i`|Pv#IlsPt-}(V-O`iG8dyZ$^V_f69u6u>5D$8JFkYYd}5NtVFNp%PW85;sY zQoV-^Ua1P0bOXOwoTXkkzqYgYur@VwhRB%OnmQUeo0?D?dr(_AJKH-6aB$dL8`(O$ z*jTf_wzF{^=%E6)aJPiMaQ@fp5F~IP_w>>@LzT8C4?1Vl_9%Af?#P%NFiixCi-q2c zeb%{Jsh`ZKt1vlLOylj=`yE1uBlJs{d%Jn{Q|rimEC(fCg*TtR=OmD!V3uK9{Td~y zn=f_i&Ht)0N|$J=_x-pieKs))<(?d7iXPH?{Z36TS$+9-7F)pQ9#i?}$9yk*DnGnc(~`MYVLxqb+PzL@ z-Q#qhLo2R}eDjcW+4%};^R>AzNXya9gjatc8oN1)@4+1!D>wWX0}~{obxPgLw1k4J zZVH<gGE6diB!lIYVMjLCLz&tMreeyW>snnxfavE}AadKCp&h51|_z@T652 zX~@7Y2-4ae@RKf^0Q`*bR|Y?yAPaz0_A(%w0F%OUs_nK1?x!mHC!~63g zH+KY(dhVT{pL?C|QV3dJDa6iyD-A$FL0Pv;?jn}y^saLnESql9JBL90`LhYKSw9Q< zxFwfyyl);glDt}Dn9{a>cGNkLNx9#WrT`9W2-d=rcp1EEsxBH}AdCGwegpW17TRc>^;+Q#3e2b+nlj3xLDNvm3%sw{PA&C}! zq+OOC9X%LBBVqfyiCGZo6%yhzQl7f>tQEhuk;<`@f^ zFfd?HVJzkBe3aFQ^cf2TC+TQy__f>yhUF2}Q(F@3oiQtDxGt~D6pm%d=_fB!RZ;zn z?APsd?aPXobQ^c}*M@UhG-02QQn<`7jyJVyZS^@g%FX&yZKh5x{mh1F9zJ}CgoHFd z-)h=o+M9$y$O45ynORvQwuDNUH44to&&SI21sNIN`<=@R5JAR4GEB$)q$%Yi|IHeC zbDZfHB|XLb*vwvGa>9?#b|TMX>Q#4ql+7?K2&|tzqt5SEByx+D0w2H9q&w~|4&{&l z9Ssf5lP56~>oMYiXtCGue1&Q`T5XrEP^d{?x%3vI--%TD)V=&Ex zpTht8Xz(5EM6VOMFK+X%3@xg!4}!V7Z7)B*&MLW02cIaJQRlY%JDuN2I+B!O>o(&@ zG*$9r?Wp|qn8hE_hx*kPFRIM2XHAACpI?RE5V83tKVE+U(Yp&$LBT@Wt}!!vKUI2a z+uY>(^Yv9trp1ikn~ppLn0y>!|NF-@Q*B5*{8N6=geGgs1&LUdZz( zIN%Q_{d|0W~@Vky9^5hLtb89zFD^B4O14P^Tn!DIA0=_ z&#uLCq#!*#Js}|hB-4|{O4DADZ7#Pr*J*rqjP&%9l2Gm}l)-=f1Z{NQC{{5RC ze{;NCd;N|a9)ALdVW!W1=)=Q<14iZawarc4eEGx{pG$*!$Dj#p<-1?2P(j)fl713& z-8x(D&S{;Y_pKpU!Nz{Wbi;=N`APy-@_J!$F?TlXw}&zj%9#0&iE=}aTsu9z^mIIk z7`8KV9cO)gy~KO0P~SISPc)?bhg8kH z7PzI-^>~$4-;LQO@GkWB2dK*E&d3R3V{lT#qS>A-#>K}D5Y%;p}#Z+|M3Fy|L7Kf+sJ1L zroCIxP+sx;`2`7s{O6AHKeih1hiB2dEtkr?FEim5@$jyZo&;vZo-~MORH792q@TzV z@_^SlEb7+UdbqpGHp&Nn`t*tO_4m;d?ZK%jL3(0M9-+|rvqf!mbkEh)P)!tP<8phCgG~;0&FE_?QQy8T^MUmB@p7s!bp7{I zdER_y@>$A?jm5*o#igWFPSdTiE>`{c93*^OTU*yaRmM}(u&gY@?a424l#Y&$U5?8= zgblKwS5F7SOLc2+&R4U(wAmPWZ8;4JpZ0RJsxFKcYb>4j^UbPWv;|=vZ;oqIkd zkn&imCTggwD+-WQFM;Tja$C%;uQOk0oX`5*`oJ(LDs5*3em@0WU~9CPK!LzH9}S06 zuinv=)aqrR1-oH*v)Ad###lJN1!`~j_EhbNq3!xa)hgJ?-0fi@Oh7d*jbg;FzAj5@|rrb!2az;E1NG=U>I~AQor>Eb*|x@ zhzU!z8k27Pr*QnIG&FBhqc3qtxkI*++4XajV3adr+;6f8$=RNys5m+vfKn%0VfVYK z-fE0Rp6hbTuJw93*|3tk0#t<7o8xlU{;B7uziNMbhO*X}>2Xs6O1PluxSS!hqwLv=-+-@YC z#_zPUxqU8ABBP=Tjs$m`svMW)$7oWO)GSl&cYh1FFpCow4z$C^%MDi_6ZX6lRxgy! z=H|hxO>@SL)j3$|j`t=$#lgll4QDES)zZEVmtazNtN4jEUXEJ&)&g4`y}{L5{ke9M zaEzjoQohLdX)G361C6nlQ18p_+DKBK983M(-_6B=6wmDack!bW2WV^JY)#ki3%Tu( zD-;$M62HX43mnM*ZzFLI8mg3tr{gJ}81d@*9cCH@QICT>t1*~2vA({J(NMNxvYz#W zeHZRyo62hIiMWE=D@{#MZ-np2zOKK0T;Alk)P*PSeb~<@>~*r_n%TNj;mlRxbrD2t z@T=C2s$YP429(e$^Fi2sBabktQoZ`8nlX0r&`&R7Iog?N%xKvM&$rqoEO1}nRho%2 z_NdF)St(S>syxaNbgRpNF)I%hy=(f$UuKAz8tJ?D?QTN0x9j$#6nb1F-*5Lo{OX?t zFA1HvibC9#G|f5ve?Cr0N#QO9rC0a-VA&F*duyQr{<066B>Fl3jY$Cs?0bS$VOnWI zs|8<62%4}|t%1--X3qvBWm|K2E2s&3O8V12cZNDW1RQQ}e3A;@h)J1PrtS=H#4&mX z-=}D>pAUG!mozs-otc#Mv)*YHY?r5)p^@9#X(V2!JEkQ_7nfPLSHV*rH4Q)1M=rq@ zXNh3GbInizHvIjm60Z<54d@N~I|;(sItMz1%d@k+a3$iwk&*cPPDSUD25C;4N(Pr* zd>t=GK^Io#^Hp#^^au0#t6RppqvvPTP8IQ9(XeY%*I6P|3iQdnD zhOATj6JF3`P^!Zt;yWDirOWt(wW4NC4%wHuGJQUq%EC3XqV;3v_-7w8iYbZ$|KqDx zfJTyp*kV-PD9FfXlfgtXum%Tuzl>^qTLiE>lxXvzBX_ z0QC_RDvj84dK$Yz6eSciS?qERVbV>(XV1A0tTlgtPVDL7Q9)b}Mous&O@px@ z5+^n+H8D|&>!m79^5QBgDhOoWz{j{YTOAT{^tRoGxBSg7Lz!u$tu+g zb8{ygC0>GnZ4iS}v^m$_GZfyldsb zdl<4VAvTxroMhSb0SwK`~2WDdWU;CpZ8RL7$0z{Sg317Hd^8E+mli)q8O;qO7jMLUmoTrevKoX7eocaAOlFzR{zn2|; z==_`)DcJsfALSo=GTyBLDu(FtrZr0<9bK$*Zl(M4Um6Z7%>-fgnL zoB#kV!7HKMrUN}aIi|BesQmie_HQNF(a10I-ONh=kI) zm+_gIl%%8^+uPf_yP{@&B>RMAbP4J;JK-?#B8|_xFLZI4))7<+9~c+@gFg8$VAsD& z9IC7yICWppgNX7Mp?5-da;~aZ}b~>)-f8MDj@EbyyQaWd>Q| z$PA|i!Rz$tfu9k+I=n6c3an1|oN}mFPt@}L)C+C;PNgZyD1k@W8+jqVJzG*lm9oM3 z#i%)1Pq9b|hE-m+)d*qDpbfJ=ysp0E+_tnECdjtKTyEv-E5ddS;4`n+iM3^NwPl(r zDk}FgX7Dzz*dSK;M@g%ngxfQ?yGL@gP?G(!xJyK~fJ!jwHu$^Rt ziX&kwhpiQ|>YLDnJL5X!5rz1&7!7qoC*;q=T^GYGhBTZv88T&STTASH1$CcX6dyX% z_P%sb@nEzTu5jNsCSA$XhZoqi>Eb;Yn#(hOJ0pBTlapnIdLBLwbs<7INGD6w2!e6u zPp+FiUgnsLk8o&<7N5;RB(qz+eb2)i12u*yG8qitQDsAuVW45gtw05I&K(Oa%xV5**54)C-P2c zICCvgUlb?&l)DW*oCpv{TCzc7su0I{> zbo(nf#1}S^J}}4H@Jy7Yke!iCBhe=I?=8<5K`_FS9{j0s2abnI@oryo1&r`zMt$aOcE$@WKMTE6>qTHsF{c?(A#m{+*GM%>s|4pjAmu9`0P zT=}#uW^WB^f|(mz-B<4caLYW-$r4auG9j=x!o4146Fbsa^v5?@RtUB!0uvR!I*ndUr9?Rmv1Hma;3arVWWnEh8 z)`Ef7cvO)L*1hdRHn{z9`@{ZT^F_+PZti7oxIr?A1_z$SB{(l0faxG)p!2@Csa~eB zxo%#d_|zofgnXEdc?{b^ZpAxW4=8rd%cmlw_8jtJOo}&Ubt4NC9%RyS>X8}^g}52v z6ahVTLY)IOvUl-{ZMMU#P4|Yn=i-Xn-pX}y8B&ZbYiY^|#qM-!zCE+Z2@Iig!?S;r zUP$nAAk5sHTu#2h;k;mnS#s4lIQuEPN<|eLTwJ5JR6n*f@0V+;fbM>r$K$rQp`8SL z;h&;59K9aF+6ht@7D)ZiER6S|$-0_KGmZD^cm_t$Z*&);75FnV9O#)jSIKEak_+50 z9PBD2R39c6{+if8w1b-EG-DjT5F7KSx|+|P3@cgt&9H=6{#jw=l!0D6wMc48Z$F>r zKTA{&|Fgorml1=Vcq%kIY_5MptgD~T1lC&$yT6cY`5#*;Jgouo4avvQT&>Po?i{ke$|$p_LR+M_o<+`RiLY*gRE|P-xVLLa1Q{ZNoD7 z7VnFSzM|S^D%bsQmx_19x+kIGWJKsn@ZBqd3LTEA@sz^^7DAnO*$G3!SOh|zIf9S* z;UN&aOzNOQ5sJGmOPFp5R->eE-MH|QmW3rJXT!i&lgDM3c5dOB3X>lFPB9%GEk$v_ zp~9Ot4@MZn`}sO4ql${iC8cdy-{*pb$YqT!wrRDU`$rJwImiBf7lEwRH ziKM{VFxJMBWsWQ2rrlF&oRqXu$qa>A!#4AENpO&KsiOF3-zT-rAo~;8Lz&{DY>stt zkH3}udKVZ<*AiAz>;Ab6>i&#~JKDP7;sAA!5Mz@&h>c@N~ELP9e4P+=1zjIgI9zg)_bVNcXW%)~l| z@auIU_Q-&cYgINM)p_RMob@3=r1o2!5$u#8>JIj@&{SRFpY&u0>G@|NlrOrLd2~_z3R3_r7!!u0=4iPXg?B8?|@s4MJg6!xUBDR zQs>L&Z25e#d87)SmnIrYRcR=JM0GlX8JvTpeAC1n3wHxKCyCsqi{9!0+q%?C-&+6G9%@lstTgj5KWMCTt- z6pm=%4?XMvHKhr-Y?Qa&{Lv9{0rb|x@@D{?b%GM)h5yph((U!GUnL13+#yLp2;~3D z2o%dMKwRU3I!X;h2Qi>6`eOlB8xLIb6!6-T|NjO5AH-qL4}oy`7&2l`kYDkD5MRxL z!8MvnbbwDPgIaKVISujx7d(O6Q@{d%8PB13PM`v?aYSr7L%&7!kv>y`N8_98cY6b- zKNIzD&c;Be!zShaAmmZGh2h@`G}1jXK(W$!+{3`2EzZ6ZDmepWkI`bM;|M_NazX>s)-qp zKc9T_j*T&7ZEekVrlA|?qV!-fHzxCKL5fTUUfW-6rfUBE>JpFs{eTmZCyfSCMV~z<#?Q27S*2ipNklObRLI<{dQe$C}mmm z?TXJcUdoeml!hdb{=I-1p{TpAeO{j)tnqxcM|1nr$Vl)ep56Se*!th~kJE^XistC@ zO}XJ8lk%P5lJL8=ltPEpGU#ZT@A7LvPno&*&^>nq*H zV5J7$-9LjxwhetfcHag%7I=~ix_$y#*wWIH_*nZsI{M36+l;Mw&vX%=29O+;ghId< z@e^5KUO+KLzy;biYlG_Vlj^pH`?E^>j7%-l@4WYdN_k4a`-#)fx?eB&HOOjgXC?u= znwOUc#8^;|LLAbYZFexJI=aD*@FjtbX%bs)(4*Q5g&xd ze+EbS6zjV2kF;G~9S#ES?&ZsuIs1F_?MkWKM(Ya6?9Kb%$wWj%zF3Ws@;ffI2jisp z%zb@ZqE)&9o;RC#66?!@>(kjXi zvo|RNCj`gyByquGvlJ@z-d`%CReA^Xt$o&h&HXF|Ix&~k=pzx_DMugx0kVKyr+N)A zzgR8U>2=4vT2Z zKn|YH7Dq|qn$Z1XB}Hm~ec>XI^p2j7?-Yn)2}X*FePbosepmZ4J&~}i%qZgHGUUHo zBlrTF)cSfkwG?9A=-6x~_BD&6Qdp?R!?R5AJad3jxd z_~U&Dq@AtAuVCP2ffjvzzn-2>4onZ_Ef--Ey~!MY%RPy-6z-W=>fu06t8@lZ8Supn z!t)+gPu6)HGIqZ|ORxl?%goHIrky9+v;HS;dsB~1n~x>08nAO@pNPn&v(*n*u!ZTU zAZT|{`O19YUf}jyO{;F&J2@%nIGy#IEmEU16LMIPeD#W2A-)+{61eM#*TtCf1#R}` zzLhthOe%0ROCAsa8Sj2FhvCWozQ@rT-r?6Ze3?dh6xu8xy zS$v01U^bB64L8XW_NsXp3?vf=AE57^93JN8qvS6xE&>^2V5C!^fG-?Z0;nTK(@JL?CY zK&G%4&`f1m8SKWujXycN&2xuQos7_*M(Y($caoWo@j4xTNi~QF~lmoUGbFmZ+%35cNSJNd>fb7)@Oe4J`!)HA?4i9nl!}gWNUqKQ3KQikh^wMHIcit`_#pN z(iLE1MY~VlH7k1e&YkH7m+(Tn>AG)lMAL2eiM{Wvu1;ZRw+k9Hn@)At>}*zE$kyAp zZ>Li%fHmc?uu}#KeUSJWl!EHEZ0|jZV0O?D5IrXhFrrZz0{I`#@?Y#%fnxoULSU%E z(G`+#|DQsSutVHljE|P^Ss#m?R&DnjiwvVIEG#TVKpp|SfGDX}z@~No;nR0{#+!r5 z)|%oM-uoj#EhxXqg-q^IFqq#FD+Z$)=vc(>(0p_>owr6U*IU(VrYuly>20rQKfRVY zcqa>CLiyX(80hG7fhhnlHrAoaoN0IFwzHV3cDAm0e>A$}WG7rs5i2?*yV;!yDHHwg z3Qd7^go}#{^ytYF?Q&k5NzgXoz)u#mW!5rtN6hkXw}JRK|A{>^tUSphTH8nL%V)iDd z)%)G;V9$I9pbXTInv!4OmOF@B$}=gW)qVjpaH=bi=zXs*#!7XQ3#R&0d8U9hqH2UB z^TYyQtk5JKv6lr_Za(2jt{ud*Vp&v<|fPU#>3dy7>EX-PR7K=wPh44 zraZs@<;{3hXlQqL_x#{yj^G0ANdq70=eep_`Vcy-#OB5l- zgA7Xy%bQqQSF39g;=^e^c;ZZU2T}_Gg#pVsM-~(Bj{yvyRIaM3iU1!U83iRJ1FhxX z1~8zQ!@wQ{0$!kVKG3cgp7d1V^D%SU&wc&$iB%nwbO6idu@?ZN0*6CRt2^yeIJ*v&_3tMBM~_0LT+r{|XH3kg>J`LTWggT16oMe~ zko|QLsd0bfT^EovdJ`Z2fOGFri2A1Q=A>K#`SFE-u<%TTa=NIW!Q-xYI4I0XSST@f><^aYY{!N1N}tR6o)vJ;`d-@PN=I6J8Etg4+aLqpu(?M14BXAfncB5N zFf^pEZ2q9_{%{F+KTua!x3*?Ms?xc?Kb$Kw{bOn>P1-xDpuT=*kIh#7xpzVbinn7h zaE^K18%hln6!JKDmoMd)Nv*D-VOjOpT6UFRjpX6s0iaQ}&cw++ zbuk8wPF!4EPEPJ0nRTa55n7@Zi4zW5`iKji(a@L80suK!qI${Kn;IVCbDydxC~N}T z0q6iyUa?yMiadMvA>Rd)(FV5l@9%Qgg_fFn?qB{f*mp4g30AJkN=i$=FPj2Z1efiG zb+9zUCimDWewf2cH);{jqoOkX4p5$O);a*zu?#V{oC%OiV`+qmL+mj@HEH`pmB$wh z8`JXhrxcuUuaGun8?^df10=RH+o}@y`toG^+~7o>UsN>fU&`CjUvHVzLtqo+08cqB`MY7|nG~Np&Ckufva_?pM<>06F4EzVk?B^M^#iX2BLf2nKPTNKMoeL$ zIq)NWfI>B4(DkX>T>wU{Gdh(>XS;!Kp(kOWuP+at1Z-->2}{ht z>L}=Q;T$Ky!o`*ew)bF`Tc`(YprrCm*uV1Su1gMyUZZO%*xZ$4ZQ0`fQ;7O7FdPby z-;hwSJ_Z*n z|F;)|u@U0+2Oa&7_xnFCY1?)-2G0`cl`*Bf|99~2&Be*-0Gu3cH?y(R)|?}fZadQ+ zr!#KAX#5yjgcuDgs6SaJr?hAEfp81meC_Qm0ow#rwfZfSz?85$GeK^f$s-^RCY16% zDBlAUFP-^>6{57yy9(^LVRCFuRLRs3nE`7mbr#~2I8F_`aqD0pk%Q8!P&2uQg^2?mCz`;1XSA0NeY3X9&gRDw(LZF~ zC64WM9jEh}>MZi3SfGA?-`lhIO+z@;etkA#QCT?KUtCflxMkOG7}_3)0O+Y3Xv;5B zfgv?Fvz;liuPAMPQ1q4@5APe7`A`=~d4i+@-{bFOc4ud2qcF`kOI@)zR3auPZ&B`+ z>3j)8qh{%jV^CBz2 zF-e_mE5dQ@WF%K4KORe16(P%cOgL%;?5WChXMn!4Bos342%(X9Z_yU1eEJZ(00(pE zI4>>Eb_5`+A${eMB5gyT#AU_T*Wh=j3Zk}8Hi4Sa?0Nh_DsjF@E%%JVu6L%<%~Gw^ zVmJo?7q$EU9*mk7j>ipW8{Ie}#knu|-uz_c;)?fV#-0FiGb1mG;m%Q8EliJ(k0;}{ z`0B{$1uC$GePIr~f;$QTDmZz}(}>W}de7sHXwe(ldbJ6vx{`Lqh;(JaktVou}jJ_gTv< z0DOr7z_LY$_I?eaa%#MGzsV^m`dMLEfdK(UX%3B&*4A4HK*E?2AiU`Z9()i6;jgo_ z`1r-;jnah6AA~MD~hHBn$Jfnw+PqB4AU_HA%$-KW7Ew8TKQEx+OZ*c=g26Z5y%X1%PJ+Q5 zG5?0;KiFv>3*Tc8f#_b{YKw2g^;n=~)PyHJNGL!puV7NLYB^sa%cNQC2qoZ_TTSB@ zg&DSrAZ8u928R^2M4FkOIJfQzCYb$m7RCd7mawj@Va$X))|Rq3R%vmt3LhCM;e>nR?m# z6IrX=Kq=n#Ch7U|%MvZNDI*_HN2=9V(m-u}?X&^P6}fUgX?S>dQh{I)Km{t`OIqj*r<0C&QD;vxVd;9( z^SJzpdFiXN@j?|U`Jtn2fHQZ1f_cqtbu(P6cQ85%Bl%4-vLr}@ggB3V|#T~#)(`0$B!RXx~JTKa;VK|obkJngK)#1mTnH^oAePdzBkBuMA`; zP(+*zq;LhBl2K47=?4*Ya#t}1gC?*u`DL>&g$v-OQIrW*#l(5gmJHnIQPoj5_`!C~ zt{Q1p_DNgr%iK^!2Vdj{P$O`bG;E|i_N^I|Vc-`Aj>byviHXrqvcZ6)fQj}@ zDXjp@vc-d3B~qK>hcc0*Qm*TuxK@;Z+rx(qJjWm6{Yj_^|%y%JkeMKSz7J44WMi~4)=Kh2WVK;{ZMu8B3yTxAn2Gca2H_~*Bk@pe`*d@6* zNRQSF3N1;!?q&DHPypUdB~^16s|0|Q1uuSloQ)G_0Rb>Fz4hLZjBf-zX`ef5jmP>| z%<%~=#abSBz))p|e2c{}t)HLYNsX%K-6>H0S5)96goIKIpR~&rK!aoqh+ zaUp!nLt(nMyezeu`0Lk;0!28YnxYZUhJ&aOuYrw37g_jpLr}rUPVi`V_7?a>3$0yK2x%sgs zOcH%ELHN^K{cT(V0y z2Agk4f`-DNU}Xgh4!(Pt_&T|>=2wmP_3^l{=TS^)S!9amdR#_^FtGQ2{VE11$?WXx zhg@c$>sRWdd3avo^?oyGaNAYxf2>O(p-GZRA&aO!TrO=j1mK&x0S`7HsN%QSgKR2n zET?L=fm7C`g9b?{DK@>jJ-{8&;{XFFsi^N2=sFW+#;cYP9#)=mYc>k`+$&Rj z0O;*inQE*j)IUBCLRbKUf=o?J>@NY%0xEa+uaA%e&-Gfo>j8%j_=hr( z9Qo%JOJXkpBHT0N_#of{D=+7$XVY&;pkjBi93IGVJHNd21CJ{-G?d3`H2Zl$UY@=A z)ItS{_NN!afcyoHz#R@k-P)GF_WuzokJ}Sn%sg)>PpU1zND;SIAyZ=tEa+e=*1cj5 z0hEqdHrL%J;T`7N|%bXVE27NnzD6z`YqOMqQrn0u~@$hnjD z?Ugb}ql1p9>;OssC^q$Lt?G1K#|G;<53sIP$C^XJIX(0SKmbv$x%MV7>C8Em=}dsc|aVaLnVr zCTR+6yW|Ru`py4#(2uDD$-=S;*KY#arvWPm_Oyc{(s$1Q8L*$rWaS5cZS_!I)aRla z47q@B9>t)KgvOuiwfbh<$_fq&adRL2;TQnO23BC`-#$#rMnV6bne=owrNJTWSNK{I zo9_1?KMvov0JuzvEEJIY3%wScY=kRt>?_G@Xt65U3iTyv?Ii>r`<2dNvkXdZz;pDy zm)Zi$?C%CHgo;Kon{`FPF686ikP0j=Eac?oS_%;!I+S}pj7d&T1{U3te6Rx&!QdV| z_~7v9k)Gjx(;xGU7Vh&hK;&&8aEyR`R8&+31_la%A^=AZ^VVxMV4MI) z128*b%ou;!nqiE|x1=d{8(LQJGtJKdLVCgPTRCgQ542L*H>5W78s?}0;qloV1Sp?6e%<0AOwWt!WXZzJsRwN z)>7RkmKvtoJog+9SCmd*(-1gHLopG%-iuaWAIh#gz_TwnG2ML8&-4IX0XQM^9S+I{ zYvqnVf(Bv9I6JU5o6Bj9y7AnYZpU1q)S0pGo@&@-LdPdUC3Oe(RQ?Cb+4Zk+2eXJ_vHX5=sb5>1czNF|H351Y5f-T;d%b^(BD4ec?u zI+{XbXPx1t%o}8+q@HJcS-a783=d1YntWDK-yqF0ZZnY(*?!yis)n+gdFr*T_Wx@>CA7|HUL zvSeCaEp+~TaGVdUfYPa$8mNFe>W=>|G84e5*JMzGYBt1^D&iy1O_P{Hr1HlC-q<0e zxvDwABL(X5tYPXCBV>gV`Fz4pBx_sXgyJ%h6@frZP!8FXR}jPUkdzo-RkorTA`S!V z7=B>!c!7zMVJ{A9^!L`v1%a*E)~uD*$}vj4DuY4XVsQ)3ZvinV#7LlE=@~KsU@cMQ zm|9_GYC7C^y%;T;B&-KXjR+S{>z^Y!c4UO1eSB~8$L75kfw=Sdc<9m55y0YL3iI>3 z1+fmXQ`HX!2vJ&Ex<^Z5I>%r@a*TTPGe7_=TbP-g2p;GHnE34f>KXr)3j05)t8Rh$ z0te0vL+jNnJjfxUBE`G3@v@txVEI@*g%-x6gdnS`|MRkI#N+snDoXD+oE;%*5P1yH zd7li0j#dRvUcF8jY~q_Ne^_$i!=yw}0_R0542B#smwZ(DlJnf&;x`}Rp{vRFiN*;y*Q;E{31BZ0&5Z4n=7$PX>s2%GmG4nwh=n4kbe0U+3*VC2 zfJZ03#vR%Y$3!?keMCQoX}&bU8mOcIizJ4Pod2gab~MB{rk1)F_DtW{+;GZk({sCg zlGnsi4u2;y))%zl?28E4oj(CXk6-%^gLckU%dTnk>lG=l-o-`Dmi&iNUre9N7~l_Y z{`FqOB~~?~Y(nqr3?dQkx;!T=sWfpIcnOS9J{Q&!E)7ynNVRAnqU56>C_QnV{N@h0 zoJZ?b*kkKN{ixHVe{m56LWCfY{yg}XP3{#!2`?a<8y$cTJa2uB0uhVV17sI~69=ls zNS{gwWTMEy;hRQpI^gV}q{jy*zgurEO8&m-4&u;X5I8>@0LY80UBBD-yLfM2St5?+ nsv_Jf|K+sqoxjI;Z>exy@3=%!jUxWPAP_kzWy!MVuLAxTOU^oh literal 0 HcmV?d00001 diff --git a/docs/uml-source/ParserClass.puml b/docs/uml-source/ParserClass.puml new file mode 100644 index 0000000000..27bdb89834 --- /dev/null +++ b/docs/uml-source/ParserClass.puml @@ -0,0 +1,23 @@ +@startuml + +class Parser { + -parseViewerCommand(commandWord: String, arguments: String): Command + -parseBuilderCommand(commandWord: String, arguments: String): Command + -parseCustomCommand(arguments: String): Command + -parseCompareCommand(arguments: String): Command + +parseCommand(userInput: String): Command +} + +abstract class Command { + - arguments: String + {abstract} + executeCommand(dataStorage: DataStorage): String + + setArguments(arguments: String): void + + getArguments(): String +} + + +Parser --> Command + + + +@enduml \ No newline at end of file From d03af5e0adf244861f05fb4b33f0af725260a995 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 26 Mar 2023 16:36:26 +0800 Subject: [PATCH 197/420] fix list indexing after flag --- BigPP.log.lck | 0 .../BuilderListComponentCommand.java | 23 +++++---- .../seedu/bigpp/component/ComponentList.java | 47 ++++++++++++------- 3 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 05f14654c9..664c3069f7 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -44,19 +44,21 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } ComponentList componentList = dataStorage.stringToComponentListMap.get(componentType); + ArrayList componentIndexes = new ArrayList(); ArrayList flagsArray = new ArrayList(); if (userInputStringArray.length > 1) { String[] flagAndDescriptionArray = Arrays.copyOfRange(userInputStringArray, 1, userInputStringArray.length); if (containsFlag(flagAndDescriptionArray, NAME_FLAG)) { - componentList = handleNameFlag(componentList, flagsArray, flagAndDescriptionArray); + componentList = handleNameFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, BRAND_FLAG)) { - componentList = handleBrandFlag(componentList, flagsArray, flagAndDescriptionArray); + componentList = handleBrandFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, PRICE_FLAG)) { - componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray); + componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); } else if (!hasFlag(flagAndDescriptionArray)) { throw new PPException("Please enter a valid flag after the component type"); } @@ -77,11 +79,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } } - return outputString + componentList.getListString(); + return outputString + componentList.getListString(componentIndexes); } private ComponentList handlePriceFlag(String userInputString, ComponentList componentList, - ArrayList flagsArray, String[] flagAndDescriptionArray) throws PPException { + ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) + throws PPException { int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, PRICE_FLAG); if (priceFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a price description after the flag"); @@ -127,13 +130,13 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList 1000000 || priceToInt > 1000000) { throw new PPException("Price must be smaller than 1000000"); } - componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo); + componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo, componentIndexes); flagsArray.add("price: " + priceFrom + " to " + priceTo); return componentList; } private ComponentList handleBrandFlag(ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int brandFlagIndex = indexOfFlag(flagAndDescriptionArray, BRAND_FLAG); if (brandFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a brand after the flag"); @@ -142,13 +145,13 @@ private ComponentList handleBrandFlag(ComponentList componentList, ArrayLi if (isFlag(brand)) { throw new PPException("Flag detected as a brand. Please enter another brand after the flag"); } - componentList = ComponentList.filterByBrand(componentList, brand); + componentList = ComponentList.filterByBrand(componentList, brand, componentIndexes); flagsArray.add("brand: " + brand); return componentList; } private ComponentList handleNameFlag(ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int nameFlagIndex = indexOfFlag(flagAndDescriptionArray, NAME_FLAG); if (nameFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a name after the flag"); @@ -158,7 +161,7 @@ private ComponentList handleNameFlag(ComponentList componentList, ArrayLis throw new PPException("Flag detected as a name. Please enter another name after the flag"); } flagsArray.add("name: " + name); - componentList = ComponentList.filterByName(componentList, name); + componentList = ComponentList.filterByName(componentList, name, componentIndexes); return componentList; } diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index b482bf48f7..5679f635ed 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -4,42 +4,57 @@ public class ComponentList extends ArrayList { - public String getListString() { + public String getListString(ArrayList componentIndexes) { String outputString = ""; - for (int i = 0; i < super.size(); i++) { - outputString += (i + 1) + "." + "\n" + super.get(i).toString() + "\n" + "================\n"; + if (componentIndexes.size() == 0) { + for (int i = 0; i < super.size(); i++) { + outputString += (i + 1) + "." + "\n" + super.get(i).toString() + "\n" + "================\n"; + } + + } else { + for (int i = 0; i < super.size(); i++) { + outputString += componentIndexes.get(i).toString() + "." + "\n" + super.get(i) + .toString() + "\n" + "================\n"; + } } return outputString; } - public static ComponentList filterByName(ComponentList componentList, String name) { + public static ComponentList filterByName(ComponentList componentList, String name, ArrayList + componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getName().toLowerCase().contains(name)) { - filteredComponentList.add(component); + for (int i = 0; i <= componentList.size() - 1; i++) { + if (componentList.get(i).getName().toLowerCase().contains(name)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); } } return filteredComponentList; } - public static ComponentList filterByBrand(ComponentList componentList, String brand) { + public static ComponentList filterByBrand(ComponentList componentList, String brand, ArrayList + componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getBrand().toLowerCase().contains(brand)) { - filteredComponentList.add(component); + for (int i = 0; i <= componentList.size() - 1; i++) { + if (componentList.get(i).getBrand().toLowerCase().contains(brand)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); } } return filteredComponentList; } - public static ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo) { + public static ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); - for (Component component : componentList) { - if (component.getPrice() >= Float.parseFloat(priceFrom) && component.getPrice() <= Float.parseFloat( - priceTo)) { - filteredComponentList.add(component); + for (int i = 0; i <= componentList.size() - 1; i++) { + if (componentList.get(i).getPrice() >= Float.parseFloat(priceFrom) && componentList.get(i) + .getPrice() <= Float.parseFloat( + priceTo)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); } } return filteredComponentList; From ca9057720c3314e4358718c10b386ed4434ea110 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sun, 26 Mar 2023 17:35:06 +0800 Subject: [PATCH 198/420] Resolve #118 Create ViewerHelpCommand to display list of available actions --- .../viewercommand/ViewerHelpCommand.java | 22 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 7 +++--- 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java new file mode 100644 index 0000000000..e7d90cb328 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -0,0 +1,22 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.ui.UI; + +public class ViewerHelpCommand extends Command { + private static final String HELP = "Here are the list of valid commands: \n" + + "Add - Add a new PC of a given name \n" + + "Delete - Delete the PC of a given index \n" + + "Edit - Edit the PC of a given index \n" + + "View - Display all the components of the PC of a given index \n"; + + /** + * Help command to view the list of valid commands + * @return the list of valid commands + */ + @Override + public String executeCommand(DataStorage dataStorage) { + return this.HELP; + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 86d5b0ea23..95530d2bd8 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -19,10 +19,7 @@ import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; -import seedu.bigpp.command.viewercommand.ViewerAddCommand; -import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; -import seedu.bigpp.command.viewercommand.ViewerEditCommand; -import seedu.bigpp.command.viewercommand.ViewerViewCommand; +import seedu.bigpp.command.viewercommand.*; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; @@ -96,6 +93,8 @@ private Command parseViewerCommand(String commandWord, String arguments) { return new ViewerViewCommand(arguments); case "edit": return new ViewerEditCommand(arguments); + case "help": + return new ViewerHelpCommand(); default: return new UnrecognizedCommand(""); } From bd19f882f0a1718b8ac707e8586b23c24d88cb0b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Mon, 27 Mar 2023 00:02:58 +0800 Subject: [PATCH 199/420] Add DataStorage Class diagram and Sequential diagram on loadChassis --- docs/DeveloperGuide.md | 49 +++++++++++-- docs/uml-pictures/DataStorageClass.png | Bin 0 -> 100282 bytes docs/uml-source/DataStorageClass.puml | 78 +++++++++++++++++++++ docs/uml-source/loadChassisSequential.puml | 31 ++++++++ 4 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 docs/uml-pictures/DataStorageClass.png create mode 100644 docs/uml-source/DataStorageClass.puml create mode 100644 docs/uml-source/loadChassisSequential.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 2e48403649..990507a373 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,6 +6,8 @@ - [General Overview](#general-overview) - [Design \& implementation](#design--implementation) - [UI class](#ui-class) + - [DataStorage class](#datastorage-class) + - [loadChassis() method](#loadchassis-method) - [Parser class](#parser-class) - [PC Class Architecture](#pc-class-architecture) - [Command class](#command-class) @@ -14,7 +16,6 @@ - [Product scope](#product-scope) - [Target user profile](#target-user-profile) - [Value proposition](#value-proposition) - - [Problem Addressed](#problem-addressed) - [User Stories](#user-stories) - [Non-Functional Requirements](#non-functional-requirements) - [Glossary](#glossary) @@ -37,9 +38,46 @@ Below is the Class diagram for the UI class The class will first initialize its `UIState` to `PCVIEWER`. It will also initialize the `PCViewerMenu` class. `showWelcome` will print out the logos and welcome message. `updateUI` will call `printMenu` on `PCViewerMenu` or `PCBuilderMenu` depending on the `UIState`. `setPCViewerMode` will update `UIState` to `PCVIEWER` and set `pcBuilderMenu` to null. `setPCBuilderMode` will update the `UIState` to `PCBuilder` and create a new instance of `PCBuilderMenu`. +### DataStorage class +Below is the Class diagram for the DataStorage class: + +![DataStorage Class Diagram](uml-pictures/DataStorageClass.png) + +The `DataStorage` class serves as a centralized storage and management system for lists of components and PC builds in the application. It is responsible for the following key actions: + +1. **Initialization**: Upon creation, the `DataStorage` class initializes its `stringToComponentListMap` and `pcList` properties, which contain instances of `ComponentList` and `PCList`, respectively. These lists are used to manage components and PC builds within the application. + +2. **Functionality**: The `DataStorage` class + + - Loads the entire `user.json` file that is saved in the storage of the user's computer. This json file will contain all of the PC builds that the user has made in his prior usages of BigPP. + - Loads all of the pre-built PC builds that are in the `Resources` folder that have been pre-set by us for the user to view. + - Loads all of the data that is in the `Resources` folder which stores pre-loaded data of BigPP which includes all of the component data that is available in our database. + - Saves all the user data into `user.json` file that is saved in the storage of user's computer when the user inputs the "bye" command. + +3. **Behavior**: The `DataStorage` class acts as an intermediary between the application and the stored lists of components and PC builds. It helps to maintain a clean separation of concerns by providing a unified interface for handling data storage and retrieval. This allows the rest of the application to interact with the data easily. + +In summary, the `DataStorage` class is responsible for managing lists of components and PC builds, providing methods to load all the data needed, and interact with this loaded data. + +#### loadChassis() method +This Sequential analysis will show how the loadChassis() method works, this will also serve as an example for all the other load methods that the DataStorage class has. + +The `loadChassis` method reads chassis information from a JSON file and populates a `ChassisList` with the data. + +When the `loadChassis` method is called with a file path as its argument, it first gets a `ClassLoader` instance from the `DataStorage` class and uses it to create an `InputStream` for the specified file. A `BufferedReader` is then created to read the contents of the file. + +The JSON file is read and concatenated into a single string using `reduce`. The GSON library is then used to deserialize the JSON string into a `Map`, with the key being the name of the chassis and the value being a `Chassis` object. + +Next, the method iterates over the `chassisMap` and sets the name attribute of each `Chassis` object to its corresponding key in the map. + +Finally, the method iterates over the `chassisMap` again, adding each `Chassis` object to the `ChassisList` stored in the `stringToComponentListMap` HashMap. + + + ### Parser class The UML class diagram shows the features of the Parser class: + ![Parser Class Diagram](uml-pictures/ParserClass.png) + The purpose of the Parser class is to parse the user input into commands for execution. With reference to the diagram, the Parser class does not have any attributes and only contains public methods for parsing of the user input. The methods in the Parser class creates a subclass which inherits from the abstract superclass Command class. @@ -106,13 +144,14 @@ found below: ### Product scope #### Target user profile -{Describe the target user profile} +People who want to build PC's and keep track of their builds. #### Value proposition -{Describe the value proposition: what problem does it solve?} - -#### Problem Addressed + - Saves time and effort in selecting PC components + - Helps users avoid compatibility issues or mistakes + - Enables users to build cost-effective systems. + - Prebuilt PCs ### User Stories diff --git a/docs/uml-pictures/DataStorageClass.png b/docs/uml-pictures/DataStorageClass.png new file mode 100644 index 0000000000000000000000000000000000000000..bf495ee11e91a3b85024237553bf0404a83c6369 GIT binary patch literal 100282 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 literal 0 HcmV?d00001 diff --git a/docs/uml-source/DataStorageClass.puml b/docs/uml-source/DataStorageClass.puml new file mode 100644 index 0000000000..750af12969 --- /dev/null +++ b/docs/uml-source/DataStorageClass.puml @@ -0,0 +1,78 @@ +@startuml + + +class ComponentList { + + getListString(componentIndexes: ArrayList): String + + filterByName(componentList: ComponentList, name: String, componentIndexes: ArrayList): ComponentList + + filterByBrand(componentList: ComponentList, brand: String, componentIndexes: ArrayList): ComponentList + + filterByPrice(componentList: ComponentList, priceFrom: String, priceTo: String, componentIndexes: ArrayList): ComponentList +} + + + +class ChassisList +class CPUList +class CPUCoolerList +class GPUList +class MotherboardList +class PSUList +class RAMList +class StorageList + +ChassisList --|> ComponentList +CPUList --|> ComponentList +CPUCoolerList --|> ComponentList +GPUList --|> ComponentList +MotherboardList --|> ComponentList +PSUList --|> ComponentList +RAMList --|> ComponentList +StorageList --|> ComponentList + + +class PCList { + + printPcList(): void +} + + + +class DataStorage { + - CHASSIS_PATH: String + - CPU_PATH: String + - CPU_COOLER_PATH: String + - GPU_PATH: String + - MOTHERBOARD_PATH: String + - PSU_PATH: String + - RAM_PATH: String + - STORAGE_PATH: String + - PREBUILT_PATH: String + - USER_PATH: String + - GSON: Gson + - stringToComponentListMap: Map> + - pcList: PCList + + saveUserPcs(): void + + loadAll(): void + + initStringToComponentListMap(): void + + loadChassis(path: String): void + + loadCPU(path: String): void + + loadCPUCooler(path: String): void + + loadGPU(path: String): void + + loadMotherboard(path: String): void + + loadPSU(path: String): void + + loadRAM(path: String): void + + loadStorage(path: String): void + + loadUserPcs(path: String): void + + loadPrebuiltPcs(path: String): void +} + + +DataStorage --> ChassisList +DataStorage --> CPUList +DataStorage --> CPUCoolerList +DataStorage --> GPUList +DataStorage --> MotherboardList +DataStorage --> PSUList +DataStorage --> RAMList +DataStorage --> StorageList +DataStorage --> PCList + +@enduml \ No newline at end of file diff --git a/docs/uml-source/loadChassisSequential.puml b/docs/uml-source/loadChassisSequential.puml new file mode 100644 index 0000000000..b5afc3ac8e --- /dev/null +++ b/docs/uml-source/loadChassisSequential.puml @@ -0,0 +1,31 @@ +@startuml +":DataStorage" -> ":DataStorage" : loadAll() +activate ":DataStorage" +":DataStorage" -> ":DataStorage" : loadChassis(String path) + +":DataStorage" -> "GSON" : fromJson(String json, Type type) +activate "GSON" +"GSON" --> ":DataStorage" : Map +deactivate "GSON" + +loop for each entry in chassisMap + ":DataStorage" -> "Chassis" : setName(String name) + activate "Chassis" + "Chassis" --> ":DataStorage" + deactivate "Chassis" +end + +loop for each entry in chassisMap + ":DataStorage" -> "DataStorage.stringToComponentListMap" : get(String componentType) + activate "DataStorage.stringToComponentListMap" + "DataStorage.stringToComponentListMap" --> ":DataStorage" : ChassisList + deactivate "DataStorage.stringToComponentListMap" + + ":DataStorage" -> "ChassisList" : add(Chassis chassis) + activate "ChassisList" + "ChassisList" --> ":DataStorage" + deactivate "ChassisList" +end + +deactivate ":DataStorage" +@enduml \ No newline at end of file From 928c9899658aac5e095c0ffdddfaf7ad957d6363 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Mon, 27 Mar 2023 03:46:13 +0800 Subject: [PATCH 200/420] Update size attributes for preparing to solve conflicts --- BigPP.log.lck | 0 docs/uml-source/PcDiagram.puml | 6 ++-- .../bigpp/component/chassis/Chassis.java | 10 +++---- .../component/motherboard/Motherboard.java | 14 +++++----- .../java/seedu/bigpp/component/psu/PSU.java | 14 +++++----- src/main/java/seedu/bigpp/pc/PC.java | 28 ++++++++++++++++++- src/main/resources/chassis.json | 4 +-- src/main/resources/motherboard.json | 24 ++++++++-------- src/main/resources/prebuilt.json | 18 ++++++------ src/main/resources/psu.json | 2 +- src/test/resources/chassis.json | 4 +-- src/test/resources/motherboard.json | 24 ++++++++-------- src/test/resources/prebuilt.json | 18 ++++++------ src/test/resources/psu.json | 2 +- 14 files changed, 96 insertions(+), 72 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/uml-source/PcDiagram.puml b/docs/uml-source/PcDiagram.puml index 577430d495..dd1688c205 100644 --- a/docs/uml-source/PcDiagram.puml +++ b/docs/uml-source/PcDiagram.puml @@ -110,14 +110,14 @@ class GPU { } class Motherboard { - - formFactor: String + - size: String - socket: String - power: float +COMPONENT_STRING: String = "MOTHERBOARD_TYPE" + Motherboard(name: String, brand: String, - price: float, formFactor: String, socket: String, power: float) + price: float, size: String, socket: String, power: float) + getFormFactor(): String - + setFormFactor(formFactor: String): void + + setFormFactor(size: String): void + getSocket(): String + setSocket(socket: String): void + getPower(): float diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index a12b9ddb3e..cf330b5999 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -25,11 +25,9 @@ public void setSize(String size) { @Override public String toString() { - return "Chassis{" + - "\nname='" + super.getName() + '\'' + - ",\n brand='" + super.getBrand() + '\'' + - ",\n price=" + super.getPrice() + - ",\n size='" + size + '\'' + - "\n}"; + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nSIZE: " + size; } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index 05a84dbfe7..f5d6b011c5 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -5,25 +5,25 @@ public class Motherboard extends Component { public static final String COMPONENT_STRING = MOTHERBOARD_TYPE; - private String formFactor; + private String size; private String socket; private float power; - public Motherboard(String name, String brand, float price, String formFactor, String socket, float power) { + public Motherboard(String name, String brand, float price, String size, String socket, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); - this.formFactor = formFactor; + this.size = size; this.socket = socket; this.power = power; } public String getFormFactor() { - return formFactor; + return size; } - public void setFormFactor(String formFactor) { - this.formFactor = formFactor; + public void setFormFactor(String size) { + this.size = size; } public String getSocket() { @@ -47,7 +47,7 @@ public String toString() { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nFORMFACTOR: " + formFactor + + "\nSIZE: " + size + "\nSOCKET: " + socket + "\nPOWER: " + power; } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index 3b404f41c2..8a1886e02e 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -6,15 +6,15 @@ public class PSU extends Component { public static final String COMPONENT_STRING = PSU_TYPE; private String efficiency; - private String formFactor; + private String size; private float power; - public PSU(String name, float price, String brand, String efficiency, String formFactor, float power) { + public PSU(String name, float price, String brand, String efficiency, String size, float power) { super.setName(name); super.setPrice(price); super.setBrand(brand); this.efficiency = efficiency; - this.formFactor = formFactor; + this.size = size; this.power = power; } @@ -27,11 +27,11 @@ public void setEfficiency(String efficiency) { } public String getFormFactor() { - return formFactor; + return size; } - public void setFormFactor(String formFactor) { - this.formFactor = formFactor; + public void setFormFactor(String size) { + this.size = size; } public float getPower() { @@ -48,7 +48,7 @@ public String toString() { "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nEFFICIENCY: " + efficiency + - "\nFORMFACTOR: " + formFactor + + "\nSIZE: " + size + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 6d30086655..a6769c85fd 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -227,6 +227,32 @@ public String buildType(Boolean isPrebuilt) { } } + public float getPowerConsumption() { + float totalPowerConsumption = 0.00f; + if (cpu != null) { + totalPowerConsumption += cpu.getPower(); + } + if (gpu != null) { + totalPowerConsumption += gpu.getPower(); + } + if (ram != null) { + totalPowerConsumption += ram.getPower(); + } + if (storage != null) { + totalPowerConsumption += storage.getPower(); + } + if (motherboard != null) { + totalPowerConsumption += motherboard.getPower(); + } + if (cpuCooler != null) { + totalPowerConsumption += cpuCooler.getPower(); + } + + // give power consumption to 2 dp + totalPowerConsumption = Float.parseFloat(UI.moneyDecimalFormat.format(totalPowerConsumption)); + return totalPowerConsumption; + } + /** * Method to check if the PC is complete. * @return true if all components are not null, false otherwise. @@ -250,7 +276,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; diff --git a/src/main/resources/chassis.json b/src/main/resources/chassis.json index 8b99193a65..7ea48e638f 100644 --- a/src/main/resources/chassis.json +++ b/src/main/resources/chassis.json @@ -2,12 +2,12 @@ "Fractal Design Pop XL Air": { "brand": "Fractal Design", "price": 124.98, - "size": "full" + "size": "atx" }, "Corsair iCUE 4000X RGB": { "brand": "Corsair", "price": 144.99, - "size": "mid" + "size": "atx" }, "Cooler Master MasterBox MB311L ARGB": { "brand": "Cooler Master", diff --git a/src/main/resources/motherboard.json b/src/main/resources/motherboard.json index 47a6ecfd27..4c072c2a67 100644 --- a/src/main/resources/motherboard.json +++ b/src/main/resources/motherboard.json @@ -2,84 +2,84 @@ "Asus Prime Z590-P WiFi": { "price": 121.99, "brand": "Asus", - "formFactor": "ATX", + "size": "atx", "socket": "LGA1200", "power": 45 }, "MSI MAG Z690 TOMAHAWK WIFI DDR4": { "price": 239.99, "brand": "MSI", - "formFactor": "ATX", + "size": "atx", "socket": "LGA1700", "power": 47 }, "Asus TUF GAMING X570-PLUS (WI-FI)": { "price": 209.99, "brand": "Asus", - "formFactor": "ATX", + "size": "atx", "socket": "AM4", "power": 48 }, "Gigabyte B650 AORUS ELITE AX": { "price": 219.99, "brand": "Gigabyte", - "formFactor": "ATX", + "size": "atx", "socket": "AM5", "power": 42 }, "Asus TUF GAMING B560M-PLUS WIFI": { "price": 149.99, "brand": "Asus", - "formFactor": "Micro", + "size": "micro", "socket": "LGA1200", "power": 45 }, "ASRock B760M Steel Legend WiFi": { "price": 139.99, "brand": "ASRock", - "formFactor": "Micro", + "size": "micro", "socket": "LGA1700", "power": 46 }, "MSI B550M PRO-VDH WIFI": { "price": 119.99, "brand": "MSI", - "formFactor": "Micro", + "size": "micro", "socket": "AM4", "power": 43 }, "Gigabyte B650M DS3H": { "price": 149.99, "brand": "Gigabyte", - "formFactor": "Micro", + "size": "micro", "socket": "AM5", "power": 47 }, "MSI MPG B560I GAMING EDGE WIFI": { "price": 149.99, "brand": "MSI", - "formFactor": "Mini", + "size": "mini", "socket": "LGA1200", "power": 46 }, "Asus ROG STRIX B760-I GAMING WIFI": { "price": 219.99, "brand": "Asus", - "formFactor": "Mini", + "size": "mini", "socket": "LGA1700", "power": 42 }, "ASRock B550M-ITX/ac": { "price": 119.99, "brand": "ASRock", - "formFactor": "Mini", + "size": "mini", "socket": "AM4", "power": 45 }, "Gigabyte B650I AORUS ULTRA": { "price": 159.99, "brand": "Gigabyte", - "formFactor": "Mini", + "size": "mini", "socket": "AM5", "power": 49 } diff --git a/src/main/resources/prebuilt.json b/src/main/resources/prebuilt.json index 377501e19f..17b8089aae 100644 --- a/src/main/resources/prebuilt.json +++ b/src/main/resources/prebuilt.json @@ -29,7 +29,7 @@ "price": 309.99 }, "motherboard": { - "formFactor": "ATX", + "size": "atx", "socket": "LGA1200", "power": 45.0, "name": "Asus Prime Z590-P WiFi", @@ -55,14 +55,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -99,7 +99,7 @@ "price": 786.99 }, "motherboard": { - "formFactor": "ATX", + "size": "atx", "socket": "AM4", "power": 48.0, "name": "Asus TUF GAMING X570-PLUS (WI-FI)", @@ -125,14 +125,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -169,7 +169,7 @@ "price": 934.06 }, "motherboard": { - "formFactor": "Mini", + "size": "mini", "socket": "AM5", "power": 49.0, "name": "Gigabyte B650I AORUS ULTRA", @@ -195,14 +195,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 diff --git a/src/main/resources/psu.json b/src/main/resources/psu.json index f843680c51..2b12d4ae6a 100644 --- a/src/main/resources/psu.json +++ b/src/main/resources/psu.json @@ -2,7 +2,7 @@ "SeaSonic FOCUS PLUS 850 Gold": { "brand": "SeaSonic", "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850, "price": 159.94 } diff --git a/src/test/resources/chassis.json b/src/test/resources/chassis.json index 8b99193a65..7ea48e638f 100644 --- a/src/test/resources/chassis.json +++ b/src/test/resources/chassis.json @@ -2,12 +2,12 @@ "Fractal Design Pop XL Air": { "brand": "Fractal Design", "price": 124.98, - "size": "full" + "size": "atx" }, "Corsair iCUE 4000X RGB": { "brand": "Corsair", "price": 144.99, - "size": "mid" + "size": "atx" }, "Cooler Master MasterBox MB311L ARGB": { "brand": "Cooler Master", diff --git a/src/test/resources/motherboard.json b/src/test/resources/motherboard.json index 47a6ecfd27..4c072c2a67 100644 --- a/src/test/resources/motherboard.json +++ b/src/test/resources/motherboard.json @@ -2,84 +2,84 @@ "Asus Prime Z590-P WiFi": { "price": 121.99, "brand": "Asus", - "formFactor": "ATX", + "size": "atx", "socket": "LGA1200", "power": 45 }, "MSI MAG Z690 TOMAHAWK WIFI DDR4": { "price": 239.99, "brand": "MSI", - "formFactor": "ATX", + "size": "atx", "socket": "LGA1700", "power": 47 }, "Asus TUF GAMING X570-PLUS (WI-FI)": { "price": 209.99, "brand": "Asus", - "formFactor": "ATX", + "size": "atx", "socket": "AM4", "power": 48 }, "Gigabyte B650 AORUS ELITE AX": { "price": 219.99, "brand": "Gigabyte", - "formFactor": "ATX", + "size": "atx", "socket": "AM5", "power": 42 }, "Asus TUF GAMING B560M-PLUS WIFI": { "price": 149.99, "brand": "Asus", - "formFactor": "Micro", + "size": "micro", "socket": "LGA1200", "power": 45 }, "ASRock B760M Steel Legend WiFi": { "price": 139.99, "brand": "ASRock", - "formFactor": "Micro", + "size": "micro", "socket": "LGA1700", "power": 46 }, "MSI B550M PRO-VDH WIFI": { "price": 119.99, "brand": "MSI", - "formFactor": "Micro", + "size": "micro", "socket": "AM4", "power": 43 }, "Gigabyte B650M DS3H": { "price": 149.99, "brand": "Gigabyte", - "formFactor": "Micro", + "size": "micro", "socket": "AM5", "power": 47 }, "MSI MPG B560I GAMING EDGE WIFI": { "price": 149.99, "brand": "MSI", - "formFactor": "Mini", + "size": "mini", "socket": "LGA1200", "power": 46 }, "Asus ROG STRIX B760-I GAMING WIFI": { "price": 219.99, "brand": "Asus", - "formFactor": "Mini", + "size": "mini", "socket": "LGA1700", "power": 42 }, "ASRock B550M-ITX/ac": { "price": 119.99, "brand": "ASRock", - "formFactor": "Mini", + "size": "mini", "socket": "AM4", "power": 45 }, "Gigabyte B650I AORUS ULTRA": { "price": 159.99, "brand": "Gigabyte", - "formFactor": "Mini", + "size": "mini", "socket": "AM5", "power": 49 } diff --git a/src/test/resources/prebuilt.json b/src/test/resources/prebuilt.json index 377501e19f..17b8089aae 100644 --- a/src/test/resources/prebuilt.json +++ b/src/test/resources/prebuilt.json @@ -29,7 +29,7 @@ "price": 309.99 }, "motherboard": { - "formFactor": "ATX", + "size": "atx", "socket": "LGA1200", "power": 45.0, "name": "Asus Prime Z590-P WiFi", @@ -55,14 +55,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -99,7 +99,7 @@ "price": 786.99 }, "motherboard": { - "formFactor": "ATX", + "size": "atx", "socket": "AM4", "power": 48.0, "name": "Asus TUF GAMING X570-PLUS (WI-FI)", @@ -125,14 +125,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -169,7 +169,7 @@ "price": 934.06 }, "motherboard": { - "formFactor": "Mini", + "size": "mini", "socket": "AM5", "power": 49.0, "name": "Gigabyte B650I AORUS ULTRA", @@ -195,14 +195,14 @@ }, "psu": { "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "full", + "size": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 diff --git a/src/test/resources/psu.json b/src/test/resources/psu.json index f843680c51..2b12d4ae6a 100644 --- a/src/test/resources/psu.json +++ b/src/test/resources/psu.json @@ -2,7 +2,7 @@ "SeaSonic FOCUS PLUS 850 Gold": { "brand": "SeaSonic", "efficiency": "Gold", - "formFactor": "atx", + "size": "atx", "power": 850, "price": 159.94 } From 54f02ae164470bf7ca72194c4a1e261cadc039b4 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Mon, 27 Mar 2023 09:31:53 +0800 Subject: [PATCH 201/420] Update code checkstyle --- .../bigpp/command/viewercommand/ViewerHelpCommand.java | 1 - src/main/java/seedu/bigpp/parser/Parser.java | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java index e7d90cb328..8ac5ec5bac 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -2,7 +2,6 @@ import seedu.bigpp.command.Command; import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.ui.UI; public class ViewerHelpCommand extends Command { private static final String HELP = "Here are the list of valid commands: \n" diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 95530d2bd8..7483a28a1d 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -19,7 +19,11 @@ import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; -import seedu.bigpp.command.viewercommand.*; +import seedu.bigpp.command.viewercommand.ViewerAddCommand; +import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.command.viewercommand.ViewerEditCommand; +import seedu.bigpp.command.viewercommand.ViewerHelpCommand; +import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; From f8b4a6d835e6e6ba33260cbf3ee5ece9ee5e7f04 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Mon, 27 Mar 2023 11:05:06 +0800 Subject: [PATCH 202/420] Add sequential diagram that was left out of developer guide --- docs/DeveloperGuide.md | 3 +++ docs/uml-pictures/loadChassisSequential.png | Bin 0 -> 29722 bytes 2 files changed, 3 insertions(+) create mode 100644 docs/uml-pictures/loadChassisSequential.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 990507a373..2e008dcdbc 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -71,7 +71,10 @@ Next, the method iterates over the `chassisMap` and sets the name attribute of e Finally, the method iterates over the `chassisMap` again, adding each `Chassis` object to the `ChassisList` stored in the `stringToComponentListMap` HashMap. +A UML sequence diagram showing the interactions between the different objects involved in handling this method can be +found below: +![load Chassis Sequential Diagram](uml-pictures/loadChassisSequential.png) ### Parser class The UML class diagram shows the features of the Parser class: diff --git a/docs/uml-pictures/loadChassisSequential.png b/docs/uml-pictures/loadChassisSequential.png new file mode 100644 index 0000000000000000000000000000000000000000..7620a8ab407410aeb856baea410f0173951dd197 GIT binary patch literal 29722 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

9r2Rk0bikTNluLDLBgTiWbLR1&~J3LA=j#Z3?b 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 J6kfRI^Ix?T{G9** literal 0 HcmV?d00001 From 4f67b89a7bd6b119e112d025f7565237b4bc2552 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 14:26:31 +0800 Subject: [PATCH 203/420] Add BuilderHelpCommand --- BigPP.log.lck | 0 .../buildercommand/BuilderHelpCommand.java | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+) delete mode 100644 BigPP.log.lck create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java new file mode 100644 index 0000000000..085e94bd34 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java @@ -0,0 +1,32 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; + +public class BuilderHelpCommand extends Command { + private static final String HELP = "Here are the list of valid commands: \n" + + "list - List all components of a certain type\n" + + "name - Change the name of the PC currently being edited to \n" + + "budget - Change the budget of the PC currently being edited to \n" + + "select - Add the component of type with index " + + "to the PC currently being edited \n" + + "info - View all the specifications of the component of type currently " + + "selected for the build\n" + + "unselect - Remove the component of type from the PC currently being" + + "edited\n" + + "custom - Creates a custom component of type " + + "with all the and adds it to the list of components of that type\n" + + "compare & Compares all the specifications between the components of" + + "type with indices and \n"; + + + /** + * Help command to view the list of valid commands when in Builder mode + * @return the list of valid commands + */ + @Override + public String executeCommand(DataStorage dataStorage) { + return this.HELP; + } +} + From 15a82c4f056f08a2b687046afaebb7e2dea72073 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 14:30:11 +0800 Subject: [PATCH 204/420] Shorten line lengths in BuilderHelpCommand --- .../bigpp/command/buildercommand/BuilderHelpCommand.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java index 085e94bd34..f8c39596df 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java @@ -10,12 +10,13 @@ public class BuilderHelpCommand extends Command { + "budget - Change the budget of the PC currently being edited to \n" + "select - Add the component of type with index " + "to the PC currently being edited \n" - + "info - View all the specifications of the component of type currently " - + "selected for the build\n" + + "info - View all the specifications of the component of type " + + " currently selected for the build\n" + "unselect - Remove the component of type from the PC currently being" + "edited\n" - + "custom - Creates a custom component of type " - + "with all the and adds it to the list of components of that type\n" + + "custom - Creates a custom component of type " + + " with all the and adds it to the list of components" + + " of that type\n" + "compare & Compares all the specifications between the components of" + "type with indices and \n"; From 7bc6342ca503bd6e218c7cd5771d6ad0c7bab355 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 14:57:13 +0800 Subject: [PATCH 205/420] Add abstract custom component command and custom motherboard command --- .../BuilderCustomComponentCommand.java | 43 +++++++++++++++++ .../BuilderCustomCpuCommand.java | 31 ++++-------- .../BuilderCustomMotherboardCommand.java | 48 +++++++++++++++++++ 3 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java new file mode 100644 index 0000000000..7d430f21b9 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java @@ -0,0 +1,43 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public abstract class BuilderCustomComponentCommand extends Command { + + public int EXPECTED_ARGUMENT_LENGTH; + + public BuilderCustomComponentCommand(String arguments) { + super.setArguments(arguments); + } + + public abstract int getExpectedArgumentLength(); + public abstract String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException; + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + String arguments = super.getArguments(); + String[] argumentList = arguments.split("\\|"); + + if (argumentList.length != getExpectedArgumentLength()) { + throw new PPException("Please enter a valid number of arguments for the custom component"); + } + + String name = argumentList[0].trim(); + if (name.equals("")) { + throw new PPException("Please enter a valid name for the custom component"); + } + + String brand = argumentList[1].trim(); + if (brand.equals("")) { + throw new PPException("Please enter a valid brand for the custom component"); + } + + return addNewComponent(argumentList, dataStorage, name, brand); + } + +} + diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 51b094d05d..f53617b082 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -1,36 +1,23 @@ package seedu.bigpp.command.buildercommand; -import seedu.bigpp.command.Command; import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; -public class BuilderCustomCpuCommand extends Command { +public class BuilderCustomCpuCommand extends BuilderCustomComponentCommand { + private static final int EXPECTED_ARGUMENT_LENGTH = 9; public BuilderCustomCpuCommand(String arguments) { - super.setArguments(arguments); + super(arguments); } - @Override - public String executeCommand(DataStorage dataStorage) throws PPException { - String arguments = super.getArguments(); - String[] argumentList = arguments.split("\\|"); - - if (argumentList.length != 9) { - throw new PPException("Please enter a valid number of arguments for the custom component"); - } - - String name = argumentList[0].trim(); - if (name.equals("")) { - throw new PPException("Please enter a valid name for the custom component"); - } - - String brand = argumentList[1].trim(); - if (brand.equals("")) { - throw new PPException("Please enter a valid brand for the custom component"); - } + public int getExpectedArgumentLength() { + return 9; + } + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { float price = 0; int cores = 0; int threads = 0; @@ -60,12 +47,10 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (socket.equals("")) { throw new PPException("Please enter a valid socket for the custom component"); } - CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpu(cpu); return "CPU added: " + cpu.getName(); } - } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java new file mode 100644 index 0000000000..3aa4936262 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -0,0 +1,48 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomMotherboardCommand extends BuilderCustomComponentCommand { + + public BuilderCustomMotherboardCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 8; + } + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + + try { + price = Float.parseFloat(argumentList[2]); + power = Float.parseFloat(argumentList[5]); + + // Check if all the values are positive + if (price < 0 || power < 0) { + throw new PPException("price and power should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price and power should be floats"); + } + + String formfactor = argumentList[3].trim(); + String socket = argumentList[4].trim(); + if (socket.equals("") || formfactor.equals("")) { + throw new PPException("Please enter a valid socket/formfactor for the custom component"); + } + Motherboard motherboard = new Motherboard(name, brand, price, formfactor, socket, power); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setMotherboard(motherboard); + + return "Motherboard added: " + motherboard.getName(); + } +} From 933f83117f751e98df99b40e16985a0a1e9e231c Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 15:00:17 +0800 Subject: [PATCH 206/420] Fix checkstyle errors --- .../command/buildercommand/BuilderCustomComponentCommand.java | 4 ---- .../bigpp/command/buildercommand/BuilderCustomCpuCommand.java | 1 - .../buildercommand/BuilderCustomMotherboardCommand.java | 1 - 3 files changed, 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java index 7d430f21b9..3eef63e979 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java @@ -1,15 +1,11 @@ package seedu.bigpp.command.buildercommand; import seedu.bigpp.command.Command; -import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.ui.UI; public abstract class BuilderCustomComponentCommand extends Command { - public int EXPECTED_ARGUMENT_LENGTH; - public BuilderCustomComponentCommand(String arguments) { super.setArguments(arguments); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index f53617b082..1bb76e5bfa 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -7,7 +7,6 @@ public class BuilderCustomCpuCommand extends BuilderCustomComponentCommand { - private static final int EXPECTED_ARGUMENT_LENGTH = 9; public BuilderCustomCpuCommand(String arguments) { super(arguments); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index 3aa4936262..2deff96996 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -1,6 +1,5 @@ package seedu.bigpp.command.buildercommand; -import seedu.bigpp.component.cpu.CPU; import seedu.bigpp.component.motherboard.Motherboard; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; From 1565b110f0e2cde5298f3d2a53d51d463401ea2e Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 17:01:00 +0800 Subject: [PATCH 207/420] Add additional flags for cpu --- BigPP.log.lck | 0 .../BuilderListComponentCommand.java | 368 +++++++++++++++++- .../seedu/bigpp/component/ComponentList.java | 90 +++++ 3 files changed, 440 insertions(+), 18 deletions(-) delete mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 664c3069f7..cf758565d2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -12,9 +12,24 @@ public class BuilderListComponentCommand extends Command { - public static final String NAME_FLAG = "-name"; - public static final String PRICE_FLAG = "-price"; - public static final String BRAND_FLAG = "-brand"; + private static final String NAME_FLAG = "-name"; + private static final String PRICE_FLAG = "-price"; + private static final String BRAND_FLAG = "-brand"; + private static final String CORE_FLAG = "-core"; + private static final String THREAD_FLAG = "-thread"; + private static final String BASE_CLOCK_FLAG = "-baseclock"; + private static final String BOOST_CLOCK_FLAG = "-boostclock"; + private static final String POWER_FLAG = "-power"; + private static final String SOCKET_FLAG = "-socket"; + private static final String SIZE_FLAG = "-size"; + private static final String RPM_FLAG = "-rpm"; + private static final String NOISE_FLAG = "-noise"; + private static final String MEMORY_FLAG = "-memory"; + private static final String STICKS_FLAG = "-sticks"; + private static final String SPEED_FLAG = "-speed"; + private static final String TYPE_FLAG = "-type"; + private static final String FORM_FACTOR_FLAG = "-formfactor"; + private static final String EFFICIENCY_FLAG = "-efficiency"; public BuilderListComponentCommand(String arguments) { setArguments(arguments); @@ -49,19 +64,68 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (userInputStringArray.length > 1) { String[] flagAndDescriptionArray = Arrays.copyOfRange(userInputStringArray, 1, userInputStringArray.length); + if (hasFlag(userInputStringArray)) { + if (containsFlag(flagAndDescriptionArray, NAME_FLAG)) { + componentList = handleNameFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, BRAND_FLAG)) { + componentList = handleBrandFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, PRICE_FLAG)) { + componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } - if (containsFlag(flagAndDescriptionArray, NAME_FLAG)) { - componentList = handleNameFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); - } - if (containsFlag(flagAndDescriptionArray, BRAND_FLAG)) { - componentList = handleBrandFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); - } - if (containsFlag(flagAndDescriptionArray, PRICE_FLAG)) { - componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, - componentIndexes); - } else if (!hasFlag(flagAndDescriptionArray)) { + switch (componentType) { + case "chassis": + if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { + componentList = handleSizeFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + case "cpu": + // handle core, thread, baseclock, boostclock, power and socket flag + if (containsFlag(flagAndDescriptionArray, CORE_FLAG)) { + componentList = handleCoreFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, THREAD_FLAG)) { + componentList = handleThreadFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + + if (containsFlag(flagAndDescriptionArray, BASE_CLOCK_FLAG)) { + componentList = handleBaseClockFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, BOOST_CLOCK_FLAG)) { + componentList = handleBoostClockFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + + case "cpucooler": + //handle rpm, noise and power flag + case "gpu": + //handle power and size flag + case "motherboard": + //handle formfactor, socket and power flag + case "psu": + //handle efficiency, formfactor and power flag + case "ram": + //handle memory, sticks, speed and power flag + case "storage": + //handle type, size and power flag + } + + } else { throw new PPException("Please enter a valid flag after the component type"); } + } String outputString = ""; @@ -82,6 +146,267 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } + //handle power flag with int from and int to range + private ComponentList handlePowerFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (powerFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String powerDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + if (powerDescription.split(" ").length < 4) { + throw new PPException("Please enter a full power description"); + } + + String[] powerDescriptionArray = Arrays.copyOfRange(powerDescription.split(" "), 0, 4); + if (hasFlag(powerDescriptionArray)) { + throw new PPException("Flag detected in power description. Please enter a valid power range"); + } + + String fromFlag = powerDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please enter '/from' before the power range"); + } + + String powerFrom = powerDescriptionArray[1]; + if (powerFrom.matches(".*\\D.*")) { + throw new PPException("Power start range must be an integer"); + } + + String toFlag = powerDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please enter '/to' before the power range"); + } + + String powerTo = powerDescriptionArray[3]; + if (powerTo.matches(".*\\D.*")) { + throw new PPException("Power end range must be an integer"); + } + + int powerFromInt = Integer.parseInt(powerFrom); + int powerToInt = Integer.parseInt(powerTo); + + if (powerFromInt > powerToInt) { + throw new PPException("Power start range must be smaller than power end range"); + } + + if (powerFromInt < 0 || powerToInt < 0) { + throw new PPException("Power must be a positive integer"); + } + + if (powerFromInt > 10000 || powerToInt > 10000) { + throw new PPException("Power must be less than 10000W"); + } + + componentList = ComponentList.filterByPower(componentList, powerFromInt, powerToInt, componentIndexes); + + flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); + + return componentList; + } + + // handle boost clock flag, boost clock is a float and has a /from and /to flag + private ComponentList handleBoostClockFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int boostClockFlagIndex = indexOfFlag(flagAndDescriptionArray, BOOST_CLOCK_FLAG); + if (boostClockFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String boostClockDescription = userInputString.split(BOOST_CLOCK_FLAG)[1].trim().toLowerCase(); + if (boostClockDescription.split(" ").length < 4) { + throw new PPException("Please enter a full boost clock description"); + } + + String[] boostClockDescriptionArray = Arrays.copyOfRange(boostClockDescription.split(" "), 0, 4); + if (hasFlag(boostClockDescriptionArray)) { + throw new PPException( + "Flag detected in boost clock description. Please enter a valid boost clock description"); + } + + String fromFlag = boostClockDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please use /from to specify the lower bound of the boost clock"); + } + + String boostClockLowerBoundString = boostClockDescriptionArray[1]; + if (boostClockLowerBoundString.matches(".*\\D.*")) { + throw new PPException("Please enter a float for the lower bound of the boost clock"); + } + + String toFlag = boostClockDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please use /to to specify the upper bound of the boost clock"); + } + + String boostClockUpperBoundString = boostClockDescriptionArray[3]; + if (boostClockUpperBoundString.matches(".*\\D.*")) { + throw new PPException("Please enter a float for the upper bound of the boost clock"); + } + + float boostClockLowerBound = Float.parseFloat(boostClockLowerBoundString); + float boostClockUpperBound = Float.parseFloat(boostClockUpperBoundString); + + if (boostClockLowerBound > boostClockUpperBound) { + throw new PPException("Please enter a lower bound that is smaller than the upper bound"); + } + + if (boostClockLowerBound < 0 || boostClockUpperBound < 0) { + throw new PPException("Please enter a positive boost clock"); + } + + if (boostClockLowerBound > 100 || boostClockUpperBound > 100) { + throw new PPException("Please enter a boost clock that is smaller than 100"); + } + + flagsArray.add("Boost Clock: " + boostClockLowerBound + " to " + boostClockUpperBound); + componentList = ComponentList.filterByBoostClock(componentList, boostClockLowerBound, boostClockUpperBound, + componentIndexes); + + return componentList; + + } + + //handle base clock flag, base clock is a float and has a /from and /to flag + private ComponentList handleBaseClockFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int baseClockFlagIndex = indexOfFlag(flagAndDescriptionArray, BASE_CLOCK_FLAG); + if (baseClockFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String baseClockDescription = userInputString.split(BASE_CLOCK_FLAG)[1].trim().toLowerCase(); + if (baseClockDescription.split(" ").length < 4) { + throw new PPException("Please enter a full base clock description"); + } + + String[] baseClockDescriptionArray = Arrays.copyOfRange(baseClockDescription.split(" "), 0, 4); + if (hasFlag(baseClockDescriptionArray)) { + throw new PPException( + "Flag detected in base clock description. Please enter a valid base clock description"); + } + String fromFlag = baseClockDescriptionArray[0].trim(); + if (!fromFlag.equals("/from")) { + throw new PPException("Please use /from to specify the lower bound of the base clock"); + } + + String fromBaseClock = baseClockDescriptionArray[1].trim(); + if (fromBaseClock.matches(".*\\D.*")) { + throw new PPException("Base clock should be a float"); + } + + String toFlag = baseClockDescriptionArray[2].trim(); + if (!toFlag.equals("/to")) { + throw new PPException("Please use /to to specify the upper bound of the base clock"); + } + + String toBaseClock = baseClockDescriptionArray[3].trim(); + if (toBaseClock.matches(".*\\D.*")) { + throw new PPException("Base clock should be a float"); + } + + float fromBaseClockFloat = Float.parseFloat(fromBaseClock); + float toBaseClockFloat = Float.parseFloat(toBaseClock); + + if (fromBaseClockFloat > toBaseClockFloat) { + throw new PPException("Start range must be smaller than end range"); + } + + if (fromBaseClockFloat < 0 || toBaseClockFloat < 0) { + throw new PPException("Base clock cannot be negative"); + } + + if (fromBaseClockFloat > 100 || toBaseClockFloat > 100) { + throw new PPException("Base clock cannot be greater than 100"); + } + + flagsArray.add("Base clock from " + fromBaseClock + " to " + toBaseClock); + componentList = ComponentList.filterByBaseClock(componentList, fromBaseClockFloat, toBaseClockFloat, + componentIndexes); + return componentList; + } + + private ComponentList handleThreadFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int threadFlagIndex = indexOfFlag(flagAndDescriptionArray, THREAD_FLAG); + if (threadFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a thread number after the flag"); + } + + String thread = flagAndDescriptionArray[threadFlagIndex + 1].trim().toLowerCase(); + + if (isFlag(thread)) { + throw new PPException("Flag detected in thread description. Please enter a valid thread number"); + } + + if (!thread.equals("4") && !thread.equals("8") && !thread.equals("12") && !thread.equals("16") && !thread + .equals("20") && !thread.equals("24") && !thread.equals("32")) { + throw new PPException("Please enter a valid thread number (4, 8, 12, 16, 20, 24 or 32)"); + } + + if (thread.matches(".*\\D.*")) { + throw new PPException("Please enter an integer for thread number"); + } + int threadInt = Integer.parseInt(thread); + flagsArray.add("Thread: " + thread); + + componentList = ComponentList.filterByThread(componentList, threadInt, componentIndexes); + return componentList; + } + + private ComponentList handleCoreFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int coreFlagIndex = indexOfFlag(flagAndDescriptionArray, CORE_FLAG); + if (coreFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a core number after the flag"); + } + + String core = flagAndDescriptionArray[coreFlagIndex + 1].trim().toLowerCase(); + + if (isFlag(core)) { + throw new PPException("Flag detected in core description. Please enter a valid core number"); + } + + if (!core.equals("4") && !core.equals("6") && !core.equals("8") && !core.equals("10") && !core.equals( + "12") && !core.equals("16")) { + throw new PPException("Please enter a valid core number (4, 6, 8, 10, 12 or 16)"); + } + flagsArray.add("core: " + core); + + if (core.matches(".*\\D.*")) { + throw new PPException("Please enter an integer for core number"); + } + + int coreInt = Integer.parseInt(core); + componentList = ComponentList.filterByCore(componentList, coreInt, componentIndexes); + return componentList; + } + + private ComponentList handleSizeFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int sizeFlagIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); + if (sizeFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a size after the flag"); + } + + String size = flagAndDescriptionArray[sizeFlagIndex + 1].trim().toLowerCase(); + + if (isFlag(size)) { + throw new PPException("Flag detected in size description. Please enter a valid size"); + } + + if (!size.equals("micro") && !size.equals("mini") && !size.equals("mid") && !size.equals("full")) { + throw new PPException("Please enter a valid size (micro, mini, mid or full)"); + } + flagsArray.add("size: " + size); + componentList = ComponentList.filterBySize(componentList, size, componentIndexes); + return componentList; + } + private ComponentList handlePriceFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -92,8 +417,7 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList handleBrandFlag(ComponentList componentList, ArrayLi if (brandFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a brand after the flag"); } - String brand = flagAndDescriptionArray[brandFlagIndex + 1].trim(); + String brand = flagAndDescriptionArray[brandFlagIndex + 1].trim().toLowerCase(); if (isFlag(brand)) { throw new PPException("Flag detected as a brand. Please enter another brand after the flag"); } @@ -156,7 +480,7 @@ private ComponentList handleNameFlag(ComponentList componentList, ArrayLis if (nameFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a name after the flag"); } - String name = flagAndDescriptionArray[nameFlagIndex + 1].trim(); + String name = flagAndDescriptionArray[nameFlagIndex + 1].trim().toLowerCase(); if (isFlag(name)) { throw new PPException("Flag detected as a name. Please enter another name after the flag"); } @@ -166,7 +490,15 @@ private ComponentList handleNameFlag(ComponentList componentList, ArrayLis } private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG); + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals( + SIZE_FLAG) || flag.equals(CORE_FLAG) || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag + .equals(BOOST_CLOCK_FLAG) || flag + .equals(POWER_FLAG) || flag.equals(SOCKET_FLAG) || flag.equals(RPM_FLAG) || flag.equals( + NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals(STICKS_FLAG) || flag + .equals( + SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag.equals( + FORM_FACTOR_FLAG) || flag + .equals(EFFICIENCY_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index 5679f635ed..00b8d70225 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -1,5 +1,13 @@ package seedu.bigpp.component; +import seedu.bigpp.component.chassis.Chassis; +import seedu.bigpp.component.cpu.CPU; +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.component.motherboard.Motherboard; +import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.component.storage.Storage; + import java.util.ArrayList; public class ComponentList extends ArrayList { @@ -22,6 +30,88 @@ public String getListString(ArrayList componentIndexes) { return outputString; } + //filter by power with from and to range that are integers + public static ComponentList filterByPower(ComponentList componentList, int from, int to, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getPower() >= from && cpu.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + + //filter by boostclock with from and to range + public static ComponentList filterByBoostClock(ComponentList componentList, Float from, Float to, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getBoostClock() >= from && cpu.getBoostClock() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByBaseClock(ComponentList componentList, Float from, Float to, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getBaseClock() >= from && cpu.getBaseClock() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + + public static ComponentList filterByThread(ComponentList componentList, int thread, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getThreads() == thread) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByCore(ComponentList componentList, int core, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getCores() == core) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterBySize(ComponentList componentList, String size, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Chassis chassis = (Chassis) componentList.get(i); + if (chassis.getSize().toLowerCase().contains(size)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + public static ComponentList filterByName(ComponentList componentList, String name, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); From f648deecffce2584957daef708cdfe4b0479c444 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 18:14:34 +0800 Subject: [PATCH 208/420] Add all flags for cpu --- .../BuilderListComponentCommand.java | 42 ++++++++++++++++--- .../buildercommand/BuilderSelectCommand.java | 2 +- .../seedu/bigpp/component/ComponentList.java | 14 +++++++ src/main/java/seedu/bigpp/parser/Parser.java | 6 +-- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index cf758565d2..2150490e28 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -47,7 +47,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String userInputString = getArguments(); userInputString = userInputString.toLowerCase(); - String[] userInputStringArray = userInputString.split(" "); + String[] userInputStringArray = userInputString.split("\\s+"); String componentType = userInputStringArray[0]; if (userInputString.equals("")) { @@ -107,6 +107,10 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentList = handlePowerFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } + if (containsFlag(flagAndDescriptionArray, SOCKET_FLAG)) { + componentList = handleSocketFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } case "cpucooler": //handle rpm, noise and power flag @@ -146,6 +150,32 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } + //handle socket flag that can be either AM4, AM5, LGA1200 or LGA1700 + private ComponentList handleSocketFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int socketFlagIndex = indexOfFlag(flagAndDescriptionArray, SOCKET_FLAG); + if (socketFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String socket = userInputString.split(SOCKET_FLAG)[1].trim().toLowerCase(); + + if (isFlag(socket)) { + throw new PPException("Flag detected in socket description. Please enter a valid socket"); + } + + if (!socket.equals("am4") && !socket.equals("am5") && !socket.equals("lga1200") && !socket.equals("lga1700")) { + throw new PPException("Please enter a valid socket (am4, am5, lga1200, lga1700))"); + } + + flagsArray.add("Socket: " + socket); + + componentList = ComponentList.filterBySocket(componentList, socket, componentIndexes); + + return componentList; + } + //handle power flag with int from and int to range private ComponentList handlePowerFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, @@ -156,7 +186,7 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList handleBoostClockFlag(String userInputString, ComponentL throw new PPException("Please enter a full boost clock description"); } - String[] boostClockDescriptionArray = Arrays.copyOfRange(boostClockDescription.split(" "), 0, 4); + String[] boostClockDescriptionArray = Arrays.copyOfRange(boostClockDescription.split("\\s+"), 0, 4); if (hasFlag(boostClockDescriptionArray)) { throw new PPException( "Flag detected in boost clock description. Please enter a valid boost clock description"); @@ -280,7 +310,7 @@ private ComponentList handleBaseClockFlag(String userInputString, ComponentLi } String baseClockDescription = userInputString.split(BASE_CLOCK_FLAG)[1].trim().toLowerCase(); - if (baseClockDescription.split(" ").length < 4) { + if (baseClockDescription.split("\\s+").length < 4) { throw new PPException("Please enter a full base clock description"); } @@ -415,11 +445,11 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList componentIndexes) { return outputString; } + //filter cpu by socket, compare string + public static ComponentList filterBySocket(ComponentList componentList, String socket, ArrayList + componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPU cpu = (CPU) componentList.get(i); + if (cpu.getSocket().toLowerCase().equals(socket)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + //filter by power with from and to range that are integers public static ComponentList filterByPower(ComponentList componentList, int from, int to, ArrayList componentIndexes) { diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 86d5b0ea23..69b7a92ee3 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -45,7 +45,7 @@ public class Parser { public Command parseCommand(String userInput) { String trimmedInput = userInput.trim(); - String[] inputList = trimmedInput.split(" ", 2); + String[] inputList = trimmedInput.split("\\s+", 2); String arguments = ""; if (inputList.length == 2) { @@ -137,7 +137,7 @@ private Command parseBuilderCommand(String commandWord, String arguments) { * @return the command */ private Command parseCustomCommand(String arguments) { - String[] inputList = arguments.split(" ", 2); + String[] inputList = arguments.split("\\s+", 2); String componentType = inputList[0].toLowerCase(); String attributes = ""; if (inputList.length == 2) { @@ -169,7 +169,7 @@ private Command parseCustomCommand(String arguments) { } private Command parseCompareCommand(String arguments) { - String[] inputList = arguments.split(" ", 2); + String[] inputList = arguments.split("\\s+", 2); String componentType = inputList[0].trim(); String attributes = ""; if (inputList.length == 2) { From 90e94ca53d1ca479e169c2c87454913d02bd05c1 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 18:19:24 +0800 Subject: [PATCH 209/420] fix checkstyle error --- .../BuilderListComponentCommand.java | 10 +++- .../seedu/bigpp/component/ComponentList.java | 50 +++++++++---------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 2150490e28..7901b6aba9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -84,6 +84,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentList = handleSizeFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } + break; case "cpu": // handle core, thread, baseclock, boostclock, power and socket flag if (containsFlag(flagAndDescriptionArray, CORE_FLAG)) { @@ -111,6 +112,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentList = handleSocketFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } + break; case "cpucooler": //handle rpm, noise and power flag @@ -124,6 +126,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { //handle memory, sticks, speed and power flag case "storage": //handle type, size and power flag + default: + break; } } else { @@ -447,12 +451,14 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList componentIndexes) { } //filter cpu by socket, compare string - public static ComponentList filterBySocket(ComponentList componentList, String socket, ArrayList - componentIndexes) { + public static ComponentList filterBySocket(ComponentList componentList, String socket, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -43,10 +43,10 @@ public static ComponentList filterBySocket(ComponentList componentList, St } return filteredComponentList; } - + //filter by power with from and to range that are integers - public static ComponentList filterByPower(ComponentList componentList, int from, int to, ArrayList - componentIndexes) { + public static ComponentList filterByPower(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -58,10 +58,9 @@ public static ComponentList filterByPower(ComponentList componentList, int return filteredComponentList; } - //filter by boostclock with from and to range - public static ComponentList filterByBoostClock(ComponentList componentList, Float from, Float to, ArrayList - componentIndexes) { + public static ComponentList filterByBoostClock(ComponentList componentList, Float from, Float to, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -73,8 +72,8 @@ public static ComponentList filterByBoostClock(ComponentList componentList return filteredComponentList; } - public static ComponentList filterByBaseClock(ComponentList componentList, Float from, Float to, ArrayList - componentIndexes) { + public static ComponentList filterByBaseClock(ComponentList componentList, Float from, Float to, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -86,9 +85,8 @@ public static ComponentList filterByBaseClock(ComponentList componentList, return filteredComponentList; } - - public static ComponentList filterByThread(ComponentList componentList, int thread, ArrayList - componentIndexes) { + public static ComponentList filterByThread(ComponentList componentList, int thread, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -100,8 +98,8 @@ public static ComponentList filterByThread(ComponentList componentList, in return filteredComponentList; } - public static ComponentList filterByCore(ComponentList componentList, int core, ArrayList - componentIndexes) { + public static ComponentList filterByCore(ComponentList componentList, int core, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { CPU cpu = (CPU) componentList.get(i); @@ -113,8 +111,8 @@ public static ComponentList filterByCore(ComponentList componentList, int return filteredComponentList; } - public static ComponentList filterBySize(ComponentList componentList, String size, ArrayList - componentIndexes) { + public static ComponentList filterBySize(ComponentList componentList, String size, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { Chassis chassis = (Chassis) componentList.get(i); @@ -126,8 +124,8 @@ public static ComponentList filterBySize(ComponentList componentList, Stri return filteredComponentList; } - public static ComponentList filterByName(ComponentList componentList, String name, ArrayList - componentIndexes) { + public static ComponentList filterByName(ComponentList componentList, String name, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { if (componentList.get(i).getName().toLowerCase().contains(name)) { @@ -138,8 +136,8 @@ public static ComponentList filterByName(ComponentList componentList, Stri return filteredComponentList; } - public static ComponentList filterByBrand(ComponentList componentList, String brand, ArrayList - componentIndexes) { + public static ComponentList filterByBrand(ComponentList componentList, String brand, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { if (componentList.get(i).getBrand().toLowerCase().contains(brand)) { From 1607b71e2cbf8c8739a009cf7142d8bc4478157c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 19:32:58 +0800 Subject: [PATCH 210/420] Add test for builder commands --- .../BuilderEditBudgetCommand.java | 2 +- .../BuilderListComponentCommand.java | 10 +- .../BuilderEditBudgetCommandTest.java | 37 ++++ .../BuilderListComponentCommandTest.java | 182 +++++++++++++++--- 4 files changed, 196 insertions(+), 35 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index e8869cd812..c1291590e1 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -22,7 +22,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String argument = super.getArguments(); if (argument.equals("")) { - throw new PPException("Please enter a budget"); + throw new PPException("Please enter a budget after the command"); } if (argument.matches(".*\\D.*") && !argument.matches("-1")) { throw new PPException("Please enter a budget that is an integer"); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 664c3069f7..7660c36e0c 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -102,27 +102,27 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList priceToInt) { - throw new PPException("Price from must be smaller than price to"); + throw new PPException("Start price must be less than end price"); } if (priceFromInt < 0 || priceToInt < 0) { throw new PPException("Price must be greater than 0"); diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java index 0dee43d2e4..15fa3163b9 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommandTest.java @@ -7,6 +7,9 @@ import seedu.bigpp.pc.PC; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +// import static org.junit.jupiter.api.Assertions.assertThrows; + public class BuilderEditBudgetCommandTest { @@ -20,4 +23,38 @@ public void executeCommand_editBudgetCommand_success() throws PPException { String editBudgetCommandResult = new BuilderEditBudgetCommand("1000").executeCommand(dataStorage); assertEquals("Current build budget is now: $1000.00", editBudgetCommandResult); } + + @Test + public void executeCommand_editBudgetCommandMissingArgument_exceptionThrown() { + PC pc = new PC("PC1", true); + dataStorage.pcList.add(pc); + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderEditBudgetCommand("") + .executeCommand(dataStorage)); + assertEquals("Please enter a budget after the command", exception.getMessage()); + } + + @Test + public void executeCommand_editBudgetCommandInvalidType_exceptionThrown() { + PC pc = new PC("PC1", true); + dataStorage.pcList.add(pc); + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderEditBudgetCommand("abc") + .executeCommand(dataStorage)); + assertEquals("Please enter a budget that is an integer", exception.getMessage()); + } + + //budget that is 0 throws exception + @Test + public void executeCommand_editBudgetCommandInvalidNumber_exceptionThrown() { + PC pc = new PC("PC1", true); + dataStorage.pcList.add(pc); + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderEditBudgetCommand("0") + .executeCommand(dataStorage)); + assertEquals("Please enter a budget that is greater than 0", exception.getMessage()); + } } diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 51b1425b0c..9ee9cf49f2 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -5,42 +5,43 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CPU_TYPE; - +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; public class BuilderListComponentCommandTest { - private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + "1.\n" - + "NAME: Intel core i3-10100\n" + "BRAND: Intel\n" + "PRICE: 99.5\n" + "CORES: 4\n" + "THREADS: 8\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.3\n" + "POWER: 65.0\n" + "SOCKET: LGA1200\n" + "================\n" - + "2.\n" + "NAME: Intel core i5-10600k\n" + "BRAND: Intel\n" + "PRICE: 182.47\n" + "CORES: 6\n" - + "THREADS: 12\n" + "BASECLOCK: 4.1\n" + "BOOSTCLOCK: 4.8\n" + "POWER: 125.0\n" + "SOCKET: LGA1200\n" - + "================\n" + "3.\n" + "NAME: Intel core i7-10700k\n" + "BRAND: Intel\n" + "PRICE: 269.95\n" - + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 5.1\n" + "POWER: 125.0\n" - + "SOCKET: LGA1200\n" + "================\n" + "4.\n" + "NAME: Intel core i3-12100f\n" + "BRAND: Intel\n" - + "PRICE: 106.93\n" + "CORES: 4\n" + "THREADS: 8\n" + "BASECLOCK: 3.3\n" + "BOOSTCLOCK: 4.3\n" - + "POWER: 58.0\n" + "SOCKET: LGA1700\n" + "================\n" + "5.\n" + "NAME: Intel core i5-12600k\n" - + "BRAND: Intel\n" + "PRICE: 213.82\n" + "CORES: 10\n" + "THREADS: 20\n" + "BASECLOCK: 3.7\n" - + "BOOSTCLOCK: 4.9\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + "6.\n" - + "NAME: Intel core i7-12700k\n" + "BRAND: Intel\n" + "PRICE: 312.88\n" + "CORES: 12\n" + "THREADS: 24\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 5.0\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" - + "7.\n" + "NAME: AMD Ryzen 3 3200G\n" + "BRAND: AMD\n" + "PRICE: 97.5\n" + "CORES: 4\n" + "THREADS: 4\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.0\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" - + "8.\n" + "NAME: AMD Ryzen 5 5600X\n" + "BRAND: AMD\n" + "PRICE: 156.64\n" + "CORES: 6\n" + "THREADS: 12\n" - + "BASECLOCK: 3.7\n" + "BOOSTCLOCK: 4.6\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" - + "9.\n" + "NAME: AMD Ryzen 7 5800X\n" + "BRAND: AMD\n" + "PRICE: 211.33\n" + "CORES: 8\n" + "THREADS: 16\n" - + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 4.7\n" + "POWER: 105.0\n" + "SOCKET: AM4\n" + "================\n" - + "10.\n" + "NAME: AMD Ryzen 5 7600X\n" + "BRAND: AMD\n" + "PRICE: 240.86\n" + "CORES: 6\n" - + "THREADS: 12\n" + "BASECLOCK: 4.7\n" + "BOOSTCLOCK: 5.3\n" + "POWER: 105.0\n" + "SOCKET: AM5\n" - + "================\n" + "11.\n" + "NAME: AMD Ryzen 7 7700X\n" + "BRAND: AMD\n" + "PRICE: 341.29\n" - + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.4\n" + "POWER: 105.0\n" - + "SOCKET: AM5\n" + "================\n" + "12.\n" + "NAME: AMD Ryzen 9 7950X\n" + "BRAND: AMD\n" - + "PRICE: 589.0\n" + "CORES: 16\n" + "THREADS: 32\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.7\n" - + "POWER: 170.0\n" + "SOCKET: AM5\n" + "================\n"; + private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + "1.\n" + + "NAME: Intel core i3-10100\n" + "BRAND: Intel\n" + "PRICE: 99.5\n" + "CORES: 4\n" + "THREADS: 8\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.3\n" + "POWER: 65.0\n" + "SOCKET: LGA1200\n" + "================\n" + + "2.\n" + "NAME: Intel core i5-10600k\n" + "BRAND: Intel\n" + "PRICE: 182.47\n" + "CORES: 6\n" + + "THREADS: 12\n" + "BASECLOCK: 4.1\n" + "BOOSTCLOCK: 4.8\n" + "POWER: 125.0\n" + "SOCKET: LGA1200\n" + + "================\n" + "3.\n" + "NAME: Intel core i7-10700k\n" + "BRAND: Intel\n" + "PRICE: 269.95\n" + + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 5.1\n" + "POWER: 125.0\n" + + "SOCKET: LGA1200\n" + "================\n" + "4.\n" + "NAME: Intel core i3-12100f\n" + "BRAND: Intel\n" + + "PRICE: 106.93\n" + "CORES: 4\n" + "THREADS: 8\n" + "BASECLOCK: 3.3\n" + "BOOSTCLOCK: 4.3\n" + + "POWER: 58.0\n" + "SOCKET: LGA1700\n" + "================\n" + "5.\n" + "NAME: Intel core i5-12600k\n" + + "BRAND: Intel\n" + "PRICE: 213.82\n" + "CORES: 10\n" + "THREADS: 20\n" + "BASECLOCK: 3.7\n" + + "BOOSTCLOCK: 4.9\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + "6.\n" + + "NAME: Intel core i7-12700k\n" + "BRAND: Intel\n" + "PRICE: 312.88\n" + "CORES: 12\n" + "THREADS: 24\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 5.0\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + + "7.\n" + "NAME: AMD Ryzen 3 3200G\n" + "BRAND: AMD\n" + "PRICE: 97.5\n" + "CORES: 4\n" + "THREADS: 4\n" + + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.0\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" + + "8.\n" + "NAME: AMD Ryzen 5 5600X\n" + "BRAND: AMD\n" + "PRICE: 156.64\n" + "CORES: 6\n" + "THREADS: 12\n" + + "BASECLOCK: 3.7\n" + "BOOSTCLOCK: 4.6\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" + + "9.\n" + "NAME: AMD Ryzen 7 5800X\n" + "BRAND: AMD\n" + "PRICE: 211.33\n" + "CORES: 8\n" + "THREADS: 16\n" + + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 4.7\n" + "POWER: 105.0\n" + "SOCKET: AM4\n" + "================\n" + + "10.\n" + "NAME: AMD Ryzen 5 7600X\n" + "BRAND: AMD\n" + "PRICE: 240.86\n" + "CORES: 6\n" + + "THREADS: 12\n" + "BASECLOCK: 4.7\n" + "BOOSTCLOCK: 5.3\n" + "POWER: 105.0\n" + "SOCKET: AM5\n" + + "================\n" + "11.\n" + "NAME: AMD Ryzen 7 7700X\n" + "BRAND: AMD\n" + "PRICE: 341.29\n" + + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.4\n" + "POWER: 105.0\n" + + "SOCKET: AM5\n" + "================\n" + "12.\n" + "NAME: AMD Ryzen 9 7950X\n" + "BRAND: AMD\n" + + "PRICE: 589.0\n" + "CORES: 16\n" + "THREADS: 32\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.7\n" + + "POWER: 170.0\n" + "SOCKET: AM5\n" + "================\n"; + private DataStorage dataStorage = new DataStorage(); @Test - public void executeCommand_listComponentCommand_success() throws PPException { + public void executeCommand_listCpu_success() throws PPException { dataStorage.initStringToComponentListMap(); dataStorage.loadAll(); @@ -50,4 +51,127 @@ public void executeCommand_listComponentCommand_success() throws PPException { String listComponentCommandResult = new BuilderListComponentCommand(CPU_TYPE).executeCommand(dataStorage); assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } + + @Test + public void executeCommand_listCpuMissingName_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -name") + .executeCommand(dataStorage)); + assertEquals("Please enter a name after the flag", exception.getMessage()); + } + + @Test + public void executeCommand_listCpuInvalidName_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -name -name") + .executeCommand(dataStorage)); + assertEquals("Flag detected as a name. Please enter another name after the flag", exception.getMessage()); + } + + @Test + public void executeCommand_listCpuMissingBrand_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -brand") + .executeCommand(dataStorage)); + assertEquals("Please enter a brand after the flag", exception.getMessage()); + } + + @Test + public void executeCommand_listCpuInvalidBrand_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -brand -price") + .executeCommand(dataStorage)); + assertEquals("Flag detected as a brand. Please enter another brand after the flag", exception.getMessage()); + } + + @Test + public void executeCommand_listCpuMissingPriceDescription_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -price") + .executeCommand(dataStorage)); + assertEquals("Please enter a price description after the flag", + exception.getMessage()); + } + + @Test + public void executeCommand_listCpuIncompletePriceDescription_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand( + "cpu -price /from 10") + .executeCommand(dataStorage)); + assertEquals("Please enter the full price description after the flag containing the start and end price range", + exception.getMessage()); + } + + @Test + public void executeCommand_listCpuInvalidPriceType_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand( + "cpu -price /from ten /to 100").executeCommand(dataStorage)); + assertEquals("Start price must be a positive integer", exception.getMessage()); + } + + @Test + public void executeCommand_listCpuInvalidPriceRange_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand( + "cpu -price /from 100 /to 10").executeCommand(dataStorage)); + assertEquals("Start price must be less than end price", exception.getMessage()); + } + + @Test + public void executeCommand_listcpuInvalidPrice_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand( + "cpu -price /from -100 /to 100").executeCommand(dataStorage)); + assertEquals("Start price must be a positive integer", exception.getMessage()); + } + + @Test + public void executeCommand_listcpuInvalidPriceDescription_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand( + "cpu -price from 100 to 100").executeCommand(dataStorage)); + assertEquals("Please use /from to specify the start price range", exception.getMessage()); + } } From da6f0f54a03699ee8bb8b82d9083f89592f77bcf Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 19:35:55 +0800 Subject: [PATCH 211/420] Add Junit test for builder edit name --- .../buildercommand/BuilderEditNameCommandTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java index 6da8603c15..ad889ed152 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderEditNameCommandTest.java @@ -7,6 +7,7 @@ import seedu.bigpp.pc.PC; import seedu.bigpp.ui.UI; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; public class BuilderEditNameCommandTest { @@ -20,4 +21,15 @@ public void executeCommand_editNameCommand_success() throws PPException { String editNameCommandResult = new BuilderEditNameCommand("PC2").executeCommand(dataStorage); assertEquals("Current build name is now: PC2", editNameCommandResult); } + + @Test + public void executeCommand_editNameCommandMissingArgument_exceptionThrown() { + PC pc = new PC("PC1", true); + dataStorage.pcList.add(pc); + UI.setPCBuilderMode(0); + Exception exception = assertThrows(PPException.class, () -> new BuilderEditNameCommand("") + .executeCommand(dataStorage)); + assertEquals("Please enter a name", exception.getMessage()); + } + } From f890a0e8b543b0c00d2ed759e1ec7c04ccd63e82 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 19:45:50 +0800 Subject: [PATCH 212/420] Add documentation for componentlist methods and buildercommands --- .../BuilderListComponentCommand.java | 7 ++-- .../buildercommand/BuilderSelectCommand.java | 3 +- .../command/commoncommand/BackCommand.java | 2 +- .../seedu/bigpp/component/ComponentList.java | 32 ++++++++++++++++--- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 664c3069f7..ac6c5d07ad 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -21,8 +21,11 @@ public BuilderListComponentCommand(String arguments) { } /** - * Change the budget of the current PC that the builder is working on - * @return the new budget of the PC + * Lists all components of a given component type including optional flags + * that would filter the list of components. Such as filtering for name, price + * and brand. + * + * @return a string containing all components of a given component type */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 9514f74286..a73a42eabc 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -14,7 +14,8 @@ public BuilderSelectCommand(String arguments) { } /** - * Change the Component of the PC that the builder is working on + * Selects a component to be added to the PC that the builder is working on + * * @return Added Component message */ @Override diff --git a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java index a0a9fdf731..2bb511b891 100644 --- a/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java +++ b/src/main/java/seedu/bigpp/command/commoncommand/BackCommand.java @@ -8,7 +8,7 @@ public class BackCommand extends Command { /* * back command to return to the previous menu. Does nothing if already in - * PCVieer menu + * PCViewer menu * * @return the message to be displayed to the user */ diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index 5679f635ed..bf2f58454f 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -4,6 +4,12 @@ public class ComponentList extends ArrayList { + /* + * Lists all components in the list. If the list is filtered, the indexes of the + * components in the original list will be shown. + * + * @return a string containing all the components in the list + */ public String getListString(ArrayList componentIndexes) { String outputString = ""; @@ -22,8 +28,14 @@ public String getListString(ArrayList componentIndexes) { return outputString; } - public static ComponentList filterByName(ComponentList componentList, String name, ArrayList - componentIndexes) { + /* + * Filters the list of components by name. Adds the index of the component in + * the original list to the componentIndexes list. + * + * @param componentList the list of components to be filtered + */ + public static ComponentList filterByName(ComponentList componentList, String name, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { if (componentList.get(i).getName().toLowerCase().contains(name)) { @@ -34,8 +46,14 @@ public static ComponentList filterByName(ComponentList componentList, Stri return filteredComponentList; } - public static ComponentList filterByBrand(ComponentList componentList, String brand, ArrayList - componentIndexes) { + /* + * Filters the list of components by brand. Adds the index of the component in + * the original list to the componentIndexes list. + * + * @return componentList the list of components to be filtered + */ + public static ComponentList filterByBrand(ComponentList componentList, String brand, + ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { if (componentList.get(i).getBrand().toLowerCase().contains(brand)) { @@ -46,6 +64,12 @@ public static ComponentList filterByBrand(ComponentList componentList, Str return filteredComponentList; } + /* + * Filters the list of components by price. Adds the index of the component in + * the original list to the componentIndexes list. + * + * @return componentList the list of components to be filtered + */ public static ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); From a129e047c7ca6aa112efb0307acfd48dedf7e51b Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 20:29:30 +0800 Subject: [PATCH 213/420] Refactor DG for UI Class --- docs/DeveloperGuide.md | 16 +++++++++++++++- docs/uml-pictures/UIClassDiagram.png | Bin 23540 -> 23646 bytes docs/uml-source/UIClassDiagram.puml | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 2e008dcdbc..4bce64df2e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -36,7 +36,21 @@ Below is the Class diagram for the UI class ![UI Class Diagram](uml-pictures/UIClassDiagram.png) -The class will first initialize its `UIState` to `PCVIEWER`. It will also initialize the `PCViewerMenu` class. `showWelcome` will print out the logos and welcome message. `updateUI` will call `printMenu` on `PCViewerMenu` or `PCBuilderMenu` depending on the `UIState`. `setPCViewerMode` will update `UIState` to `PCVIEWER` and set `pcBuilderMenu` to null. `setPCBuilderMode` will update the `UIState` to `PCBuilder` and create a new instance of `PCBuilderMenu`. +The `UI` Class serves as the interface between the user and BigPP. It is responsible for the following key actions + +1. **Initialization**: Upon start up of BigPP, the instance of `DataStorage` is parsed into the `updateUI` method of `UI` to give it the ability to access resources for BigPP. `UIState` is set to be `PCViewer`. + +2. **Functionality** + - Shows welcome message to the user + - Gets input from the user + - Sets the `UIState` of BigPP depending on user command + - Updates the user interface to show the menu depending on the `UIState` + - Clears the terminal after every user command + - Shows feedback to the user after every user command + +3. **Behavior**: The `UI` Class acts as the intermediary between the user and BigPP. `UIState` of `UI` can change between `PCViewer` and `PCBuilder` which would result in different commands available to the user. This makes the possible commands that can be given clear to the user. + +In summary, UI gives crucial feedback to the user such as the menu of possible commands based on the current menu and results of a given command. ### DataStorage class Below is the Class diagram for the DataStorage class: diff --git a/docs/uml-pictures/UIClassDiagram.png b/docs/uml-pictures/UIClassDiagram.png index 99eeee9532020010f4f7e7daad4bf2be46c289dd..83607a4a6e4eac44d48b2ff78ca7dd02c9037ce3 100644 GIT binary patch literal 23646 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 diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml index f4c7eea7d0..92b05969ae 100644 --- a/docs/uml-source/UIClassDiagram.puml +++ b/docs/uml-source/UIClassDiagram.puml @@ -1,6 +1,6 @@ @startuml -class UI { +abstract class UI { -uiState: UIState -LOGO: String -DIVIDER: String From bbd4c551e407de9760ac950aa69a055ec71591b3 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 21:00:23 +0800 Subject: [PATCH 214/420] Add custom GPU command --- .../BuilderCustomGpuCommand.java | 47 +++++++++++++++++++ .../BuilderCustomMotherboardCommand.java | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java new file mode 100644 index 0000000000..0c35cf26bd --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java @@ -0,0 +1,47 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.gpu.GPU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomGpuCommand extends BuilderCustomComponentCommand { + + public BuilderCustomGpuCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 5; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + + try { + price = Float.parseFloat(argumentList[2]); + power = Float.parseFloat(argumentList[3]); + + // Check if all the values are positive + if (price < 0 || power < 0) { + throw new PPException("price and power should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price and power should be floats"); + } + + String size = argumentList[3].trim(); + if (size.equals("")) { + throw new PPException("Please enter a valid size for the custom component"); + } + GPU gpu = new GPU(name, brand, price, power, size); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setGpu(gpu); + + return "GPU added: " + gpu.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index 2deff96996..abdc75e37e 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -12,7 +12,7 @@ public BuilderCustomMotherboardCommand(String arguments) { } public int getExpectedArgumentLength() { - return 8; + return 6; } public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) throws PPException { From 8a38cdae60494f960bf14474f773641f59092861 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 21:03:46 +0800 Subject: [PATCH 215/420] Add custom GPU command to parser --- src/main/java/seedu/bigpp/parser/Parser.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 86d5b0ea23..53f9b69e63 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,6 +1,7 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; +import seedu.bigpp.command.buildercommand.*; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareChassisCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCoolerCommand; @@ -9,13 +10,6 @@ import seedu.bigpp.command.buildercommand.comparecommand.BuilderComparePsuCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareRamCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareStorageCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; -import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; -import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; -import seedu.bigpp.command.buildercommand.BuilderInfoCommand; -import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; -import seedu.bigpp.command.buildercommand.BuilderSelectCommand; -import seedu.bigpp.command.buildercommand.BuilderUnselectCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; @@ -148,7 +142,7 @@ private Command parseCustomCommand(String arguments) { case CPU_TYPE: return new BuilderCustomCpuCommand(attributes); case GPU_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomGpuCommand(attributes); case RAM_TYPE: // return new UnrecognizedCommand(); case STORAGE_TYPE: @@ -156,7 +150,7 @@ private Command parseCustomCommand(String arguments) { case PSU_TYPE: // return new UnrecognizedCommand(); case MOTHERBOARD_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomMotherboardCommand(attributes); case CHASSIS_TYPE: // return new UnrecognizedCommand(); case CPU_COOLER_TYPE: From 0efddea50b7941f1d579ced045121e4fbdfb4b68 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 21:59:49 +0800 Subject: [PATCH 216/420] Add rest of custom component commands --- .../BuilderCustomChassisCommand.java | 45 +++++++++++++++++ .../BuilderCustomCpuCoolerCommand.java | 47 ++++++++++++++++++ .../BuilderCustomGpuCommand.java | 2 +- .../BuilderCustomPsuCommand.java | 48 ++++++++++++++++++ .../BuilderCustomRamCommand.java | 48 ++++++++++++++++++ .../BuilderCustomStorageCommand.java | 49 +++++++++++++++++++ src/main/java/seedu/bigpp/parser/Parser.java | 10 ++-- 7 files changed, 243 insertions(+), 6 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java create mode 100644 src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java new file mode 100644 index 0000000000..dc49f38b7b --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java @@ -0,0 +1,45 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.chassis.Chassis; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomChassisCommand extends BuilderCustomComponentCommand { + + public BuilderCustomChassisCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 5; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + + try { + price = Float.parseFloat(argumentList[2]); + + // Check if all the values are positive + if (price < 0) { + throw new PPException("price should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price should be a float"); + } + + String size = argumentList[3].trim(); + if (size.equals("")) { + throw new PPException("Please enter a valid size for the custom component"); + } + Chassis chassis = new Chassis(name, brand, price, size); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setChassis(chassis); + + return "Chassis added:" + chassis.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java new file mode 100644 index 0000000000..c089a5a69f --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java @@ -0,0 +1,47 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.cpucooler.CPUCooler; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomCpuCoolerCommand extends BuilderCustomComponentCommand { + + public BuilderCustomCpuCoolerCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 6; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + float noise = 0; + int rpm = 0; + + try { + price = Float.parseFloat(argumentList[3]); + power = Float.parseFloat(argumentList[4]); + rpm = Integer.parseInt(argumentList[1]); + noise = Float.parseFloat(argumentList[2]); + + // Check if all the values are positive + if (price < 0 || power < 0 || rpm < 0 || noise < 0) { + throw new PPException("price, power, rpm and noise should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price, power and noise should be floats, rpm should be an int"); + } + + CPUCooler cpuCooler = new CPUCooler(name, brand, price, rpm, noise, power); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpuCooler(cpuCooler); + + return "CPU Cooler added: " + cpuCooler.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java index 0c35cf26bd..5b08797517 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java @@ -34,7 +34,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price and power should be floats"); } - String size = argumentList[3].trim(); + String size = argumentList[4].trim(); if (size.equals("")) { throw new PPException("Please enter a valid size for the custom component"); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java new file mode 100644 index 0000000000..cfa5d25186 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java @@ -0,0 +1,48 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.psu.PSU; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomPsuCommand extends BuilderCustomComponentCommand { + + public BuilderCustomPsuCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 6; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + + try { + price = Float.parseFloat(argumentList[5]); + power = Float.parseFloat(argumentList[4]); + + // Check if all the values are positive + if (price < 0 || power < 0) { + throw new PPException("price and power should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price and power should be floats"); + } + + String efficiency = argumentList[2].trim(); + String formFactor = argumentList[3].trim(); + if (efficiency.equals("") || formFactor.equals("")) { + throw new PPException("Please enter a valid efficiency and form factor for the custom component"); + } + PSU psu = new PSU(name, price, brand, efficiency, formFactor, power); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setPsu(psu); + + return "PSU added: " + psu.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java new file mode 100644 index 0000000000..2ac87ebb80 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java @@ -0,0 +1,48 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.ram.RAM; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomRamCommand extends BuilderCustomComponentCommand { + + public BuilderCustomRamCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 7; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + int memory = 0; + int sticks = 0; + int speed = 0; + + try { + price = Float.parseFloat(argumentList[1]); + power = Float.parseFloat(argumentList[6]); + memory = Integer.parseInt(argumentList[2]); + sticks = Integer.parseInt(argumentList[3]); + speed = Integer.parseInt(argumentList[4]); + + // Check if all the values are positive + if (price < 0 || power < 0 || memory < 0 || sticks < 0 || speed < 0) { + throw new PPException("price, power, memory, sticks, and speed should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price and power should be floats, memory sticks and speed should be integers"); + } + RAM ram = new RAM(name, brand, price, memory, sticks, speed, power); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setRam(ram); + + return "RAM added: " + ram.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java new file mode 100644 index 0000000000..9754af66df --- /dev/null +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -0,0 +1,49 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; + +public class BuilderCustomStorageCommand extends BuilderCustomComponentCommand { + + public BuilderCustomStorageCommand(String arguments) { + super(arguments); + } + + public int getExpectedArgumentLength() { + return 6; + } + + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) + throws PPException { + float price = 0; + float power = 0; + int size = 0; + + try { + price = Float.parseFloat(argumentList[2]); + power = Float.parseFloat(argumentList[3]); + size = Integer.parseInt(argumentList[5]); + + // Check if all the values are positive + if (price < 0 || power < 0 || size < 0) { + throw new PPException("price, power and size should be positive"); + } + + } catch (NumberFormatException e) { + throw new PPException( + "price and power should be floats, size should be an integer"); + } + + String type = argumentList[1].trim(); + if (type.equals("")) { + throw new PPException("Please enter a valid type for the custom component"); + } + Storage storage = new Storage(name, brand, price, type, size, power); + + dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setStorage(storage); + + return "Storage added: " + storage.getName(); + } +} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 53f9b69e63..423dcefeb6 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -144,17 +144,17 @@ private Command parseCustomCommand(String arguments) { case GPU_TYPE: return new BuilderCustomGpuCommand(attributes); case RAM_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomRamCommand(attributes); case STORAGE_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomStorageCommand(attributes); case PSU_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomPsuCommand(attributes); case MOTHERBOARD_TYPE: return new BuilderCustomMotherboardCommand(attributes); case CHASSIS_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomChassisCommand(attributes); case CPU_COOLER_TYPE: - // return new UnrecognizedCommand(); + return new BuilderCustomCpuCoolerCommand(attributes); default: return new UnrecognizedCommand( "Invalid component type!, valid types are " From fdf3cb983dd6170322256c2f7f7eedd4c7ca098b Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Mon, 27 Mar 2023 22:08:41 +0800 Subject: [PATCH 217/420] Fix import checkstyle errors --- src/main/java/seedu/bigpp/parser/Parser.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 423dcefeb6..95f7c4a770 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,7 +1,20 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.*; +import seedu.bigpp.command.buildercommand.BuilderCustomChassisCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomMotherboardCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCoolerCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomGpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomPsuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomRamCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomStorageCommand; +import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; +import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; +import seedu.bigpp.command.buildercommand.BuilderSelectCommand; +import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderUnselectCommand; +import seedu.bigpp.command.buildercommand.BuilderInfoCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareChassisCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareCpuCoolerCommand; From a4f0dad56c67ee0689b7199ce716941ee47504db Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Mon, 27 Mar 2023 23:00:17 +0800 Subject: [PATCH 218/420] Add builder help command to Parser --- src/main/java/seedu/bigpp/parser/Parser.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 8c0c6d126b..5537e47c70 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -13,6 +13,7 @@ import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderSelectCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; +import seedu.bigpp.command.buildercommand.BuilderHelpCommand; import seedu.bigpp.command.buildercommand.BuilderUnselectCommand; import seedu.bigpp.command.buildercommand.BuilderInfoCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareChassisCommand; @@ -136,6 +137,8 @@ private Command parseBuilderCommand(String commandWord, String arguments) { return parseCustomCommand(arguments); case "compare": return parseCompareCommand(arguments); + case "help": + return new BuilderHelpCommand(); default: return new UnrecognizedCommand(""); } From 8e0b7043741064364f1442a844f5c98da0c4565f Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 23:23:01 +0800 Subject: [PATCH 219/420] Fix help for builder --- .../bigpp/command/buildercommand/BuilderHelpCommand.java | 6 +++++- .../bigpp/command/viewercommand/ViewerHelpCommand.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java index f8c39596df..370c945be6 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java @@ -27,7 +27,11 @@ public class BuilderHelpCommand extends Command { */ @Override public String executeCommand(DataStorage dataStorage) { - return this.HELP; + return getHelp(); + } + + public static String getHelp() { + return HELP; } } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java index 8ac5ec5bac..7a5171efa7 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -16,6 +16,10 @@ public class ViewerHelpCommand extends Command { */ @Override public String executeCommand(DataStorage dataStorage) { - return this.HELP; + return getHelp(); + } + + private static String getHelp() { + return HELP; } } From 959f28456d1016591694e3e21f99c58d6d337fcf Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Mon, 27 Mar 2023 23:36:34 +0800 Subject: [PATCH 220/420] Setup base framework for UserGuide, to add all the new commands and their intricate flags --- docs/UserGuide.md | 94 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 2692000f52..fa6ba62955 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,11 +1,91 @@ + # User Guide + +## Table of contents +- [Introduction](#introduction) +- [Getting Started](#getting-started) +- [Commands](#commands) + - [In PCViewer Mode](#in-pcviewer-mode) + - [`add PC_NAME`](#add-pc_name) + - [`view PC_INDEX`](#view-pc_index) + - [`edit PC_INDEX`](#edit-pc_index) + - [`delete PC_INDEX`](#delete-pc_index) + - [`bye`](#bye) + - [In PCBuilder Mode](#in-pcbuilder-mode) + - [`list COMPONENT_TYPE`](#list-component_type) + - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) + - [`budget INTEGER`](#budget-integer) + - [`name NEW_NAME`](#name-new_name) + - [`back`](#back) +- [Additional Features](#additional-features) + - [Compatibility Check](#compatibility-check) + - [Glossary](#glossary) ## Introduction -PC Part Picker is a command line application for planning your own PC builds. +Welcome to Big PC Part-Picker (BigPP) +BigPP is a command-line application designed for PC enthusiasts and professional PC builders who aim to: -## Command Summary -### From PCViewer + - streamline the [process](#commands) of managing computer builds + - verify the [compatibility](#compatibility-check) of selected components. + +This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. +If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions, or consult a search engine or even ask ChatGPT. +Text formatted like `this` represents commands that can be entered into the command line or output displayed in the terminal. + +## Getting Started + +1. Install [Java 11](https://www.oracle.com/java/technologies/downloads/#java11) for your operating system. If you are unsure about how to do this, you can refer to the [Java installation guide](https://docs.oracle.com/en/java/javase/11/install/overview-jdk-installation.html) or consult a search engine. +2. Download the latest version of `BigPP` from +[the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). +3. Copy the file to an empty folder you want to use as the _home folder_ This will be the folder in which BigPP will store all of its user data. +4. Right click inside the _home folder_ and open a terminal at that location +5. Run the command `java -jar BigPP.jar` to start the app. +6. Refer to the [Commands](#Commands) below to try out the application! + + +Upon successful initialization of the program for the first time, you would be greeted by the following, assuming you do not currently have a user.json file in your _home folder_ +``` +User file does not exist. Creating new user file. +User PCs found, loading... + _____ _____ _____ _____ _____ + /\ \ /\ \ /\ \ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ +/:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | +\:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ + \::::::/ / \:::\ \ \::::::/ / + \::::/ / \:::\____\ \::::/ / + \::/____/ \::/ / \::/____/ + ~~ \/____/ + + +Welcome to BigPP! +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +What would you like to do? +=================================================== + +``` + +## Commands + +### In PCViewer Mode #### `add PC_NAME` **Functionality:** Adds a PC with the name `PC_NAME` to your PC list @@ -21,7 +101,7 @@ PC Part Picker is a command line application for planning your own PC builds. #### `bye` **Functionality:** Exits the application -### From PCBuilder +### In PCBuilder Mode #### `list COMPONENT_TYPE` **Functionality:** Lists all components of type `COMPONENT_TYPE` @@ -37,4 +117,10 @@ PC Part Picker is a command line application for planning your own PC builds. #### `back` **Functionality:** Goes back to PCViewer menu +## Additional Features + +### Compatibility Check +`Coming soon` + +### Glossary \ No newline at end of file From 20bb9cf423376e0a95dc04737e4b1c014d0c0afb Mon Sep 17 00:00:00 2001 From: typingpanda Date: Mon, 27 Mar 2023 23:45:51 +0800 Subject: [PATCH 221/420] Add flag for cpucooler and gpu --- .../BuilderListComponentCommand.java | 305 +++++++++++++++++- .../seedu/bigpp/component/ComponentList.java | 59 +++- 2 files changed, 353 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 5b79cc1fed..059b868404 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -39,7 +39,6 @@ public BuilderListComponentCommand(String arguments) { * Lists all components of a given component type including optional flags * that would filter the list of components. Such as filtering for name, price * and brand. - * * @return a string containing all components of a given component type */ @Override @@ -84,7 +83,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { switch (componentType) { case "chassis": if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { - componentList = handleSizeFlag(componentList, flagsArray, flagAndDescriptionArray, + componentList = handleCpuSizeFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } break; @@ -108,7 +107,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { - componentList = handlePowerFlag(userInputString, componentList, flagsArray, + componentList = handlePowerFlagCpu(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, SOCKET_FLAG)) { @@ -119,16 +118,43 @@ public String executeCommand(DataStorage dataStorage) throws PPException { case "cpucooler": //handle rpm, noise and power flag + if (containsFlag(flagAndDescriptionArray, RPM_FLAG)) { + componentList = handleRpmFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, NOISE_FLAG)) { + componentList = handleNoiseFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlagCpuCooler(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + break; case "gpu": //handle power and size flag + if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { + componentList = handleSizeFlagGpu(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlagGpu(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + break; case "motherboard": //handle formfactor, socket and power flag + break; case "psu": //handle efficiency, formfactor and power flag + break; case "ram": //handle memory, sticks, speed and power flag + break; case "storage": //handle type, size and power flag + break; default: break; } @@ -157,6 +183,246 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } + private ComponentList handlePowerFlagGpu(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (powerFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String powerDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + if (powerDescription.split("\\s+").length < 4) { + throw new PPException("Please enter a full power description"); + } + + String[] powerDescriptionArray = Arrays.copyOfRange(powerDescription.split(" "), 0, 4); + if (hasFlag(powerDescriptionArray)) { + throw new PPException("Flag detected in power description. Please enter a valid power range"); + } + + String fromFlag = powerDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please enter '/from' before the power range"); + } + + String powerFrom = powerDescriptionArray[1]; + if (powerFrom.matches(".*\\D.*")) { + throw new PPException("Power start range must be an integer"); + } + + String toFlag = powerDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please enter '/to' before the power range"); + } + + String powerTo = powerDescriptionArray[3]; + if (powerTo.matches(".*\\D.*")) { + throw new PPException("Power end range must be an integer"); + } + + int powerFromInt = Integer.parseInt(powerFrom); + int powerToInt = Integer.parseInt(powerTo); + + if (powerFromInt > powerToInt) { + throw new PPException("Power start range must be smaller than power end range"); + } + + if (powerFromInt < 0 || powerToInt < 0) { + throw new PPException("Power must be a positive integer"); + } + + if (powerFromInt > 10000 || powerToInt > 10000) { + throw new PPException("Power must be less than 10000W"); + } + + componentList = ComponentList.filterByPowerGpu(componentList, powerFromInt, powerToInt, componentIndexes); + + flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); + + return componentList; + } + + private ComponentList handlePowerFlagCpuCooler(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (powerFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String powerDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + if (powerDescription.split("\\s+").length < 4) { + throw new PPException("Please enter a full power description"); + } + + String[] powerDescriptionArray = Arrays.copyOfRange(powerDescription.split(" "), 0, 4); + if (hasFlag(powerDescriptionArray)) { + throw new PPException("Flag detected in power description. Please enter a valid power range"); + } + + String fromFlag = powerDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please enter '/from' before the power range"); + } + + String powerFrom = powerDescriptionArray[1]; + if (powerFrom.matches(".*\\D.*")) { + throw new PPException("Power start range must be an integer"); + } + + String toFlag = powerDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please enter '/to' before the power range"); + } + + String powerTo = powerDescriptionArray[3]; + if (powerTo.matches(".*\\D.*")) { + throw new PPException("Power end range must be an integer"); + } + + int powerFromInt = Integer.parseInt(powerFrom); + int powerToInt = Integer.parseInt(powerTo); + + if (powerFromInt > powerToInt) { + throw new PPException("Power start range must be smaller than power end range"); + } + + if (powerFromInt < 0 || powerToInt < 0) { + throw new PPException("Power must be a positive integer"); + } + + if (powerFromInt > 10000 || powerToInt > 10000) { + throw new PPException("Power must be less than 10000W"); + } + + componentList = ComponentList.filterByPowerCpuCooler(componentList, powerFromInt, powerToInt, componentIndexes); + + flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); + + return componentList; + } + + private ComponentList handleNoiseFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int rpmNoiseIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (rpmNoiseIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String noiseDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + if (noiseDescription.split("\\s+").length < 4) { + throw new PPException("Please enter a full noise description"); + } + + String[] noiseDescriptionArray = Arrays.copyOfRange(noiseDescription.split(" "), 0, 4); + if (hasFlag(noiseDescriptionArray)) { + throw new PPException("Flag detected in noise description. Please enter a valid noise range"); + } + + String fromFlag = noiseDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please enter '/from' before the noise range"); + } + + String noiseFrom = noiseDescriptionArray[1]; + if (noiseFrom.matches(".*\\D.*")) { + throw new PPException("Noise start range must be an integer"); + } + + String toFlag = noiseDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please enter '/to' before the noise range"); + } + + String noiseTo = noiseDescriptionArray[3]; + if (noiseTo.matches(".*\\D.*")) { + throw new PPException("Noise end range must be an integer"); + } + + int noiseFromInt = Integer.parseInt(noiseFrom); + int noiseToInt = Integer.parseInt(noiseTo); + + if (noiseFromInt > noiseToInt) { + throw new PPException("Noise start range must be smaller than noise end range"); + } + + if (noiseFromInt < 0 || noiseToInt < 0) { + throw new PPException("Noise must be a positive integer"); + } + + if (noiseFromInt > 10000 || noiseToInt > 10000) { + throw new PPException("Noise must be less than 10000"); + } + + componentList = ComponentList.filterByNoise(componentList, noiseFromInt, noiseToInt, componentIndexes); + + flagsArray.add("Noise: " + noiseFrom + " to " + noiseTo); + + return componentList; + } + + private ComponentList handleRpmFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int rpmFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (rpmFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String rpmDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + if (rpmDescription.split("\\s+").length < 4) { + throw new PPException("Please enter a full rpm description"); + } + + String[] rpmDescriptionArray = Arrays.copyOfRange(rpmDescription.split(" "), 0, 4); + if (hasFlag(rpmDescriptionArray)) { + throw new PPException("Flag detected in rpm description. Please enter a valid rpm range"); + } + + String fromFlag = rpmDescriptionArray[0]; + if (!fromFlag.equals("/from")) { + throw new PPException("Please enter '/from' before the rpm range"); + } + + String powerFrom = rpmDescriptionArray[1]; + if (powerFrom.matches(".*\\D.*")) { + throw new PPException("Rpm start range must be an integer"); + } + + String toFlag = rpmDescriptionArray[2]; + if (!toFlag.equals("/to")) { + throw new PPException("Please enter '/to' before the rpm range"); + } + + String powerTo = rpmDescriptionArray[3]; + if (powerTo.matches(".*\\D.*")) { + throw new PPException("Rpm end range must be an integer"); + } + + int rpmFromInt = Integer.parseInt(powerFrom); + int rpmToInt = Integer.parseInt(powerTo); + + if (rpmFromInt > rpmToInt) { + throw new PPException("Rpm start range must be smaller than power end range"); + } + + if (rpmFromInt < 0 || rpmToInt < 0) { + throw new PPException("Rpm must be a positive integer"); + } + + if (rpmFromInt > 10000 || rpmToInt > 10000) { + throw new PPException("Rpm must be less than 10000"); + } + + componentList = ComponentList.filterByRpm(componentList, rpmFromInt, rpmToInt, componentIndexes); + + flagsArray.add("Rpm: " + powerFrom + " to " + powerTo); + + return componentList; + } + //handle socket flag that can be either AM4, AM5, LGA1200 or LGA1700 private ComponentList handleSocketFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, @@ -184,7 +450,7 @@ private ComponentList handleSocketFlag(String userInputString, ComponentList< } //handle power flag with int from and int to range - private ComponentList handlePowerFlag(String userInputString, ComponentList componentList, + private ComponentList handlePowerFlagCpu(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); @@ -237,13 +503,34 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList handleSizeFlagGpu(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int sizeFlagIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); + if (sizeFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a size after the flag"); + } + + String size = flagAndDescriptionArray[sizeFlagIndex + 1].trim().toLowerCase(); + + if (isFlag(size)) { + throw new PPException("Flag detected in size description. Please enter a valid size"); + } + + if (!size.equals("micro") && !size.equals("mini") && !size.equals("atx")) { + throw new PPException("Please enter a valid size (atx, mini or micro)"); + } + flagsArray.add("size: " + size); + componentList = ComponentList.filterBySize(componentList, size, componentIndexes); + return componentList; + } + // handle boost clock flag, boost clock is a float and has a /from and /to flag private ComponentList handleBoostClockFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, @@ -423,7 +710,7 @@ private ComponentList handleCoreFlag(ComponentList componentList, ArrayLis return componentList; } - private ComponentList handleSizeFlag(ComponentList componentList, ArrayList flagsArray, + private ComponentList handleCpuSizeFlag(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int sizeFlagIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); if (sizeFlagIndex == flagAndDescriptionArray.length - 1) { @@ -455,13 +742,13 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList componentIndexes) { return outputString; } + public static ComponentList filterByPowerGpu(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + GPU gpu = (GPU) componentList.get(i); + if (gpu.getPower() >= from && gpu.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByPowerCpuCooler(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPUCooler cpuCooler = (CPUCooler) componentList.get(i); + if (cpuCooler.getPower() >= from && cpuCooler.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter cpucooler by noise from to range int + public static ComponentList filterByNoise(ComponentList componentList, float from, float to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPUCooler cpuCooler = (CPUCooler) componentList.get(i); + if (cpuCooler.getNoise() >= from && cpuCooler.getNoise() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter cpucooler by rpm from and to range int + public static ComponentList filterByRpm(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + CPUCooler cpuCooler = (CPUCooler) componentList.get(i); + if (cpuCooler.getRpm() >= from && cpuCooler.getRpm() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + public static ComponentList filterBySocket(ComponentList componentList, String socket, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -49,7 +104,7 @@ public static ComponentList filterBySocket(ComponentList componentList, St return filteredComponentList; } - public static ComponentList filterByPower(ComponentList componentList, int from, int to, + public static ComponentList filterByPowerCpu(ComponentList componentList, int from, int to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { From 48532acd58a3b2b9eeb3df5a6b1d77c73e57240b Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Tue, 28 Mar 2023 01:09:14 +0800 Subject: [PATCH 222/420] Update user guide for select, unselect and comapre commands --- docs/UserGuide.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index fa6ba62955..cd2d2c6c66 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -14,6 +14,8 @@ - [In PCBuilder Mode](#in-pcbuilder-mode) - [`list COMPONENT_TYPE`](#list-component_type) - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) + - [`unselect COMPONENT_TYPE`](#unselect-component_type) + - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) - [`budget INTEGER`](#budget-integer) - [`name NEW_NAME`](#name-new_name) - [`back`](#back) @@ -108,6 +110,90 @@ What would you like to do? #### `select COMPONENT_TYPE INDEX` **Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build +**Example:** add component of type `GPU` with index `4` to the current PC Build. +``` +input: select gpu 4 + +output: + +=================================================== +PC builder +Custom-PC: [pc] - $934.06/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +``` + +#### `unselect COMPONENT_TYPE` +**Functionality:** Removes the component of type `COMPONENT_TYPE` from your PC Build. + +**Example:** remove compoennt of type `GPU` from the current PC Build. +``` +Previous PC compoenent list: +=================================================== +PC builder +Custom-PC: [pc] - $934.06/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - +``` +``` +input: unselect gpu + +output: + +=================================================== +PC builder +Custom-PC: [pc] - $0.0/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +``` + +#### `compare COMPONENT_TYPE INDEX_1 & INDEX_2` +**Functionality:** Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format + +**Example:** Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. +``` +input: compare cpu 1 & 2 + +output: +________________________________________________________________________________________________ +|NAME |Intel core i3-10100 |Intel core i5-10600k | +|------------|----------------------------------------|----------------------------------------| +|PRICE |$99.5 |$182.47 | +|SOCKET |LGA1200 |LGA1200 | +|CORES |4 |6 | +|THREADS |8 |12 | +|BASE CLOCK |3.6GHz |4.1GHz | +|BOOST CLOCK |4.3GHz |4.8GHz | +|POWER |65.0W |125.0W | +________________________________________________________________________________________________ + +``` + + + #### `budget INTEGER` **Functionality:** Sets the budget of the current PC build to `INTEGER` From a78f3b2680ed8aa01c4ac6c888c2db14d13e7463 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 28 Mar 2023 10:24:05 +0800 Subject: [PATCH 223/420] Add flags for all components --- .../BuilderListComponentCommand.java | 303 +++++++++++++----- .../seedu/bigpp/component/ComponentList.java | 144 ++++++++- 2 files changed, 355 insertions(+), 92 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 059b868404..0c615ebff4 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -107,16 +107,16 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { - componentList = handlePowerFlagCpu(userInputString, componentList, flagsArray, - flagAndDescriptionArray, componentIndexes); + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); } if (containsFlag(flagAndDescriptionArray, SOCKET_FLAG)) { componentList = handleSocketFlag(userInputString, componentList, flagsArray, - flagAndDescriptionArray, componentIndexes); + flagAndDescriptionArray, componentIndexes, componentType); } break; - case "cpucooler": + case "cpu-cooler": //handle rpm, noise and power flag if (containsFlag(flagAndDescriptionArray, RPM_FLAG)) { componentList = handleRpmFlag(userInputString, componentList, flagsArray, @@ -128,8 +128,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { - componentList = handlePowerFlagCpuCooler(userInputString, componentList, flagsArray, - flagAndDescriptionArray, componentIndexes); + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); } break; case "gpu": @@ -139,21 +139,59 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentIndexes); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { - componentList = handlePowerFlagGpu(userInputString, componentList, flagsArray, - flagAndDescriptionArray, componentIndexes); + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); } break; case "motherboard": //handle formfactor, socket and power flag - break; - case "psu": - //handle efficiency, formfactor and power flag + if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, SOCKET_FLAG)) { + componentList = handleSocketFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); + } break; case "ram": //handle memory, sticks, speed and power flag + if (containsFlag(flagAndDescriptionArray, MEMORY_FLAG)) { + componentList = handleMemoryFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, STICKS_FLAG)) { + componentList = handleSticksFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, SPEED_FLAG)) { + componentList = handleSpeedFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); + } break; case "storage": //handle type, size and power flag + if (containsFlag(flagAndDescriptionArray, TYPE_FLAG)) { + componentList = handleTypeFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { + componentList = handleSizeFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); + } break; default: break; @@ -183,122 +221,181 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } - private ComponentList handlePowerFlagGpu(String userInputString, ComponentList componentList, - ArrayList flagsArray, + //handle size flag, size can be 512, 1024, 2048, 4096 + private ComponentList handleSizeFlag(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); - if (powerFlagIndex == flagAndDescriptionArray.length - 1) { + int sizeIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); + if (sizeIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); } - String powerDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); - if (powerDescription.split("\\s+").length < 4) { - throw new PPException("Please enter a full power description"); + String sizeDescription = flagAndDescriptionArray[sizeIndex + 1].trim().toLowerCase(); + if (sizeDescription.split("\\s+").length < 1) { + throw new PPException("Please enter size description"); } - String[] powerDescriptionArray = Arrays.copyOfRange(powerDescription.split(" "), 0, 4); - if (hasFlag(powerDescriptionArray)) { - throw new PPException("Flag detected in power description. Please enter a valid power range"); + String[] sizeDescriptionArray = Arrays.copyOfRange(sizeDescription.split(" "), 0, 1); + if (hasFlag(sizeDescriptionArray)) { + throw new PPException("Flag detected in size description"); } - String fromFlag = powerDescriptionArray[0]; - if (!fromFlag.equals("/from")) { - throw new PPException("Please enter '/from' before the power range"); + String size = sizeDescriptionArray[0]; + if (!size.equals("512") && !size.equals("1024") && !size.equals("2048") && !size.equals("4096")) { + throw new PPException("Please enter a valid size (512, 1024, 2048, 4096)"); } - String powerFrom = powerDescriptionArray[1]; - if (powerFrom.matches(".*\\D.*")) { - throw new PPException("Power start range must be an integer"); + flagsArray.add("Size: " + size + "GB"); + componentList = ComponentList.filterBySize(componentList, Integer.parseInt(size), componentIndexes); + return componentList; + } + + //handle type flag, type can be M.2 SSD, HDD, or SATA SSD + private ComponentList handleTypeFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int typeIndex = indexOfFlag(flagAndDescriptionArray, TYPE_FLAG); + if (typeIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); } - String toFlag = powerDescriptionArray[2]; - if (!toFlag.equals("/to")) { - throw new PPException("Please enter '/to' before the power range"); + String typeDescription = userInputString.split(TYPE_FLAG)[1].trim().toLowerCase(); + if (typeDescription.split("\\s+").length < 1) { + throw new PPException("Please enter type description"); } - String powerTo = powerDescriptionArray[3]; - if (powerTo.matches(".*\\D.*")) { - throw new PPException("Power end range must be an integer"); + String[] typeDescriptionArray = Arrays.copyOfRange(typeDescription.split(" "), 0, 1); + if (hasFlag(typeDescriptionArray)) { + throw new PPException("Flag detected in type description"); } - int powerFromInt = Integer.parseInt(powerFrom); - int powerToInt = Integer.parseInt(powerTo); + String type = typeDescriptionArray[0]; + if (!type.equals("hdd") && !type.equals("ssd")) { + throw new PPException("Please enter a valid type description (hdd or ssd))"); + } - if (powerFromInt > powerToInt) { - throw new PPException("Power start range must be smaller than power end range"); + flagsArray.add("Type: " + type); + componentList = ComponentList.filterByType(componentList, type, componentIndexes); + + return componentList; + } + + //handle speed flag, speed can be 1600 or 3200 + private ComponentList handleSpeedFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int speedIndex = indexOfFlag(flagAndDescriptionArray, SPEED_FLAG); + if (speedIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); } - if (powerFromInt < 0 || powerToInt < 0) { - throw new PPException("Power must be a positive integer"); + String speedDescription = userInputString.split(SPEED_FLAG)[1].trim().toLowerCase(); + if (speedDescription.split("\\s+").length < 1) { + throw new PPException("Please enter speed description"); } - if (powerFromInt > 10000 || powerToInt > 10000) { - throw new PPException("Power must be less than 10000W"); + String[] speedDescriptionArray = Arrays.copyOfRange(speedDescription.split(" "), 0, 1); + if (hasFlag(speedDescriptionArray)) { + throw new PPException("Flag detected in speed description"); } - componentList = ComponentList.filterByPowerGpu(componentList, powerFromInt, powerToInt, componentIndexes); + int speed = Integer.parseInt(speedDescriptionArray[0]); + if (speed != 1600 && speed != 3200) { + throw new PPException("Please enter a valid speed (1600 or 3200))"); + } - flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); + flagsArray.add("speed: " + speed); + componentList = ComponentList.filterBySpeed(componentList, speed, componentIndexes); return componentList; } - private ComponentList handlePowerFlagCpuCooler(String userInputString, ComponentList componentList, + //handle sticks flag, sticks could be int 1 or 2 + private ComponentList handleSticksFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); - if (powerFlagIndex == flagAndDescriptionArray.length - 1) { + int sticksIndex = indexOfFlag(flagAndDescriptionArray, STICKS_FLAG); + if (sticksIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); } - String powerDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); - if (powerDescription.split("\\s+").length < 4) { - throw new PPException("Please enter a full power description"); + String sticksDescription = userInputString.split(STICKS_FLAG)[1].trim().toLowerCase(); + if (sticksDescription.split("\\s+").length < 1) { + throw new PPException("Please enter sticks description"); } - String[] powerDescriptionArray = Arrays.copyOfRange(powerDescription.split(" "), 0, 4); - if (hasFlag(powerDescriptionArray)) { - throw new PPException("Flag detected in power description. Please enter a valid power range"); + String[] sticksDescriptionArray = Arrays.copyOfRange(sticksDescription.split(" "), 0, 1); + if (hasFlag(sticksDescriptionArray)) { + throw new PPException("Flag detected in sticks description"); } - String fromFlag = powerDescriptionArray[0]; - if (!fromFlag.equals("/from")) { - throw new PPException("Please enter '/from' before the power range"); + int sticks = Integer.parseInt(sticksDescriptionArray[0]); + if (sticks != 1 && sticks != 2) { + throw new PPException("Please enter a valid sticks description (1 or 2))"); } - String powerFrom = powerDescriptionArray[1]; - if (powerFrom.matches(".*\\D.*")) { - throw new PPException("Power start range must be an integer"); + flagsArray.add("Sticks: " + sticks); + componentList = ComponentList.filterBySticks(componentList, sticks, componentIndexes); + + return componentList; + } + + //handle memory flag, memory could be int 8, 16, 32 + private ComponentList handleMemoryFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int memoryIndex = indexOfFlag(flagAndDescriptionArray, MEMORY_FLAG); + if (memoryIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); } - String toFlag = powerDescriptionArray[2]; - if (!toFlag.equals("/to")) { - throw new PPException("Please enter '/to' before the power range"); + String memoryDescription = userInputString.split(MEMORY_FLAG)[1].trim().toLowerCase(); + if (memoryDescription.split("\\s+").length < 1) { + throw new PPException("Please enter a full memory description"); } - String powerTo = powerDescriptionArray[3]; - if (powerTo.matches(".*\\D.*")) { - throw new PPException("Power end range must be an integer"); + String[] memoryDescriptionArray = Arrays.copyOfRange(memoryDescription.split(" "), 0, 1); + if (hasFlag(memoryDescriptionArray)) { + throw new PPException("Flag detected in memory description"); } - int powerFromInt = Integer.parseInt(powerFrom); - int powerToInt = Integer.parseInt(powerTo); + int memory = Integer.parseInt(memoryDescriptionArray[0]); + if (memory != 8 && memory != 16 && memory != 32) { + throw new PPException("Please enter a valid memory description (8, 16 or 32)"); + } - if (powerFromInt > powerToInt) { - throw new PPException("Power start range must be smaller than power end range"); + flagsArray.add("Memory: " + memory + "GB"); + componentList = ComponentList.filterByMemory(componentList, memory, componentIndexes); + + return componentList; + } + + //handle formfactor flag, formfactor could be string ATX, Micro or Mini + private ComponentList handleFormFactorFlag(String userInputString, ComponentList componentList, + ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int formFactorIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); + if (formFactorIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); } - if (powerFromInt < 0 || powerToInt < 0) { - throw new PPException("Power must be a positive integer"); + String formFactorDescription = userInputString.split(FORM_FACTOR_FLAG)[1].trim().toLowerCase(); + if (formFactorDescription.split("\\s+").length < 1) { + throw new PPException("Please enter a full form factor description"); } - if (powerFromInt > 10000 || powerToInt > 10000) { - throw new PPException("Power must be less than 10000W"); + String[] formFactorDescriptionArray = Arrays.copyOfRange(formFactorDescription.split(" "), 0, 1); + if (hasFlag(formFactorDescriptionArray)) { + throw new PPException("Flag detected in form factor description. Please enter a valid form factor"); } - componentList = ComponentList.filterByPowerCpuCooler(componentList, powerFromInt, powerToInt, componentIndexes); + String formFactor = formFactorDescriptionArray[0]; + if (!formFactor.equals("ATX") && !formFactor.equals("Micro") && !formFactor.equals("Mini")) { + throw new PPException("Please enter a valid form factor (ATX, Micro or Mini)"); + } - flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); + flagsArray.add("Form Factor: " + formFactor); + + componentList = ComponentList.filterByFormFactor(componentList, formFactor, componentIndexes); return componentList; } @@ -311,7 +408,7 @@ private ComponentList handleNoiseFlag(String userInputString, ComponentList handleRpmFlag(String userInputString, ComponentList ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int rpmFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); + if (rpmFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); } - String rpmDescription = userInputString.split(POWER_FLAG)[1].trim().toLowerCase(); + String rpmDescription = userInputString.split(RPM_FLAG)[1].trim().toLowerCase(); + if (rpmDescription.split("\\s+").length < 4) { throw new PPException("Please enter a full rpm description"); } @@ -412,8 +511,8 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList throw new PPException("Rpm must be a positive integer"); } - if (rpmFromInt > 10000 || rpmToInt > 10000) { - throw new PPException("Rpm must be less than 10000"); + if (rpmFromInt > 100000 || rpmToInt > 100000) { + throw new PPException("Rpm must be less than 100000"); } componentList = ComponentList.filterByRpm(componentList, rpmFromInt, rpmToInt, componentIndexes); @@ -426,7 +525,8 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList //handle socket flag that can be either AM4, AM5, LGA1200 or LGA1700 private ComponentList handleSocketFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) + throws PPException { int socketFlagIndex = indexOfFlag(flagAndDescriptionArray, SOCKET_FLAG); if (socketFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); @@ -444,15 +544,23 @@ private ComponentList handleSocketFlag(String userInputString, ComponentList< flagsArray.add("Socket: " + socket); - componentList = ComponentList.filterBySocket(componentList, socket, componentIndexes); + switch (componentType) { + case "cpu": + componentList = ComponentList.filterBySocketCpu(componentList, socket, componentIndexes); + break; + case "motherboard": + componentList = ComponentList.filterBySocketMotherboard(componentList, socket, componentIndexes); + break; + } return componentList; } //handle power flag with int from and int to range - private ComponentList handlePowerFlagCpu(String userInputString, ComponentList componentList, + private ComponentList handlePowerFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) + throws PPException { int powerFlagIndex = indexOfFlag(flagAndDescriptionArray, POWER_FLAG); if (powerFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); @@ -503,7 +611,30 @@ private ComponentList handlePowerFlagCpu(String userInputString, ComponentLis throw new PPException("Power must be less than 10000W"); } - componentList = ComponentList.filterByPowerCpu(componentList, powerFromInt, powerToInt, componentIndexes); + switch (componentType) { + case "cpu": + componentList = ComponentList.filterByPowerCpu(componentList, powerFromInt, powerToInt, componentIndexes); + break; + case "cpucooler": + componentList = ComponentList.filterByPowerCpuCooler(componentList, powerFromInt, powerToInt, + componentIndexes); + break; + case "gpu": + componentList = ComponentList.filterByPowerGpu(componentList, powerFromInt, powerToInt, componentIndexes); + break; + case "motherboard": + componentList = ComponentList.filterByPowerMotherboard(componentList, powerFromInt, powerToInt, + componentIndexes); + break; + case "ram": + componentList = ComponentList.filterByPowerRam(componentList, powerFromInt, powerToInt, + componentIndexes); + case "storage": + componentList = ComponentList.filterByPowerStorage(componentList, powerFromInt, powerToInt, + componentIndexes); + default: + throw new PPException("Invalid component type"); + } flagsArray.add("Power: " + powerFrom + "W to " + powerTo + "W"); @@ -741,14 +872,12 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList componentIndexes) { return outputString; } + //filter storage by power + public static ComponentList filterByPowerStorage(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Storage storage = (Storage) componentList.get(i); + if (storage.getPower() >= from && storage.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterBySize(ComponentList componentList, int size, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Storage storage = (Storage) componentList.get(i); + if (storage.getSize() == size) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByType(ComponentList componentList, String type, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Storage storage = (Storage) componentList.get(i); + if (storage.getType().toLowerCase().contains(type)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByPowerRam(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + RAM ram = (RAM) componentList.get(i); + if (ram.getPower() >= from && ram.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter ram by speed, speed could be 1600 or 3200 + public static ComponentList filterBySpeed(ComponentList componentList, int speed, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + RAM ram = (RAM) componentList.get(i); + if (ram.getSpeed() == speed) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter ram by sticks, sticks could be 1 or 2 + public static ComponentList filterBySticks(ComponentList componentList, int sticks, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + RAM ram = (RAM) componentList.get(i); + if (ram.getSticks() == sticks) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter ram by memory, memory could be 8, 16 or 32 + public static ComponentList filterByMemory(ComponentList componentList, int memory, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + RAM ram = (RAM) componentList.get(i); + if (ram.getMemory() == memory) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterByPowerMotherboard(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Motherboard motherboard = (Motherboard) componentList.get(i); + if (motherboard.getPower() >= from && motherboard.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + public static ComponentList filterBySocketMotherboard(ComponentList componentList, String socket, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Motherboard motherboard = (Motherboard) componentList.get(i); + if (motherboard.getSocket().toLowerCase().equals(socket)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + //filter motherboard by formfactor + public static ComponentList filterByFormFactor(ComponentList componentList, String formFactor, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + Motherboard motherboard = (Motherboard) componentList.get(i); + if (motherboard.getFormFactor().toLowerCase().equals(formFactor)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + public static ComponentList filterByPowerGpu(ComponentList componentList, int from, int to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -91,7 +225,7 @@ public static ComponentList filterByRpm(ComponentList componentList, int f return filteredComponentList; } - public static ComponentList filterBySocket(ComponentList componentList, String socket, + public static ComponentList filterBySocketCpu(ComponentList componentList, String socket, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { From 594b672b257751277e74c2ed8d54be838bde6bfa Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 28 Mar 2023 10:28:18 +0800 Subject: [PATCH 224/420] Fix checkstyle --- .../BuilderListComponentCommand.java | 19 ++++++++++++------- .../seedu/bigpp/component/ComponentList.java | 6 +++--- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 0c615ebff4..fedda55ed5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -245,7 +245,7 @@ private ComponentList handleSizeFlag(ComponentList componentList, ArrayLis } flagsArray.add("Size: " + size + "GB"); - componentList = ComponentList.filterBySize(componentList, Integer.parseInt(size), componentIndexes); + componentList = ComponentList.filterBySizeStorage(componentList, Integer.parseInt(size), componentIndexes); return componentList; } @@ -274,7 +274,7 @@ private ComponentList handleTypeFlag(String userInputString, ComponentList } flagsArray.add("Type: " + type); - componentList = ComponentList.filterByType(componentList, type, componentIndexes); + componentList = ComponentList.filterByTypeStorage(componentList, type, componentIndexes); return componentList; } @@ -551,7 +551,8 @@ private ComponentList handleSocketFlag(String userInputString, ComponentList< case "motherboard": componentList = ComponentList.filterBySocketMotherboard(componentList, socket, componentIndexes); break; - + default: + throw new PPException("Invalid component type"); } return componentList; } @@ -629,9 +630,11 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList handleSizeFlagGpu(ComponentList componentList, Array throw new PPException("Please enter a valid size (atx, mini or micro)"); } flagsArray.add("size: " + size); - componentList = ComponentList.filterBySize(componentList, size, componentIndexes); + componentList = ComponentList.filterBySizeChassis(componentList, size, componentIndexes); return componentList; } @@ -858,7 +861,7 @@ private ComponentList handleCpuSizeFlag(ComponentList componentList, Array throw new PPException("Please enter a valid size (micro, mini, mid or full)"); } flagsArray.add("size: " + size); - componentList = ComponentList.filterBySize(componentList, size, componentIndexes); + componentList = ComponentList.filterBySizeChassis(componentList, size, componentIndexes); return componentList; } @@ -872,12 +875,14 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList filterByPowerStorage(ComponentList componentLi return filteredComponentList; } - public static ComponentList filterBySize(ComponentList componentList, int size, + public static ComponentList filterBySizeStorage(ComponentList componentList, int size, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { @@ -63,7 +63,7 @@ public static ComponentList filterBySize(ComponentList componentList, int return filteredComponentList; } - public static ComponentList filterByType(ComponentList componentList, String type, + public static ComponentList filterByTypeStorage(ComponentList componentList, String type, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { @@ -303,7 +303,7 @@ public static ComponentList filterByCore(ComponentList componentList, int return filteredComponentList; } - public static ComponentList filterBySize(ComponentList componentList, String size, + public static ComponentList filterBySizeChassis(ComponentList componentList, String size, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { From f0ce96c0ac5d89f6f8da4449deff7d9646d2da90 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 28 Mar 2023 10:39:27 +0800 Subject: [PATCH 225/420] Add UG for builder edit name and budget --- docs/UserGuide.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index cd2d2c6c66..340258254b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -197,9 +197,56 @@ ________________________________________________________________________________ #### `budget INTEGER` **Functionality:** Sets the budget of the current PC build to `INTEGER` +**Example** Set budget of Prebuilt-PC [Beginner] to be $1000 +``` +input: budget 1000 + +output: +=================================================== +PC builder +Custom-PC: [beginner (copy)] - $813.29/$1000.00 - Complete +Components: +CPU : Intel core i3-10100 +CPU Cooler : Thermalright AXP90-X36 +GPU : Gigabyte GAMING OC RTX3050 +Motherboard: Asus Prime Z590-P WiFi +RAM : Kingston FURY Beast 16 GB +Storage : ADATA XPG SPECTRIX S40G RGB +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Fractal Design Pop XL Air + +What would you like to do? +=================================================== +Current build budget is now: $1000.00 + +``` + #### `name NEW_NAME` **Functionality:** Sets the name of the current PC build to `NEW_NAME` +**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC +``` +input: name MyPC + +output: +=================================================== +PC builder +Custom-PC: [MyPc] - $813.29/$1000.00 - Complete +Components: +CPU : Intel core i3-10100 +CPU Cooler : Thermalright AXP90-X36 +GPU : Gigabyte GAMING OC RTX3050 +Motherboard: Asus Prime Z590-P WiFi +RAM : Kingston FURY Beast 16 GB +Storage : ADATA XPG SPECTRIX S40G RGB +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Fractal Design Pop XL Air + +What would you like to do? +=================================================== +Current build name is now: MyPc +``` + #### `back` **Functionality:** Goes back to PCViewer menu From 915c2b1ab23de99bcf76100d8e0b1457871f4888 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 28 Mar 2023 10:57:19 +0800 Subject: [PATCH 226/420] Remove magic strings --- .../BuilderListComponentCommand.java | 38 +++++++++++-------- .../seedu/bigpp/component/ComponentType.java | 2 +- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index fedda55ed5..54acc8df59 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -7,6 +7,14 @@ import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; import seedu.bigpp.component.ComponentList; + +import static seedu.bigpp.component.ComponentType.CPU_TYPE; +import static seedu.bigpp.component.ComponentType.GPU_TYPE; +import static seedu.bigpp.component.ComponentType.RAM_TYPE; +import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; +import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; +import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; +import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; import java.util.ArrayList; import java.util.Arrays; @@ -81,13 +89,13 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } switch (componentType) { - case "chassis": + case CHASSIS_TYPE: if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { componentList = handleCpuSizeFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } break; - case "cpu": + case CPU_TYPE: // handle core, thread, baseclock, boostclock, power and socket flag if (containsFlag(flagAndDescriptionArray, CORE_FLAG)) { componentList = handleCoreFlag(componentList, flagsArray, flagAndDescriptionArray, @@ -116,7 +124,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } break; - case "cpu-cooler": + case CPU_COOLER_TYPE: //handle rpm, noise and power flag if (containsFlag(flagAndDescriptionArray, RPM_FLAG)) { componentList = handleRpmFlag(userInputString, componentList, flagsArray, @@ -132,7 +140,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes, componentType); } break; - case "gpu": + case GPU_TYPE: //handle power and size flag if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { componentList = handleSizeFlagGpu(componentList, flagsArray, flagAndDescriptionArray, @@ -143,7 +151,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes, componentType); } break; - case "motherboard": + case MOTHERBOARD_TYPE: //handle formfactor, socket and power flag if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, @@ -159,7 +167,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes, componentType); } break; - case "ram": + case RAM_TYPE: //handle memory, sticks, speed and power flag if (containsFlag(flagAndDescriptionArray, MEMORY_FLAG)) { componentList = handleMemoryFlag(userInputString, componentList, flagsArray, @@ -178,7 +186,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes, componentType); } break; - case "storage": + case STORAGE_TYPE: //handle type, size and power flag if (containsFlag(flagAndDescriptionArray, TYPE_FLAG)) { componentList = handleTypeFlag(userInputString, componentList, flagsArray, @@ -545,10 +553,10 @@ private ComponentList handleSocketFlag(String userInputString, ComponentList< flagsArray.add("Socket: " + socket); switch (componentType) { - case "cpu": + case CPU_TYPE: componentList = ComponentList.filterBySocketCpu(componentList, socket, componentIndexes); break; - case "motherboard": + case MOTHERBOARD_TYPE: componentList = ComponentList.filterBySocketMotherboard(componentList, socket, componentIndexes); break; default: @@ -613,25 +621,25 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList Date: Tue, 28 Mar 2023 12:36:57 +0800 Subject: [PATCH 227/420] Add user guide custom command --- docs/UserGuide.md | 25 +++++++++++++++++++ .../BuilderCustomComponentCommand.java | 1 - 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index cd2d2c6c66..0d1191064e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -200,6 +200,31 @@ ________________________________________________________________________________ #### `name NEW_NAME` **Functionality:** Sets the name of the current PC build to `NEW_NAME` +#### `custom COMPONENT_TYPE SPEC_1,SPEC_2, ...` +**Functionality:** Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the +current PC build +``` +input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + +output: +=================================================== +PC builder +Custom-PC: [pc-1] - $99.5/infinite - Incomplete +Components: +CPU : Intel-new-cpu +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +What would you like to do? +=================================================== +CPU added: Intel-new-cpu +``` + #### `back` **Functionality:** Goes back to PCViewer menu diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java index 3eef63e979..a8fc31ee9c 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java @@ -17,7 +17,6 @@ public abstract String addNewComponent(String[] argumentList, DataStorage dataSt public String executeCommand(DataStorage dataStorage) throws PPException { String arguments = super.getArguments(); String[] argumentList = arguments.split("\\|"); - if (argumentList.length != getExpectedArgumentLength()) { throw new PPException("Please enter a valid number of arguments for the custom component"); } From 718ad4285b16a9eee7ec3c27abdc2ebd6a96851d Mon Sep 17 00:00:00 2001 From: typingpanda Date: Tue, 28 Mar 2023 13:31:45 +0800 Subject: [PATCH 228/420] Add regex for split --- .../command/buildercommand/BuilderListComponentCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 54acc8df59..8ec02045a5 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -683,7 +683,7 @@ private ComponentList handleBoostClockFlag(String userInputString, ComponentL } String boostClockDescription = userInputString.split(BOOST_CLOCK_FLAG)[1].trim().toLowerCase(); - if (boostClockDescription.split(" ").length < 4) { + if (boostClockDescription.split("\\s+").length < 4) { throw new PPException("Please enter a full boost clock description"); } From 90225db1d7053604b5734d59d7ac75280983b9a5 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 28 Mar 2023 16:51:10 +0800 Subject: [PATCH 229/420] Resolve #95 Created Viewer Filter Flags --- .../viewercommand/ViewerAddCommand.java | 4 + .../viewercommand/ViewerDeleteCommand.java | 4 + .../viewercommand/ViewerEditCommand.java | 4 + .../viewercommand/ViewerViewCommand.java | 5 +- .../ViewerFilterClearCommand.java | 21 +++++ .../ViewerFilterCostCommand.java | 40 +++++++++ .../ViewerFilterIsBuiltCommand.java | 38 ++++++++ .../ViewerFilterNameCommand.java | 33 +++++++ .../java/seedu/bigpp/menu/PCViewerMenu.java | 1 - src/main/java/seedu/bigpp/parser/Parser.java | 30 ++++++- src/main/java/seedu/bigpp/pc/PCList.java | 87 ++++++++++++++++++- 11 files changed, 260 insertions(+), 7 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index 53e6bff281..f5ed0b89b1 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; public class ViewerAddCommand extends Command { @@ -17,6 +18,9 @@ public ViewerAddCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { + if (PCList.getIsFilter()){ + return "Please clear filter before adding a new pc"; + } String name = super.getArguments(); // throw exception if no name is provided if (name.equals("")) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 2f0402f795..b3a8397baf 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; public class ViewerDeleteCommand extends Command { @@ -20,6 +21,9 @@ public ViewerDeleteCommand(String arguments) { @Override public String executeCommand(DataStorage dataStorage) throws PPException { // throw exception if no index is selected + if (PCList.getIsFilter()){ + return "Please clear filter before deleting a pc"; + } String argument = super.getArguments(); if (argument.equals("")) { throw new PPException("Please input an index"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index aad503a882..e31811cd48 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class ViewerEditCommand extends Command { @@ -18,6 +19,9 @@ public ViewerEditCommand(String arguments) { @Override public String executeCommand(DataStorage dataStorage) throws PPException { + if (PCList.getIsFilter()){ + return "Please clear filter before editing a pc"; + } String argument = super.getArguments(); // throw exception if no index is selected diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 1c3289257b..9ec0eabdfd 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -4,6 +4,7 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; +import seedu.bigpp.pc.PCList; public class ViewerViewCommand extends Command { @@ -17,7 +18,9 @@ public ViewerViewCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { - + if (PCList.getIsFilter()){ + return "Please clear filter before viewing a pc"; + } String argument = super.getArguments(); // throw exception if no index is selected diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java new file mode 100644 index 0000000000..df2c88313b --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java @@ -0,0 +1,21 @@ +package seedu.bigpp.command.viewercommand.filtercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.PCList; + +public class ViewerFilterClearCommand extends Command { + + /** + * Clear filter and reset to default settings + * @return inform the user that the filter has been cleared + */ + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + PCList.setFilterFalse(); + PCList.setFilterType(""); + PCList.setArguments(""); + return "Filter has been cleared"; + } +} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java new file mode 100644 index 0000000000..03780bd83c --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java @@ -0,0 +1,40 @@ +package seedu.bigpp.command.viewercommand.filtercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.PCList; + +public class ViewerFilterCostCommand extends Command { + + public ViewerFilterCostCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * Filter PC List by cost of a given value. + * @return inform the user that the filter has been applied + */ + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + // throw exception if no index is selected + if (PCList.getIsFilter()){ + return "Please clear filter before creating a new one"; + } + String argument = super.getArguments(); + if (argument.equals("")) { + throw new PPException("Please input a value"); + } + if (argument.matches(".*\\D.*")) { + throw new PPException("Please enter an integer"); + } + int cost = Integer.parseInt(argument); + if (cost < 0) { + throw new PPException("Please enter a valid index"); + } + PCList.setFilterTrue(); + PCList.setFilterType("cost"); + PCList.setArguments(argument); + return "List has been filtered by cost of " + cost; + } +} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java new file mode 100644 index 0000000000..6ce6cd4705 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java @@ -0,0 +1,38 @@ +package seedu.bigpp.command.viewercommand.filtercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.PCList; + +public class ViewerFilterIsBuiltCommand extends Command { + + public ViewerFilterIsBuiltCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * Filter PC List by whether it is built or not + * @return inform the user that the filter has been applied + */ + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + // throw exception if no index is selected + if (PCList.getIsFilter()){ + return "Please clear filter before creating a new one"; + } + String argument = super.getArguments(); + if (argument.equals("")) { + throw new PPException("Please enter either complete or incomplete"); + } + if (argument.equals("complete") || argument.equals("incomplete")) { + PCList.setFilterTrue(); + PCList.setFilterType("built"); + PCList.setArguments(argument); + } + else { + return "Please enter either complete or incomplete"; + } + return "PC List has been updated with the following filter: built " + argument; + } +} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java new file mode 100644 index 0000000000..62bcef84b5 --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java @@ -0,0 +1,33 @@ +package seedu.bigpp.command.viewercommand.filtercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.PCList; + +public class ViewerFilterNameCommand extends Command { + + public ViewerFilterNameCommand(String arguments) { + super.setArguments(arguments); + } + + /** + * Filter PC list by a given name + * @return inform the user that the filter has been applied + */ + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + if (PCList.getIsFilter()){ + return "Please clear filter before creating a new one"; + } + String name = super.getArguments(); + // throw exception if no name is provided + if (name.equals("")) { + throw new PPException("Please enter a name"); + } + PCList.setFilterTrue(); + PCList.setFilterType("name"); + PCList.setArguments(name); + return "PC List has been updated with the following filter: name " + name; + } +} diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index 3a2fe653de..c8c4747f6d 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -5,7 +5,6 @@ import seedu.bigpp.datastorage.DataStorage; public class PCViewerMenu extends Menu { - public void printMenu(DataStorage dataStorage) { out.println("PC viewer"); dataStorage.pcList.printPcList(); diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 86d5b0ea23..17cb6dcc6c 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -23,8 +23,11 @@ import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; import seedu.bigpp.command.viewercommand.ViewerEditCommand; import seedu.bigpp.command.viewercommand.ViewerViewCommand; +import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterClearCommand; +import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterCostCommand; +import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterIsBuiltCommand; +import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterNameCommand; import seedu.bigpp.ui.UI; - import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; import static seedu.bigpp.component.ComponentType.CPU_TYPE; @@ -96,6 +99,8 @@ private Command parseViewerCommand(String commandWord, String arguments) { return new ViewerViewCommand(arguments); case "edit": return new ViewerEditCommand(arguments); + case "filter": + return parseFilterCommand(arguments); default: return new UnrecognizedCommand(""); } @@ -199,4 +204,27 @@ private Command parseCompareCommand(String arguments) { + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } + + private Command parseFilterCommand(String arguments) { + String[] inputList = arguments.split(" ", 2); + String filterType = inputList[0].toLowerCase(); + String input = ""; + if (inputList.length == 2) { + input = inputList[1]; + } + switch (filterType) { + case "name": + return new ViewerFilterNameCommand(input); + case "cost": + return new ViewerFilterCostCommand(input); + case "built": + return new ViewerFilterIsBuiltCommand(input); + case "clear": + return new ViewerFilterClearCommand(); + default: + return new UnrecognizedCommand( + "Invalid component type!, valid types are " + + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); + } + } } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 54ea003487..dca594ed1c 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,19 +1,98 @@ package seedu.bigpp.pc; import java.util.ArrayList; - import static seedu.bigpp.ui.UI.out; public class PCList extends ArrayList { + private static Boolean isFilter; + private static String filterType; + private static String arguments; + + public PCList() { + this.isFilter = false; + this.filterType = ""; + this.arguments = ""; + } + public void printPcList() { - if (this.size() > 0) { - out.println("Here is the list of PC Builds:"); + if (isFilter) { + printAltPcList(); + } else { + if (this.size() > 0) { + out.println("Here is the list of PC Builds:"); + for (int i = 0; i < this.size(); i++) { + out.println((i + 1) + "." + this.get(i)); + } + } else { + out.println("List currently empty!"); + } + } + } + + public void printAltPcList() { + ArrayList filterList = new ArrayList(); + switch (filterType) { + case "name": + for (int i = 0; i < this.size(); i++) { + if ((this.get(i).getName()).contains(getArguments())) { + filterList.add(this.get(i)); + } + } + break; + case "built": + if (getArguments().equals("complete")) { + for (int i = 0; i < this.size(); i++) { + if (this.get(i).isComplete()) { + filterList.add(this.get(i)); + } + } + } + else { + for (int i = 0; i < this.size(); i++) { + if (!(this.get(i).isComplete())) { + filterList.add(this.get(i)); + } + } + } + break; + case "cost": for (int i = 0; i < this.size(); i++) { - out.println((i + 1) + "." + this.get(i)); + if (this.get(i).getCost() >= Integer.parseInt(getArguments())) { + filterList.add(this.get(i)); + } + } + break; + default : + break; + } + if (filterList.size() > 0) { + out.println("Here is the list of PC Builds:"); + for (int i = 0; i < filterList.size(); i++) { + out.println((i + 1) + "." + filterList.get(i)); } } else { out.println("List currently empty!"); } } + + public String getArguments() { + return arguments; + } + + public static Boolean getIsFilter() { + return isFilter; + } + public static void setFilterTrue() { + isFilter = true; + } + public static void setFilterFalse() { + isFilter = false; + } + public static void setFilterType (String input) { + filterType = input; + } + public static void setArguments (String input) { + arguments = input; + } } From 7de57753c774f049c4c316dc2d481b8bb5247ebb Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Tue, 28 Mar 2023 16:59:28 +0800 Subject: [PATCH 230/420] Update checkstyle of code --- src/main/java/seedu/bigpp/parser/Parser.java | 2 +- src/main/java/seedu/bigpp/pc/PCList.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index b56a83f75d..86fe9e2113 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -223,7 +223,7 @@ private Command parseFilterCommand(String arguments) { String filterType = inputList[0].toLowerCase(); String input = ""; if (inputList.length == 2) { - input = inputList[1]; + input = inputList[1]; } switch (filterType) { case "name": diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index dca594ed1c..f622fc3d75 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -63,8 +63,8 @@ public void printAltPcList() { } } break; - default : - break; + default: + break; } if (filterList.size() > 0) { out.println("Here is the list of PC Builds:"); From 8a3f6d657c102a4e94a4647c15553ee6ddbd9bf1 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 29 Mar 2023 10:42:43 +0800 Subject: [PATCH 231/420] Update change name function user guide --- docs/UserGuide.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 5189722861..494578b19f 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -225,6 +225,29 @@ Current build budget is now: $1000.00 #### `name NEW_NAME` **Functionality:** Sets the name of the current PC build to `NEW_NAME` +**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC +``` +input: name MyPC + +output: +=================================================== +PC builder +Custom-PC: [MyPc] - $813.29/$1000.00 - Complete +Components: +CPU : Intel core i3-10100 +CPU Cooler : Thermalright AXP90-X36 +GPU : Gigabyte GAMING OC RTX3050 +Motherboard: Asus Prime Z590-P WiFi +RAM : Kingston FURY Beast 16 GB +Storage : ADATA XPG SPECTRIX S40G RGB +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Fractal Design Pop XL Air + +What would you like to do? +=================================================== +Current build name is now: MyPc +``` + #### `custom COMPONENT_TYPE SPEC_1,SPEC_2, ...` **Functionality:** Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the current PC build @@ -250,29 +273,6 @@ What would you like to do? CPU added: Intel-new-cpu ``` -**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC -``` -input: name MyPC - -output: -=================================================== -PC builder -Custom-PC: [MyPc] - $813.29/$1000.00 - Complete -Components: -CPU : Intel core i3-10100 -CPU Cooler : Thermalright AXP90-X36 -GPU : Gigabyte GAMING OC RTX3050 -Motherboard: Asus Prime Z590-P WiFi -RAM : Kingston FURY Beast 16 GB -Storage : ADATA XPG SPECTRIX S40G RGB -PSU : SeaSonic FOCUS PLUS 850 Gold -Chassis : Fractal Design Pop XL Air - -What would you like to do? -=================================================== -Current build name is now: MyPc -``` - #### `back` **Functionality:** Goes back to PCViewer menu From 241cae757f1d7eca131c08ffad4e73b5ce53b4cc Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 29 Mar 2023 11:04:19 +0800 Subject: [PATCH 232/420] Add JUnit test for builder select command --- .../BuilderSelectCommandTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java new file mode 100644 index 0000000000..4128d2bc7b --- /dev/null +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java @@ -0,0 +1,39 @@ +package seedu.bigpp.command.buildercommand; + +import seedu.bigpp.datastorage.DataStorage; +import org.junit.jupiter.api.Test; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.ui.UI; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BuilderSelectCommandTest { + private DataStorage dataStorage = new DataStorage(); + + private String expectedResultSuccess = "cpu added! : Intel core i3-10100"; + private String expectedEmptyExceptionMessage = "Please select a component"; + + @Test + public void excecuteCommand_selectCommand_success() throws PPException { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + String selectCommandResult = new BuilderSelectCommand("cpu 1").executeCommand(dataStorage); + assertEquals(expectedResultSuccess, selectCommandResult); + } + + @Test + public void excecuteCommand_selectCommandEmpty_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("").executeCommand( + dataStorage)); + assertEquals(expectedEmptyExceptionMessage, + exception.getMessage()); + } +} From 94d06dd9d7c88f29aa4308655179aad491c89964 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Wed, 29 Mar 2023 15:54:05 +0800 Subject: [PATCH 233/420] Add Junit test for component select --- .../BuilderListComponentCommandTest.java | 7 +- .../BuilderSelectCommandTest.java | 64 +++++++++++++++++-- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index 9ee9cf49f2..c87870efbd 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -10,6 +10,11 @@ public class BuilderListComponentCommandTest { + /** + * + */ + private static final String MISSING_NAME_EXCEPTION_MESSAGE = "Please enter a name after the flag"; + private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + "1.\n" + "NAME: Intel core i3-10100\n" + "BRAND: Intel\n" + "PRICE: 99.5\n" + "CORES: 4\n" + "THREADS: 8\n" + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.3\n" + "POWER: 65.0\n" + "SOCKET: LGA1200\n" + "================\n" @@ -61,7 +66,7 @@ public void executeCommand_listCpuMissingName_exceptionThrown() { Exception exception = assertThrows(PPException.class, () -> new BuilderListComponentCommand("cpu -name") .executeCommand(dataStorage)); - assertEquals("Please enter a name after the flag", exception.getMessage()); + assertEquals(MISSING_NAME_EXCEPTION_MESSAGE, exception.getMessage()); } @Test diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java index 4128d2bc7b..3955bc32c1 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java @@ -10,9 +10,6 @@ public class BuilderSelectCommandTest { private DataStorage dataStorage = new DataStorage(); - private String expectedResultSuccess = "cpu added! : Intel core i3-10100"; - private String expectedEmptyExceptionMessage = "Please select a component"; - @Test public void excecuteCommand_selectCommand_success() throws PPException { dataStorage.initStringToComponentListMap(); @@ -21,7 +18,7 @@ public void excecuteCommand_selectCommand_success() throws PPException { UI.setPCBuilderMode(0); String selectCommandResult = new BuilderSelectCommand("cpu 1").executeCommand(dataStorage); - assertEquals(expectedResultSuccess, selectCommandResult); + assertEquals("cpu added! : Intel core i3-10100", selectCommandResult); } @Test @@ -33,7 +30,64 @@ public void excecuteCommand_selectCommandEmpty_exceptionThrown() { Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("").executeCommand( dataStorage)); - assertEquals(expectedEmptyExceptionMessage, + assertEquals( + "Please select a component", + exception.getMessage()); + } + + @Test + public void executeCommand_selectInvalidComponent_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("component") + .executeCommand( + dataStorage)); + assertEquals("Please select a valid component (cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)", + exception.getMessage()); + } + + @Test + public void executeCommand_missingIndexOfComponent_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("cpu") + .executeCommand( + dataStorage)); + assertEquals("Please input an index after selecting a component", + exception.getMessage()); + } + + @Test + public void executeCommand_invalidTypeForIndexOfComponent_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("cpu a") + .executeCommand( + dataStorage)); + assertEquals("Please enter an integer", + exception.getMessage()); + } + + @Test + public void executeCommand_outOFBoundsIndex_exceptionThrown() { + dataStorage.initStringToComponentListMap(); + dataStorage.loadAll(); + + UI.setPCBuilderMode(0); + + Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("cpu 100") + .executeCommand( + dataStorage)); + assertEquals("Please enter a valid index", exception.getMessage()); } } From d7f4f7bdeadb70f533e6230511117a449422c397 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 17:12:41 +0800 Subject: [PATCH 234/420] Update developer guide with Sequence Diagram for ViewerAddCommand --- docs/DeveloperGuide.md | 8 +++++ .../ViewerAddCommand__Sequence_Diagram.png | Bin 0 -> 27442 bytes docs/uml-source/ViewerAddCommand.puml | 29 ++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 docs/uml-pictures/ViewerAddCommand__Sequence_Diagram.png create mode 100644 docs/uml-source/ViewerAddCommand.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 4bce64df2e..c8d99a1384 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -102,6 +102,14 @@ From the diagram, Command class has a private attribute named arguments which st contains methods that help to set and retrieve the private attribute in the class. Overall, this class diagram provides an overview of the purpose of the Parser class. +#### ViewerAddCommand() method +This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. +During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with +a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` +checks if the argument is empty and throws an `PPException` if it is empty. A `PC` object is created with the argument as +an input. The `add` method is called by accessing the `dataStorage` and `pcList` classes to add the `PC` object to the list. +Finally, a message is returned to inform the user that the `ViewerAddCommand` method has been executed successfully. + ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) diff --git a/docs/uml-pictures/ViewerAddCommand__Sequence_Diagram.png b/docs/uml-pictures/ViewerAddCommand__Sequence_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..30f9ba01a64ccd5d33f86edb00e5c7f4f71d88e9 GIT binary patch literal 27442 zcmb?@by!v1*X=!POZ#iy2*rWTwmET)DU#+Ft_hRjb) zjI3K4Dd7_RdU6jffBhVR0@ryK^-6ZhVDK8=KJ)USX%ih;SkAM36wNCOQJH}>U%FH( zGk$av_2tn;2QOBQFzEHLpYbKV+%~gVVbhvoAk-La5-A**d|Kn3na_{p^t>#iS823c zZb@_wymc67x0(_d@O6~C6$*pA?zLVl?W(wOswD5s=C#)QCQAXN{^|L}Q*Wr`rF7-} zLMk8W3q6-)J4G!ozub^YoGlo1F0W=wznTUu=>5eEah%4U%KLYjHP(aI1>4(vg)az6 zgmejWpq1b1Z*tru70e{u;zAA94OYA`V2g{JZuWXU0=JYPSBebP=4+s_bj>D3 zv*wQlJeQLGr-N^<$!g}RRa|})N3jie}n_ zg%Wj)r}uiU=j<~nMQokSz?PnJoexPtAfA2|xhEj^Ol`gb!-1%K`;an_<}&}onqZt@ zyyq_S=y_iB^o(y`D;w>aywb$Ltk*DAZ6zlZu#uIS?Zy?A~M0e+MZ@1A0u#k&`m z`if@f71KG_d8x@m)~TkIYr2yqHs(`b$G>iut51EJdoy+0V)DyP-4@-J3X8j;$bfRG zr)r#sPXzz#lU8W(NrjWj1s`~N{KN3Qi}1%ex1^V4D=TixsGRYZRqHfE+Q)c6|eDDCf ze{xy=_2Qd5pZ&?3T3U?T-U_^8lpiS2%Xio|PclAN9i`X5I_63FW4^z0zVK2_R!ynZ zTt`QTTXaN3snfn4sZ1OSxA}N|ZEfxJ^z>YImD9IcZxR+YRz*zRd&*vzM2uaTO8Jtp zys^#)B@F3uXlf{m6~4BMB~#O1$!_ZSuJ8RQuA*rTWsnV3j-zE^k(404qL{_%nO*bX zg8p<@nrw3fTL=!OxrIgcaKa<%9m5}CC-;^fj;o^D@sqMX4a{-gpHnY39#-~{JB>@> zuplDjN6Gi~5ku7VXmaTkiD*~X6Baz9*Y_ew_?K^4PUG>I(b3TCPw^ebiSL9Pt_F^@ zCFg(gA>l9@2qji4_@-W{|H||wg9`V%s^uCiEy)O0@A(S*&EVm3TMHfa@3WV_+Ar}a zcWg|z-@WC$k)a;6R=K;F;7n;ZeM#xf>)RGO`veE8;Z?6obxC&imz*W7VOkG2vYp#k zSNypay-Ih+++0{a*fSK~MZ9@aqWKAPhQ#kn3=h}s+a)3)w3hzVg1)H=@6PvAI<5yD zT2&tG7;w@v8Pq#}_v0`gE|nj)>Ce*+O?v(M_2O`u^Uh2Pl~!M@KSoon@kr%<>0H)a zM-o=QV%DQLi)^{H;61lGbCM5x+iQA=t}Ipi>9#m?Z#~Y^p|c+M?k$`T$jMlSg$)*; zA&9h?YDp5ez541ro4!|@I~GaplPmAOYj-iL){3!IoTa23d2jX|fQOF+7L zk(DXCOk*VC<$QILSUCM!G?z_s^Vmnv$as%^nv3)mmU)&Ht7~iBs&4OEaIO8kBKFQ9 z;%e<`PQ;B*Mw%p-ecRt0p^IFk%1dfYFYfoiA*)SxseRI!EIv-jVSK?zBAWBnd}ij= zyrq&Uio6ubScxAYlDrM`S8y-ApUW!q4ZiKFLmDwrwYyk0J^eJVfts(NYNPxyLmoy9#EbH7KP-5PPg=D*yyUQ$XFSZwcA2jVKe9%F!#UHg z`y(rbhN4DSsmlts~Iv+jw5lkc263cf8vl;BTRIwQxJ86(-QnhcL zrzd^K<}8nP2otgH`sEgwvY_Z_$JKF>6}_)@eq;@u#U|=`GXl@&ZAKgw<&r<8raH`a zG0f)l_38>cxF3GRK*-NoFG|JXs6T`ZR>OSi38y^wfHkKx8OA zXTK+fo$&DezS+IUyK7)9e&&rqJ!%%ng_Lf>VNGvw#3Hf~DhE{4Xg zO4I4BRX;zewKP~PIX`#v-X?oLs~JpSZf@>b9_#sY{Xzj0G?8{!VEPCWo5ESJBF~pt z&IAv<=d(grUgut^CDh#49|$+U|D!)&xBGbNyos(Tpr`CKT+YYR!!?TGvXM|A_R_CO zZhB{&Ui5(-;_ebJZ_NBs)uEbU$6XP*hRtS8*@^lf>L+!+BI4piWrPKbB$sGaE$KRF z$-C&cuPWcWFI*@d{z6a6P&p=f*h*Jf7XMNSL)Y;7C{03GxXY^GkE+9cle|x?RCj9> zrqDhn<7@0*IC)X);>?8W!TxS1&a#jC9@XsZ)a;3kx>Tk79{N3R8b<{-xoHzjAsvJMw%v@d2y&jHk-Q2M(XaDnbd3EG|A$Tv{5V- z>%n|wUP=e+Go5*P{Bj9OgYOwDq!m*1a{Pq)iP$0y*raVY}59>#c6Ji8!pwmXBw=9&=^o7v-mDk~exzxsE?uqnyxh`5nsj2=6JcuxTRVv8=F>t6e*a41$s8aZ+he&SjCH~u>_6; zVFlzYFeA%qQq_GQ;+i&_DYD!_vBIM;!TP36+}YatfTK?RaHsdnmoJR+>8wxNTy*G5 zOs{7#?pU<)=st2(IXKu|3YY%qq~3X{_T6s3ZmbAyzjPzZoK9V`088Z7^ zWHcBr+M|`sxsyCR^EzFLHY_n{(ovb9-F$X+qRD8mC`mjmJgf|T`YjF_d*b&q6x<`h0+mRg22e_q;Pp#Ng%#TkUl@{^`8Ch5j( zvHG{oW}Tr4`#E=0+ucw$Vj)?X39ueH{~wN%gXv9q&tLR}mE^qsXYUxmk}+Y@kk zw;m6dT4k3lmY&8r@5OiRan`9CKQHoZ0Ol^b&;P%{b=QnVlk(j40A~m5)$u9mnhNgC zp*83xDxR&xZ=XMTSY3ffOjG-vTR5TSFdtn8O)84`kmb$cDe2)6$ITat>Z%G-rUW!M z8vV)DeaScuYTU6Vui!X5x4+~oT3=@?CFIVhi{EwT?JcH*M>mAvuVQT{`|o+`|2kI@(Hgik#m}c}r{(J(cTa{tc^HxwTiPE8&@~X-<9TK9%6g=Ywa7_@p<+ z@`n2DB7MtCpBJrMqiX171g>TjuF@Z3@1t|Nd@ERnTS?iR)&2D8!xZ^{zy7yxqibj0 zlhkCnJ&y8xEVrzS?}{AR9*xDRF7i)GW@gK_XhT>Uig&KH+`Y!Qm5(lf9LGWM?Gv;9 z-!k9d+A2S}=$>=s(z&Ti=ZN-{+}@s~m%wsvxPW3MWTx=wg2Pvo%{zUs@O;58Qvuq`%Ckp=ykT}f~d~Km!=UfJ8RT$2=Na~M-h>r#oGKm zY%CkD9OGfy;TdNP)6Hv)dv8`@h}v%#r4`ep;_htBvLO@R!oWtM8q;!~%~J8q45_-K zRqgoU&fF6{J#pTBOTG<(k*1B+?J3XGICiYpuQPCRmTEWkSWGc@%!L-$Xw@O-YTZ6A z3R{8^i-bAp32fAn^}wsv(bD_prX<>h+~gZFO%ud#?LIlIW}S z(oVS_i~Eyfo@l+~zPwMs-tDh4dEUA4J4Q<}aUGu4lWq`?%W}js?D(#a^ z{xaRW#9I+@Wg_>pp!l2B;D*~q1M}*Kc3x_?&rLvb8~O4j%z391i_6+!Wg=V%3Rtt7 zTW!_e1W|=f3FDV(OXTu2*~fiBOQEl@AK6}u<+I#fu$j4}G+*~({Yg~#i6&`{*;jfV zmJzxKSNCQRuWZ*2Qj`nzc~N6TlCL`Mo_T#uqfs}O{IYb4P~V3ao;c*31Bb&+Dh#Tz z+Z7OlUN;nM7z-S{{rrf2j2u?J(0Sv5Lpa^QOr6m0iYhkFTv9Uk?fcw_r7Xw5mj=?FpZI(`1X)Do(SSERLuP$1DtPwl}{$ki^g`Htg45n;ec;(iuri z95)*L5w!BvUL|!>#l(@{+UY=7M1;Y*%!|D{%m4hwcwcT+xKLc4Rzo@zLX6$f4@*M+ z7lb79*3W${G{Dt=#D2qZ=YoE@@$go-y4rG=EaA6r`e~AFyjQNhNo=6HT_XMIB~kZI z*P;4>IbJl@!i^_&+&X(D5V$WUDx@Y~gf#ZNv!8i+xH}@G$0S_D9Y6dmXYF|Aq^ny3 z9bz_WV%=lO>FM#Gi6-PQSx_WBR`kTgadF(O3~BDTiK(jOXroh|da`ek9+l>MmGuHA zYdW2H1noem(|)BCmb}x!_8X`i8S)uFs-O2;8ldx$Dk<^#czf&hT$LR%j?eq*I@_Dn zXqjw>+|Z3`!!vrJ=1lWpOe%c4^Kzwo>$RN5L!FjZ6U<6VxWUd%VLSyQ+wqz0og+gf zJ~FbM_oGQ~P6FzQj?uMQ*xC6+qE4%_Mfq&>aCc5UyzwJ4f=^>_r5T3xZ$ew0g5i!` z+DF7F_f|+E4?2qyzU_wAd24*5bXB8)g6*9R%BBP#D!TQN!-Ia^m^XW$NIcW_7HtUA zGV+3U7wt#aT5;RE1gXCt>^e(eNSj=XC3^k9dZuIlBW|%QW!H}L-uFun~OqRFFQE0)eu z`tQ%{R@sfYSM@DW4ak)#Bgq}15+zJnD#0TF`wFdxQ#jaZ^C z&BpPvCF7t=N&p|MHJKht<(Emjn<|eiFbX-B2chI!vwUNSOga8UPM!V zFF)JohgqnYOd8ypueO!HoN}_fGt{EOHLYdP#JMk3nvto{q-??8n^65x$tt;$_;57o zwONFMkKNhxhm?*5vVCIVSwT#L!zB7~joB4pR}9aabP;NVjA!gNHripOkI1CY{~$o- zVR|wv61mKW*Lf=sSe#a_@kBM!tD4wp#`nKG{rt-b(%D_1Z#-`&n^oG@LZbrodwfHf z2-g!?<~C=orXtvuLRNZIDA(uvRd%#@!*)Ba5rkKXgv=>sK8y_v6t-4Y4iS&!%^kd7 zkY>$BOFKE29nc^ynjy`L3nIt$26+?!&Y7W-jG@bsi&r%U{m{7h>TDTu$cUsB+jWI`TkXbLU1tzW1x+Q& zBY6@64JnHzl_f!81JD;4KyH5Om$lS_eXi3dHB2Zj<0_wYigv|1a&j&mPQ_9ZuqTxQ zTCYiNlriY~x7q29j&EzEW@B?~3=LO!XUD;JcvDGs#9gQOzE7CV{IgE#0B%}tOVV|Y z!23#-4(}cgwN=5~hdK3UPE@kK0!GNQhgEYn(OHk!xNY>1cQ1G7zLD(NZMO8QmI*Bp z8@(BRU4buN3la=}v7-(vN|G(y|B^T)r&|H(rIV1^2U*+uhOtn!Id7Siy_4)JY)kM! z@BcFa53;wo=iK?Qgvd=pEy_5P@8Bkzn`QQ_=vJTYqf8R?i+EY;d}ZHy(_J|=&mk;c z@M$$V7dv}cjMzGil(vdl-rC+9S#U#HtWwbAw@doVmJT+pE;)r48XPj;WnElbWI5L)txb7FmfQ+J!7FBap3eLU){T**klC7=4<~_jJ;FMlIAQUkD^4>R{U&SZr{5> zrkctz5B6C!snu`-{XZi!94z`s7wf<<|LO`yA5Hns?0_oWsAVdHy22a1-c~EriuR36 zylmz1)aP3)sMZOtGeohv70bF~&SL4=_mO;uR<|c|oh*icv20nqCL16N#)M-{GE=o!#jLF^fh>JLT&#XP8RHi^W@cHgz{9 zf}o)Pwa|%;mU&$`%A|o`uJzUgK(Od*e>{T6Z(rtLjJ)pi{&)1Yn@v1Aw&?s)rf$y^m$7u+d8J2ko?ar3;k>;>=3QgEJi2+;(?2NuBpI=?$OSn(OQ&3l1YYAH^ zPurvck8O22ff^Exk55K-m2;TGS2?oW0;cHn1zp;1@lu~@rPnRflFoJld{|0IbopUX z4UcC11<*r;tlaCH`9J0v-fjy!2t4JWnBN1)mP%m3 z0c5_t@w6?$yh5Ut6u3Rf?)1ZbtUGf(j+d{@rM^=VeP#Evjst?NDg96ISX+&Edt7Y0 zv4ZbDriBvG|AeHqWzMrc6`otluH-~wR;RVdxVs+QS-rVeq-?6Zy5hdC{3rAtDxy?s zDL&V;5TB4R*W*XYIxW4y!yAh_yGRnmY00hj{}+`1uX>RQKqsu~dZSqXv7?~!nmzb( zv-QRy+a=LkVUm3NjC6FLe|ATT7|pkEf21zk5`S2P9^uxE3b3xpOUI6 za9C{!m*l9AadZ+PeX?q0}KkP#~!JLN5+lU%VN{Kdf5)srUj4I`y^HyBK*!Xg8i)MfUqoK-OCx1NQr&mr>#4v03h@N%8KLiZav!ev;a(Pu`*|8di0d+dMt$^ZLfjCDC~E)IXJ32O+UJ0yi3eHj}S6;^WEb9&PL<~1#AlL*QGoTTg&0_Edux2<7&j`SqZys$A`Ig z8~U?9&?p@q^MYE8xJUr4$|1Iu4dp*Zj-6^BSiN-pulbYqm{nVKbPnw&y8!x~+v#7k zc5dR{aBrqkC&)$y-;KY?4c{L@*ULElA~V6C$=MqFdU8nc>p7HByf5i-r}~RdzPaA$ zU7BHijXt^*s|?y7;BnGFT(nsi8qNj))uUq4{>1P0D7z&(XW(qRWMftc;?{|L{p02E z#Y^3Vl4TAoO;4(Hf_`^8$B^k=HMN*!tlL2zL)fREr`m%y#%Vcy(GRGfLcPvp(N~NO z4Gq9V(;Wh{TV}m*o`i(Ma$2h7iLr6kV(6n%OTCqEpCH5N_vcLjG47iotPR_YR2&}c7O-Hvf`@NkcpMlV zExzEq-Yzt`mis)2Gk6ek+Ga*}WjyA_Y&Uf){J!`PGLv$F0S21_OHmnFS-laU(A6s) zl%Cy-R#daq1~Dm5d;ekl0FsFVeF~F{j!w5XOI0f{O4fa3Z<0exmU?@8TT4q@+xv$| zm%7t7a=aaJhuMU^RLVE)LAQ0I6Hv6#{9fl*K+Qy{Hv-CY!z>7qIAAAL`{wqVM? z&^^JWwi!^!14C z6#1n~H72@cVhoAHkCU?QdY(C}oTufTc{f<3?hV1S6t~M!VH@v2#_GxJA2g{ldSri3 zZ|-wmX7a$d_n$s}s$qFpW^J@K**s%vDYdQl9HWp8?lC6O*3ARJ%lfvQYarfOalUGz zWruN&3?1fD6||zs;~06~$c0GoNVGjj4>( z)3)~P0swq0rK!;mFH}n{)0FZj0lHE}Us1?xi^kR`|2YJRuEv%Y2~p8_&-6;iU8l`q zn|N2rt{wzE+p|c9phV5Ugfksj<)Po#{lqWEI8*{w?DWe*k z$7dNP$n- z3XP}lw{PDxK6=nxzATp}Lqkpd1dIXUEb7Eo{ugdj&1F2)p&rWRQu;t{GbBKI(?0s~ z?Nxz5eq@oszEUx%!&<>^dT;l~f`z&HgBI8=MNiwmL0SoDSmNB@-Eq4jCoZLggoM*VVXxEHm?uEx0^?yj&{ukUm`GA}+d;N~{U5y28GB#}o9X`j`zNYYw=u~u^ZW25Ce)}N|Q~g?@Sa40bCfIYtYM_PCGf0UAevBQ3~2*p>u0rI_|UcBvGd&7U$m(TiLDch&!Xbc?vP7ys;#N1iQ%zlf7nCZy?s`UFD)5d8!arJos0YEC2ESW4AYzQ__l zP&9%LWVb$ji9^o`>56b;N>Np&f$X^3ktDV@)k=9&2iumye*XGO&;htdo@i>uIQ~$| z1L5noVc)f;o%lki5|mulzJ@Y|p`oEHm0Pa!ELD5KhG`a{v)6+{+#16p<}vS*6cSb? zbNhi5$5Xi|UPrqRuBec1i6jQhMysC}G=Y{fSZE*=aJIlMxs&exO8yC+&GE@e5NrJ- zUQsd#z1ovRv%FfEtnE4Rd9@al2~Zpe2?;5k_soJz0YA!Z;fPCVcO;IidiD4BhaQH| zNp>)#G6~OfvJ4g*e&{0ATlUT)L)aB}|7Z}2jtk;%e);*HCe+F;QwkS!{$2wgThaL5 z(_z<^EZgjgfy6^f@eL3=Dv;hMI3Q+>hTdOq?$Qdx4x}Zep`00kRn;1@or?bcIiL#i zcmw!W%07KY*g3Wjv?mC;i(^$rnp7(Fo$5E}$;4-WccN6G0};DGG;}CwIcX=qeMIais?s)|sTY(R)OD|^xuYDUtF4`sl$2&a!^Xt*KqAhT z6I?pdqM|Qz#BpX-^PplS-_qXjVziD9Ur;G}Y2$;D(pcxZ9UHF`4ua97)(qy=_5OlHGj8*f=B>CtzMxqEW z@K0@nI890uI|T%!tR|{SUsw1$a!yMx#wd_gJzAoF( zS)p%TE>XutA!FU`vSHI{`N58U$nh&EyB}Vlbz>65Mi(0joc|m^*&A)m&WDgwSz^TT z*j}6BFzk~u>@b_y^+ zr(XAjLiPtQ&9}|Gc~jUYmtU zaBB_1eRPcP|12)=XJV%QrLra7PLrXDvks7R?UyQwf#F*iEFQ_%4KNLslR{l_--nFa z5N492(nIo2wbG#kLSbjnluj}xu^~GCXcHG~C3ve@S9gd6rjA&4imyKo3JS_K9lJA= zf;s}om>hVH6iLcF_f8pAxxtRK0Z`x}?cAJha<*b-3 zf?w$fQ{6i=*Yj>}xU9H;?zF9~?aa&!v|UggBZo&0zGIZ5_QpMes;9Pr{#;UAe4*!^ z3RLze<_Q#pwtE)fBt&%p`g4aU&)uRkOjqbusx4f+`qnR-IKKje|p{ z@^-RDB?kg=NubvN6mIB_@va+wEiVBmrKhKN=N%ydK?FP0>`qCaLayu)hqI^9CrJTt z!mfeKxr{t6k-z-@o0;=aYC{a;d zZR^fx)#Y>;fVs6=9eEps%jhvk9c3wZT9ZcbFSl)+2e0cg3GzCKi_fM3eWD?@u#jUz z;Bo)Pu@ujHO?WX+oLch*D&iP?BHL@B(T&IeSHuVICqP;JhN=ILKV6nUTSiAd9^S>* zy7NZ>(*qR!J$HD7SvrvHuG<18xl7oN?3q@>ne6zi*bV#Iz;?*B`2Gd91vWyl{m-aU zV{1Quj^zFeg@#law(q8OB4H*?poTxnC}Sx=a}>lu4b0jGVT46jvq|MPEdv7x1s2eK zYh}dced>~oZjR)zSs0M-102}Y+FHea#wBvvt{F$Ff*n!aw7k=N4>ljt5d|9);zdLi zY;ga8fxZL{XY0ui!RX{m&K2g1WCCj3Fghfyk|kr2P~c;-Ss{LR3AiP;2ozwG1Hf~0 z17`RNFbgtrZDp5#L~xj>L1=4<%kr(QuF{_+Cm#k#D;~*?G3A9%t@GveCBq0YJ=s3Q zsgpOm7agB%E0_g3tNj_4Oxivht8HSW*%b z!H7ws<-9!+4t6_*NC4-#Pd;Nu)^%IU(RE+ySF3ce1r}o346LY54|6q9_3~36_a;G4 z1P&`91x#c-F^L_YRo@;*=vJBxAfWmzuVdONKxTq*2BO}!l zpf+Sk$T*B2aEhMxwzRV=HBC#-q9K=pL-2SGin zD`CSV%#Q*~9|9qgngKn}{afqyK-Y- zNxESPZ4ab8uss(>Xmq}3^{3>^;#x4Q6ia`{iP}{GRl4ai#4iakF=phBRJK|LWkwk0 zuNy_8r6LQpYcA^Xe3D<+tc6YkMxURbpTvBI^oAA?D2XG0&KEk8d`vs;>_L^(;@)5H zWGP>EH59l8@c^BE-Ft;cOk^q6tE;PkyYC9+hH8lo=81)|Y4dp#GbvvM6hJ)vZG&?R zI+X8_UERg&{5ZbS&&#~{Yif~9BL2C3_CES|ntw`AQ){YZ)Gae`yeh!M1E7Nqg5LrK z>l(;-fXV@3gqpk)1JzkXMpRnfjERiIq`Dj2&+s4z8D-kxR}Ee|VIn-$J&JZJR(D@7Dpzu<5WVc z{BPyR^zo^}75=xV`$Yr;#U>_yX9i@`X{V0Kt^K_i+4?6dA4?VEGMZ4Zx_A z=MY)(M+Cqqi?0(|W&F=vJB<1t^V!dBkUfIabl$>~3hURJA~^!!15T+4Y(LFm7)0{rM~> zrHX#nhqn%)^o)$k<*r?|Pi*m=hD`4|+YY7I34#lXFa`!jT3XtN5bKY#)A*W31~RoHD%Nz>^nD=SMWE}W<|!AJc2@12z=nZpr#f3P!m_u_&_cIAD<-zlh$7x=zLO*V zJ91F9vl;;wJts$db-cm(G~!kwoC~1ryDPm0hiMcU=;^Qdm|-~gte39ON}MM}@}(|P z8Y%UqYG~>I#`+IE0V^noBthu!TKEb)<0r{o>>+YKQokX+_85_H{6~r5Bc4RyNlZ3& zUjBeKxrTw*qd58O)Ip@xPpCrCfSp}$cNQXzf>Z?oC0aXpp6iha=mC$~{c@A|l8^V-X<{d%d z!AIW*szSBW4NDlf5pLwi&}GZV(E9j-(h@rB1B?PPHr;1VC&}7qs4LbKn%(S9m-q4a z5A)FL%yGVlc)Rxz3E2>*PQU|)hLBbii86HU14&&1&A$Qkg;1rCCxqa{&6fM9$X(;p zFZjE73f&C8>p<_^6L%L)?=?FdVnWwFhI#y>FhKJg3B3vo?xj$J%^;rwAwRskR3*7f zOGk%Qg~vU7<}|>9t^*-TM=f4TvU|>M&{Qr#(<+iO9zpIP{ZbV{Pluc|6vXpt82W^k zVD>v1Oe;Ee;~`-#q)<@Vt7;Q%ius|_sF#$}lAeuMzl(mYp^tipdj2zoy)VU?EI%$m zBRrR7S0s8wpr29;+MuVqX=n6GCUqCi5IrSPMyUdi=bdr4krwN48R0Sw>be>Rvvmp2 zzEAV07cU%#pBZcGGt2-j4@E7W#s*(Cm87$?APtL^U0@XOidr7*XO`jA!^>-Ov6B}GKyR28xwZG%3D9z^KW?eF75y$hg-Z;|*~QkXTI z{Bk*QgzUW%Z0ltIUcn@(&0aP8cQ8TFz#=J4w|a~!{nkhh7Fyb5#cVaW!nxva@+>&#p;%O{QbxW z-9Tk;5(YqGLj3MHj<5E#Hr>8HksPsf1ow|)hgIq?Mmx|NF@!|TKd1ib+gUZ^=LIK6 zIgi2r#pRcoLSosAz-A>+12W*FciuYm)Bz;?S1=Z=&$bBhxC;T9?Q%36WDkJcSS80B zYn$gZ;x|}d7S?&z+?@c_^m2XQiU0Wf|GE*`6#w%^oSc=04(!=@^clqO25Btl%W_19 zP#m1UbB2xSEvTAw#~qW+pvPf4&J&;$a{^G%bC9t8&a;8Uq}v>kG_PyemlFpE+S2K2 z$0sJ_(_|*V%*}x&>Sey=EC>#4a!WxS7KBr^K^Db?N3xoVdjOb|ago?9J^itn*-E+X z8pX3wlw8}bS&m;hsnDO*I@afQbVb#B;y90tp)P@<0PPjeX7(P8f|9T%Kk0 z*w1wf3J(|Z^z!!ypt=T@4Y$r!epZVPTMRP9;n=UW1Bh{is^zWdKmiA*A1);`JNOiJ z=yGR2uS(N6ZvxHT2?EhYa-tTfbRe6<;F%ugxD-6;w7jt_m_soPS** zlWvNFeAYZy3Q zG=6k=4mq;Bfz;Uhh)3VPiB#dAHx(u7B4yJL-BB2Z87s4zqn!usq(e?41MUga3kQ&( zQEi4=X7#BsAIRRP`%L@X2b4|pwkoCvd)qf~!_YY4tOq2#2NKTJ+)t1-5cWx7#RPW7 z0HZ^f>@zJxl%tg=wc>-bG5~`?a50C)h9f7pXlS&d$We8{{DH`cIVh9z{oA*vagXHW z;E2UVu}_5sp4g<|a?b)Cpf#GS7*;#amBxu81K3@VZW63Yo>fTPV#2+rd)fKyC_3O^ zWHyGpFsRa!lm4#eS5`t!?~PfBV{YyG_3MBl!EzmX06e*5B)fQD7-w{39=|O8Hs5wlM>&rUU_~MAi?AiQETMr7Z|qTkoSyuZC6G`{dW-(rr9>VE z2JfD^#5sug#aPn?acASE!%`Wtk_3T#+fr%#X&- zhzRfoOw#WO3y`#0YK!{_iida$6c~{Bd6uhBYOVp|0Cp|A;>Q4z_1A5U0crvAK=@t( z^#b$e31j3#7rw6}s3^ij#>cM(Kbq3Uj~TnLZ-9!@H^+o4D^}Q9X#@bP)sZN2BQ!P^ zsWoDjfwf}K*?5lmXKWGoK8!~ePlzLs;az@Bg|~5k9%$ywa0nE_-G`Wopam3*5$i!C zB(j)zrI@Ir!YSl??)sBDY>mjS=&+g9_rOLB7aD}0uP~o@c}_+`lYx0=-A} zQE<`1+3`1#kz#Z6s93~6=3q^MU*ZNxxKM|JFR=}FFz|(OWXW&Jrbtw5ee?O~iAxd* ziIY0OHywIn>QKrS`(Mj?+^`5rW2+xWsGKQSRTx?e{11N&nl$uPIrA-Lf&^@4mYb81 zC6lZ92~I~LtyE!4RA&hZ?*^dOu$w`1Hc)5~St0Q8uib=1Wj`bNM*CmtnMiY%TpEEl z4=G@p<(YCg3!9T9n{q6_y^2g+hiM~XUy$&tm&*B>7z!)QJ>($iIDO;KRmLMX z&YP$I5U<2+!5RWiCp=Pcf|cI{87l_YtvPiUOgde~vv8p8D^dfawe; zIrUrxnMeQ2EjT!ep;#6$1J79+It7sVE2y*MkBSUQmoD(wtrzHZ!sBxZ#5=*cKd`W9 zX=z=3^j>O5ZxhPj!NXQQpj`8wt!UcOUq|D|KyK{C#u=#AK)SC!KKp5z=y-FVe9l@1 zaiEh;_;jpNyNNiz7Z>~tQE%QLl)yiko(Pa?3NkICbO0_pl2{G|xQa|hzRqt% zLWcrm!)039AJgsBbaZH9wiy4KIFI(x`HR2m%N%6^HA6xFoEx|q;GGMF#=|?n-IM}> z;>bL~^H=^t7Kh)-=p*^1WlMj6EkNxpz`4i#(9M6Z56I+%!*iNxVn$uLu?lQsldnB) zE8(O3d?G2EQT#32ke{O&^M6(WN4^zga%5#?L9uOz{XkaP5*^^d@-rRs4?hcLNA;lSHH4VW9s1>>no*v5EUUT(jtpU@~LbPqDxO>|z zI5T0L2JZE5ngKA_wH>3am*=-ste*erhA{tC0&(K` zQ9!fwBIQn1MCcI>iQxbJtBpDRsQmpO{tP&j5ce2aB{`+MAh_kYvksk0ubp?ik#lXOU!lrKkt%?}hu!?w2{ z;4MVsGb$A5=PK8c3Nyn7H{r_9_78$3bZ7HiX!TEP7}B}0__w3XH}kDRk5M6N9`F!O z(2T+hIs%It8VSs0kQyh8dL=hC_1#-ck6CZ+S>(kO29L7Vh$K9}lXV=#)l?2{p4(emks+?m44~so0pz!Up z$uFcc1%~YK;)8b|Z!wh_*yA3nSVP&G3%6B1)TZS+~Dm4^4GV<((1KHlm;S^^Tg)*jS; zKPKjwSox0uc6`?pu|{v{Jg-EyB!WE_eN;U_a*qbWh#nMq1M>rq7<8k z*wyH;VdB?kYHy)h?}uBve4d5H1Wg)5{(SpQ<9;3RQ`ByrN5iF9pW>(Zyjml&MUNgR z(|Qv>;3pr^jrf>;)FePC-|fzUm(t7+6wZOZ`dj&IT!n6Iv|vs*9HHRvRw-UH^Rp~&i@mKCurs}>7*+ly8yqFL7fsMx=~WB@5qaawb*VF{>Qx8OGXV9* z1uv5*m6^Qup7_`>a-1nQ-}3uxfa@y`8UtvdfE@EE2v-3)`L|wL1dfWj3#WUL7KK;c-ZMPXV_jl;4IA%QGP5_u7qi{_ zN`CM3FH-)9D2PLV^7k)4J7&HAW$OORDnbo?+rsNXIT6tqW$Fh|CiP6f8y@{`zZc+ zmHtbeUOa)^=KIdt^lwCKwd1p7;_kRduo>{Kx7`Jk<0fC?>XQUx!U)6qu)7xT(O(>u z>A$m7iHJCo!Q;7~<{W@eNy)PC7Sng&*&nK3C=Tzf4)rOwtJ^`Rjue-_GrD<51X3fg zdnpsZBroU6crCdOI142GkP`P;*25EPB@TKDWRU%xp(beAe%4wt6=}twNR#pvL4eL+ z&@MNh5S>9fmVp;U+FI^`D?uO5g8;`2qIe9qcm(V1XUi8!0lLOVAkV)zZ*(gH!>MWG zEm8sYd9>U3yOc5|aMlGpQ2ceUOVjvjl;q?rLG6P!bjb804qTZKNxVP~fB*hH%E{AF zoK~W@(k9^44V>#e4@aBVke1@lp*R}Tx=iulNKWWfw4fR5q*Cs|O`%i&w0L#ATiU3M zw+WMR{9nuX08Z20DR6;D!|McrhcOu_@HYFyr*zH7-}iCL&&fg3J2>ZAUjt?Iz;)vJ zgX4V=Y8ciaZw2vD&>JkSO= z{s8AF$<>F~fH7S~9_;}VR8Ry>SQb2?N7iu>HtqZq8~m(hRmXJ7CS4-+9pJlZ;^N(% zK=P>E`i3?3<#+Ml2A54pHP#fok_*7S<4gyQxj*Sm!J@qk_5IoLh7i`5z@l7^u8}g@ z&%7VXDI&q9NWjaKr`;0Y0?Vkt;l`9Gma z{l9M?-n-V}f(TwBNzqRs;55My96vx6Yqx{A&}y^#-v5f&p`b$fHLW#KCji z8@75?nv6rb6c1iqqAueO(=3d;A^Jn%&anRxrg00I2gd&#O>nZ4)TPbfBBvf}HW~+I zEyps!_0u@J`GHdz1J;f`Ax~CStUs={U9JYg=52FdUmqmzn=NqE0pOL+kz2fhJxwv* z(~@ZGwf^-Wk)M@3>fwT6w@3zmE*04OlJ6Ipb{HP)t+j5>cKghOvlY&A%W9_S z-!b}pZ|06*!vJsyivVAOW5C)9V1z;b0E>xGuluRFOcPAsJL!0yf^f@pA~y}&o-j7~ z*98wJds@OErji!&TN$nWga=pKPBi`iBqJW7Z{ERn9?ok(shO{1kA4|V`3^a+!^6I?n`N^Q?oKna#U)1uYl#TfH1KBppZ3l?9Ll!u z<%Xxx^Gv6HPKOX3dC zIhOnGdGF`><9(0!c>a3+;&7O2T<0~v^ZYH}?+0jNoykaX233Eqt2f(&%-8HM={_#u zfiAepV^n$k6xdOSr+${oJD)i$m=qrU@`z6Zq#{}vpgIJs4lVGhDKv~(1n06ch*p$K zI$cLqb!Rfo6IP4S70)wPP(Rkn@NO|jT(R9~^lNbjJlGAuBod_jdi8o}S>iZ|%XWVp zgqr~hMq#bBWi{(*28TcO0w8Z$j}_=~0~^B_1E4%xeO=L+Y&+N#;MXJJO!z{m`7 zAOi}DVUsZ1m3@k?cp}dTogL2sEl;O1rTu(D`3pz)#D0ELt7o=%a8a%X#ex8Fg28}9 z7-9BkCM_zgE>)Z;s|UvfsEW{WoTLtR~6J-x8k8KK}JzsjqJz|mlTc##*~7gP`Oti!(}LcY2Ms&w%p(Woko16~WY z&uT6E_3Q)_ofzd`Dgo*0DQKo3vVy=@+3jieKg{m}Yhf2M8ZC3w9KaJCsNtVf!Iy7Xv2fj9A&paq3= zI#{KhdGmL!#83(5CS%~=Q&N-g9;U6lsVg8~&0RZ8&4@~uy@nkXTSXFj39shxr?g@} z1yUZJYZ@&ie@wbB5$O(StvXEPkjJ729*{=+|4+37Ib;Kzxj%8M!@v?tlr-sP%EOh* zf7LYcy;*++k}smqkVKultc_3*q^8zvkWCTjEsZ3J)^vvNJXd1AxI{8c4#XGF+G$0~ zEMg6M)`60W{`B5pOzn zBzoGHQxktNWdlvOm^b3IQ*W=F{Fvtc{eIRc8#arJD*^n9eZ3V4jgizcJNTL=7qnX;j7;onUlO`4Y zb5H=jWUynL4C2HKmzz#OgErrjTItC zf|5KXfb;FerarmtzsIvtmgT3A{YxCee;%;*zhXK3KXc_gYseS+Z(%ccQc3(6!0PW| z(vHk?!;=Bs+O*7OQb=VJS88p$&_^Z_v=Nf=?AfW5}>v;7zKzKIuW@SYVX+EKaS;AdX8U{?=LFbxy6DF z;6-4*W7=jTbs;xLaTPXRMIH{CF5OwXbv9jq!TPFD;j-h>hzECwzvuQA9mxMd-&)zJ zbBX?x?D#HWxeXOr%vn;$UKjmn}oPM2A_TL>wdF&RsDXvfwpg&sYT7yKQk zb{rmfpG(nyu;+Qs_Gm+WGIl+EG=>O&vWMrZcccyu{${tky`>1f=;q4Hbia}G zT9{K~`h|_g7>q?I?xm=GYdzH;xT@4|Op_5;-_Mo3_5uEHopAuiw*2jf9Hxrx-0<0R zJ2Z}9j=QrR$JsIK4P3&U7w4^A`;Gmk+Pnshjhh_MA3lt?Jy<+shVq%=S+M`rh4F^i`KJ8WNqK$)L?&6we2(vDys9W?A!^0NBCa2|(4cURR(|xtlZf+y%x2AlWC28jkU-ziC=r1{D z#V#W9N>)0@0wGyh>3yH;i)b{Xka)4|X@74st4CksU+J40^e8$$V;o-$nQm7y^|x$HTp5GZf{93UT4R zy%$>ES9EsjiJ6DID&qf~qye~kB3rsVx9<1PvAvm}=k%G3(8eG(KNNCMB+cbLB%`0_ z?Y)%9!UCHUTLBj9{I_hcT?t1{4KdL^{{f|{d&6kq1?_F_qVrWPnz=;nxW#0ePnDSo zw>dUz%BSNv#Md=hj2%8ELz)&>EoIJiQ<;h$G26q(QSalP9B!_*mb8ES3T za>Gs0p53|Lz8BZcsuL{1qNIC{R60fpYj{L!COux6uA3^Z<{jcPNiI#v4ro{8JCC!@ z29@2d&x#6O6I8MYY)zU6BCXs?jY676xNV8&!A9sc6Xb-V)*n})&||I~O?p{Bqi8=4 z)-35Te_vABY2}=A$p6l@pso$wQh@7=NT>{#;#Y;={eb419^?cW}8AzMqV?#8UVH1M19y?L-KH?&Ls3L)jlTO;)ieoKuedBMVG(~hjuIW&JA zVtAOr`BPkM$iUaNzv5hVqFKqaW~I16`EP8%pNyT1Qi+F5U80aK(A!rggD80Rzaubq09T13qTkMb#SC;^>FBm&a-rws~Y-qsx2(dvF$C z-h>*lL>6@JeG;ya`k%a=nGh$NhV80YoYa;~*%9r^5YoqObK~F(>SqvhXCt(E*{>Su z>NeGC!p*G8aebyQiv*pYoxkE=SE)c>xHeq;V&c<+`iv+Q!?WD7Yyb@mofk+;=?8po z`-Z>5Ju57nBHl9*N_tPT)~d#QipqFR zLU2m^R7bpa?V|VTIr{`|7YJlPD`22hppLZWAj+w=H4&bSOTCXNIe9Qt6Kt0=xqW>5 z1H`jUBKSmCWs9UYPF6=h`Yx`2Cb5i@F$r~2XgVNJfoYlbZ%)l%!k6Q@OInx_3L9=<|NFKTT~f!{%w8I9_Yw1qep>)N zsi@_Iq*ZxfHtK zmhKlntgZw?bj-EBT02e)4x5hmoCN>f0_iteVztq0?tEGZrVWLH<+G&cQI5o9cnick z>f~Jal}lXFDdtB+e993tFe_}}jWiCfAjexWuGu1LJa)+g3YK8jjW_L7j;k=v@5Oq9 zdOnSYX^IyD@-)bfS~ar1%W_K!U2!x}!}JJ`?lG6+793P2ov7bm)vgs>FC}P8Mizx$ za0>woEIVh$3s&5@nOHS6>8&n$+2)1ZGpCCsj1H z7tyAI8>TObTOt`QlcR5M3#w;*5wAQuOa(~`8rL9Uf3{<<*I00VO?%NqA5$;m(m$CiY^TR$(=7i#5D|Mr32UtE*xPERdEq2vZCiX_d( z1;p~$B4(}i@0V*@BR*v^m|vdE-U8bkyQ;(EL%1i}*|5w(|#BeQJ zM$2zy-{vv3BSbKeN;Y7@0ojDhoQngXqwncX6y#+Q1vw1z8)_^wHa{3idc}z0W!Fgn z5BK8FvZLvr+G5x|imhre%Du5S#@;YmujzalH`D5|xvv1;>PY7KE7bPBDj`3oQpAUT zrgyW-hCM*{xsm0fEeYP9e=BdbybyI+0(BBx9&eZ~bYBWdK0Q4Rbm?bBq1sAP z2|z(~=g0E%JMkO@uyUfaRhaj=G#d@nCM1SsJ}Qm`rjbR=4M}#|Bk%8e`of6c3+pyax%DggL@7D literal 0 HcmV?d00001 diff --git a/docs/uml-source/ViewerAddCommand.puml b/docs/uml-source/ViewerAddCommand.puml new file mode 100644 index 0000000000..bfcef14a52 --- /dev/null +++ b/docs/uml-source/ViewerAddCommand.puml @@ -0,0 +1,29 @@ +@startuml +title ViewerAddCommand.executeCommand() Sequence Diagram + +participant ParseViewerCommand +participant ViewerAddCommand +participant PC +participant DataStorage.pcList + +alt "add " +ParseViewerCommand -> ViewerAddCommand: ViewerAddCommand(String arguments) +activate ViewerAddCommand +ViewerAddCommand -> ViewerAddCommand: getArguments() +alt != "" + ViewerAddCommand -> PC: PC(name, false) + activate PC + PC -> DataStorage.pcList: add(PC) + activate DataStorage.pcList + DataStorage.pcList --> PC + deactivate DataStorage.pcList + PC --> ViewerAddCommand + deactivate PC + ViewerAddCommand --> ParseViewerCommand: return success message +else + ViewerAddCommand --> ParseViewerCommand: throw PPException with error message +end + +deactivate ViewerAddCommand +end +@enduml \ No newline at end of file From 692bcf82960e20b2cd63d16d473610c6e33e8cd6 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 17:24:43 +0800 Subject: [PATCH 235/420] Update Developer Guide with new png for Viewer Add Command --- docs/DeveloperGuide.md | 3 +++ ...d__Sequence_Diagram.png => ViewerAddCommand.png} | Bin 2 files changed, 3 insertions(+) rename docs/uml-pictures/{ViewerAddCommand__Sequence_Diagram.png => ViewerAddCommand.png} (100%) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c8d99a1384..5c5f768216 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -110,6 +110,9 @@ checks if the argument is empty and throws an `PPException` if it is empty. A `P an input. The `add` method is called by accessing the `dataStorage` and `pcList` classes to add the `PC` object to the list. Finally, a message is returned to inform the user that the `ViewerAddCommand` method has been executed successfully. +A UML sequence diagram showing the interactions between the different objects involved in handling this method can be +found below: +![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) diff --git a/docs/uml-pictures/ViewerAddCommand__Sequence_Diagram.png b/docs/uml-pictures/ViewerAddCommand.png similarity index 100% rename from docs/uml-pictures/ViewerAddCommand__Sequence_Diagram.png rename to docs/uml-pictures/ViewerAddCommand.png From f4b1b51b6c145ce0c07ec35f141f2bb09dbf9a32 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 18:04:59 +0800 Subject: [PATCH 236/420] Update ViewerFilter Command, replace cost with price and change PPException return message Update PCList and replace cost with price --- .../viewercommand/ViewerFilterCommand.java | 42 +++++++++---------- src/main/java/seedu/bigpp/pc/PCList.java | 34 +++++++-------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 5d15d88c7b..10770d240e 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -10,7 +10,7 @@ public class ViewerFilterCommand extends Command { private static final String NAME_FLAG = "-name"; - private static final String COST_FLAG = "-cost"; + private static final String PRICE_FLAG = "-price"; private static final String BUILT_FLAG = "-built"; private static final String CLEAR_FLAG = "-clear"; @@ -37,9 +37,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (containsFlag(userInputStringArray, CLEAR_FLAG)) { PCList.setFilterFalse(); PCList.setBuilt(""); - PCList.setCostFrom(""); + PCList.setPriceFrom(""); PCList.setName(""); - PCList.setCostTo(""); + PCList.setPriceTo(""); return "Filter cleared"; } if (userInputStringArray.length > 1) { @@ -51,52 +51,52 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (containsFlag(userInputStringArray, BUILT_FLAG)) { handleBuiltFlag(userInputStringArray); } - if (containsFlag(userInputStringArray, COST_FLAG)) { - handleCostFlag(userInputString, userInputStringArray); + if (containsFlag(userInputStringArray, PRICE_FLAG)) { + handlePriceFlag(userInputString, userInputStringArray); } } else { - throw new PPException("Please enter a valid flag after the component type"); + throw new PPException("Please enter a valid flag"); } } return "Filter completed"; } - private void handleCostFlag(String userInputString, String[] flagAndDescriptionArray) throws PPException { - int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, COST_FLAG); + private void handlePriceFlag(String userInputString, String[] flagAndDescriptionArray) throws PPException { + int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, PRICE_FLAG); if (priceFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a price description after the flag"); } - String flagPriceDescription = userInputString.split(COST_FLAG)[1].trim(); + String flagPriceDescription = userInputString.split(PRICE_FLAG)[1].trim(); if (flagPriceDescription.split("\\s+").length < 4) { throw new PPException( - "Please enter the full cost description after the flag containing the start " + + "Please enter the full price description after the flag containing the start " + "and end price range"); } String[] flagPriceDescriptionArray = Arrays.copyOfRange(flagPriceDescription.split("\\s+"), 0, 4); if (hasFlag(flagPriceDescriptionArray)) { throw new PPException( - "Flag detected in cost description. Please enter a different price" + + "Flag detected in price description. Please enter a different price" + " description after the flag"); } String fromFlag = flagPriceDescriptionArray[0].trim(); if (!fromFlag.equals("/from")) { throw new PPException("Please use /from to specify the start price range"); } - String costFrom = flagPriceDescriptionArray[1].trim(); - if (costFrom.matches(".*\\D.*")) { + String priceFrom = flagPriceDescriptionArray[1].trim(); + if (priceFrom.matches(".*\\D.*")) { throw new PPException("Start price must be a positive integer"); } String toFlag = flagPriceDescriptionArray[2].trim(); if (!toFlag.equals("/to")) { throw new PPException("Please use /to to specify the end price range"); } - String costTo = flagPriceDescriptionArray[3].trim(); - if (costTo.matches(".*\\D.*")) { + String priceTo = flagPriceDescriptionArray[3].trim(); + if (priceTo.matches(".*\\D.*")) { throw new PPException("End price must be a positive integer"); } - int priceFromInt = Integer.parseInt(costFrom); - int priceToInt = Integer.parseInt(costTo); + int priceFromInt = Integer.parseInt(priceFrom); + int priceToInt = Integer.parseInt(priceTo); if (priceFromInt > priceToInt) { throw new PPException("Start price must be less than end price"); } @@ -104,10 +104,10 @@ private void handleCostFlag(String userInputString, String[] flagAndDescriptionA throw new PPException("Price must be greater than 0"); } if (priceFromInt > 1000000 || priceToInt > 1000000) { - throw new PPException("Cost must be smaller than 1000000"); + throw new PPException("price must be smaller than 1000000"); } - PCList.setCostFrom(costFrom); - PCList.setCostTo(costTo); + PCList.setPriceFrom(priceFrom); + PCList.setPriceTo(priceTo); } private void handleBuiltFlag(String[] flagAndDescriptionArray) throws PPException { @@ -139,7 +139,7 @@ private void handleNameFlag(String[] flagAndDescriptionArray) throws PPException PCList.setName(name); } private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(COST_FLAG) || flag.equals(BUILT_FLAG) ; + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BUILT_FLAG) ; } private static boolean hasFlag(String[] userInputStringArray) { for (String flag : userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 6b549170f2..c400b22be4 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -4,16 +4,16 @@ public class PCList extends ArrayList { private static Boolean isFilter; - private static String costFrom; - private static String costTo; + private static String priceFrom; + private static String priceTo; private static String name; private static String built; public PCList() { isFilter = false; built = ""; - costFrom = ""; - costTo = ""; + priceFrom = ""; + priceTo = ""; name = ""; } @@ -38,8 +38,8 @@ public void printAltPcList() { if (this.size() > 0) { out.println("Here is the list of PC Builds:"); for (int i = 0; i < this.size(); i++) { - if (filterByBuilt(this.get(i), getIsBuilt()) && filterByCost(this.get(i), - getCostFrom(), getCostTo()) && filterByName(this.get(i), getName())) { + if (filterByBuilt(this.get(i), getIsBuilt()) && filterByPrice(this.get(i), + getPriceFrom(), getPriceTo()) && filterByName(this.get(i), getName())) { out.println((i + 1) + "." + this.get(i)); pcCount += 1; } @@ -60,11 +60,11 @@ public static String getIsBuilt() { public static String getName() { return name; } - public static String getCostFrom() { - return costFrom; + public static String getPriceFrom() { + return priceFrom; } - public static String getCostTo() { - return costTo; + public static String getPriceTo() { + return priceTo; } public static void setFilterTrue() { isFilter = true; @@ -80,17 +80,17 @@ public static void setBuilt(String input) { public static void setName(String input) { name = input; } - public static void setCostFrom(String input) { - costFrom = input; + public static void setPriceFrom(String input) { + priceFrom = input; } - public static void setCostTo(String input) { - costTo = input; + public static void setPriceTo(String input) { + priceTo = input; } - public static Boolean filterByCost(PC pc, String costFrom, String costTo) { - if (costFrom == "") { + public static Boolean filterByPrice(PC pc, String priceFrom, String priceTo) { + if (getPriceFrom() == "") { return true; } - if (pc.getCost() >= Integer.parseInt(costFrom) && pc.getCost() <= Integer.parseInt(costTo)) { + if (pc.getCost() >= Integer.parseInt(priceFrom) && pc.getCost() <= Integer.parseInt(priceTo)) { return true; } else { From 3e873a5b62d038dfc5fae88a0438a684e976c6b1 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 18:07:01 +0800 Subject: [PATCH 237/420] Update Developer Guide with changes to ViewerAddCommand Method --- docs/uml-pictures/ViewerAddCommand.png | Bin 27442 -> 27523 bytes docs/uml-source/ViewerAddCommand.puml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/uml-pictures/ViewerAddCommand.png b/docs/uml-pictures/ViewerAddCommand.png index 30f9ba01a64ccd5d33f86edb00e5c7f4f71d88e9..58ebda329d2059c4382793a7292ab7841b713bd1 100644 GIT binary patch literal 27523 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 diff --git a/docs/uml-source/ViewerAddCommand.puml b/docs/uml-source/ViewerAddCommand.puml index bfcef14a52..297d1f2ee9 100644 --- a/docs/uml-source/ViewerAddCommand.puml +++ b/docs/uml-source/ViewerAddCommand.puml @@ -6,7 +6,7 @@ participant ViewerAddCommand participant PC participant DataStorage.pcList -alt "add " +opt "add " ParseViewerCommand -> ViewerAddCommand: ViewerAddCommand(String arguments) activate ViewerAddCommand ViewerAddCommand -> ViewerAddCommand: getArguments() From fe5931436b9decf3fdf3983c843b6fc47e54438e Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 21:37:00 +0800 Subject: [PATCH 238/420] Update code to accept longer filter commands --- .../viewercommand/ViewerAddCommand.java | 4 - .../viewercommand/ViewerDeleteCommand.java | 5 - .../viewercommand/ViewerEditCommand.java | 7 +- .../viewercommand/ViewerFilterCommand.java | 169 ++++++++++++++++++ .../viewercommand/ViewerViewCommand.java | 4 - .../ViewerFilterClearCommand.java | 21 --- .../ViewerFilterCostCommand.java | 40 ----- .../ViewerFilterIsBuiltCommand.java | 38 ---- .../ViewerFilterNameCommand.java | 33 ---- src/main/java/seedu/bigpp/parser/Parser.java | 35 +--- src/main/java/seedu/bigpp/pc/PCList.java | 148 +++++++++------ 11 files changed, 264 insertions(+), 240 deletions(-) create mode 100644 src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java delete mode 100644 src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java index f5ed0b89b1..53e6bff281 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerAddCommand.java @@ -4,7 +4,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerAddCommand extends Command { @@ -18,9 +17,6 @@ public ViewerAddCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { - if (PCList.getIsFilter()){ - return "Please clear filter before adding a new pc"; - } String name = super.getArguments(); // throw exception if no name is provided if (name.equals("")) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index b3a8397baf..181dece363 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -4,7 +4,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerDeleteCommand extends Command { @@ -20,10 +19,6 @@ public ViewerDeleteCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { - // throw exception if no index is selected - if (PCList.getIsFilter()){ - return "Please clear filter before deleting a pc"; - } String argument = super.getArguments(); if (argument.equals("")) { throw new PPException("Please input an index"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index e31811cd48..19ede7d07b 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -4,7 +4,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; public class ViewerEditCommand extends Command { @@ -17,11 +16,7 @@ public ViewerEditCommand(String arguments) { * @return the name of the PC created */ @Override - public String executeCommand(DataStorage dataStorage) - throws PPException { - if (PCList.getIsFilter()){ - return "Please clear filter before editing a pc"; - } + public String executeCommand(DataStorage dataStorage) throws PPException { String argument = super.getArguments(); // throw exception if no index is selected diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java new file mode 100644 index 0000000000..5d15d88c7b --- /dev/null +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -0,0 +1,169 @@ +package seedu.bigpp.command.viewercommand; + +import seedu.bigpp.command.Command; +import seedu.bigpp.datastorage.DataStorage; +import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.PCList; +import seedu.bigpp.ui.UI; +import seedu.bigpp.ui.UIState; +import java.util.Arrays; +public class ViewerFilterCommand extends Command { + + private static final String NAME_FLAG = "-name"; + private static final String COST_FLAG = "-cost"; + private static final String BUILT_FLAG = "-built"; + private static final String CLEAR_FLAG = "-clear"; + + public ViewerFilterCommand(String arguments) { + setArguments(arguments); + } + + /** + * Checks for the filter flags and applies it to the PC Viewer menu user interface + * @return that the filter has been executed successfully + */ + @Override + public String executeCommand(DataStorage dataStorage) throws PPException { + + assert UI.getUiState() == UIState.PCVIEWER : "UI state should be PCVIEWER"; + + String userInputString = getArguments(); + userInputString = userInputString.toLowerCase(); + + String[] userInputStringArray = userInputString.split(" "); + if (userInputString.equals("")) { + throw new PPException("Please enter a valid filter"); + } + if (containsFlag(userInputStringArray, CLEAR_FLAG)) { + PCList.setFilterFalse(); + PCList.setBuilt(""); + PCList.setCostFrom(""); + PCList.setName(""); + PCList.setCostTo(""); + return "Filter cleared"; + } + if (userInputStringArray.length > 1) { + if (hasFlag(userInputStringArray)) { + PCList.setFilterTrue(); + if (containsFlag(userInputStringArray, NAME_FLAG)) { + handleNameFlag(userInputStringArray); + } + if (containsFlag(userInputStringArray, BUILT_FLAG)) { + handleBuiltFlag(userInputStringArray); + } + if (containsFlag(userInputStringArray, COST_FLAG)) { + handleCostFlag(userInputString, userInputStringArray); + } + } else { + throw new PPException("Please enter a valid flag after the component type"); + } + + } + return "Filter completed"; + } + + private void handleCostFlag(String userInputString, String[] flagAndDescriptionArray) throws PPException { + int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, COST_FLAG); + if (priceFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a price description after the flag"); + } + String flagPriceDescription = userInputString.split(COST_FLAG)[1].trim(); + if (flagPriceDescription.split("\\s+").length < 4) { + throw new PPException( + "Please enter the full cost description after the flag containing the start " + + "and end price range"); + } + String[] flagPriceDescriptionArray = Arrays.copyOfRange(flagPriceDescription.split("\\s+"), 0, 4); + if (hasFlag(flagPriceDescriptionArray)) { + throw new PPException( + "Flag detected in cost description. Please enter a different price" + + " description after the flag"); + } + String fromFlag = flagPriceDescriptionArray[0].trim(); + if (!fromFlag.equals("/from")) { + throw new PPException("Please use /from to specify the start price range"); + } + String costFrom = flagPriceDescriptionArray[1].trim(); + if (costFrom.matches(".*\\D.*")) { + throw new PPException("Start price must be a positive integer"); + } + String toFlag = flagPriceDescriptionArray[2].trim(); + if (!toFlag.equals("/to")) { + throw new PPException("Please use /to to specify the end price range"); + } + String costTo = flagPriceDescriptionArray[3].trim(); + if (costTo.matches(".*\\D.*")) { + throw new PPException("End price must be a positive integer"); + } + int priceFromInt = Integer.parseInt(costFrom); + int priceToInt = Integer.parseInt(costTo); + if (priceFromInt > priceToInt) { + throw new PPException("Start price must be less than end price"); + } + if (priceFromInt < 0 || priceToInt < 0) { + throw new PPException("Price must be greater than 0"); + } + if (priceFromInt > 1000000 || priceToInt > 1000000) { + throw new PPException("Cost must be smaller than 1000000"); + } + PCList.setCostFrom(costFrom); + PCList.setCostTo(costTo); + } + + private void handleBuiltFlag(String[] flagAndDescriptionArray) throws PPException { + int builtFlagIndex = indexOfFlag(flagAndDescriptionArray, BUILT_FLAG); + if (builtFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a built description after the flag"); + } + String built = flagAndDescriptionArray[builtFlagIndex + 1].trim().toLowerCase(); + if (isFlag(built)) { + throw new PPException("Flag detected as a built. Please enter another built after the flag"); + } + if (built.equals("complete") || built.equals("incomplete")) { + PCList.setBuilt(built); + } + else { + throw new PPException("built description is incorrect, please enter either complete or incomplete"); + } + } + + private void handleNameFlag(String[] flagAndDescriptionArray) throws PPException { + int nameFlagIndex = indexOfFlag(flagAndDescriptionArray, NAME_FLAG); + if (nameFlagIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a name after the flag"); + } + String name = flagAndDescriptionArray[nameFlagIndex + 1].trim().toLowerCase(); + if (isFlag(name)) { + throw new PPException("Flag detected as a name. Please enter another name after the flag"); + } + PCList.setName(name); + } + private static boolean isFlag(String flag) { + return flag.equals(NAME_FLAG) || flag.equals(COST_FLAG) || flag.equals(BUILT_FLAG) ; + } + private static boolean hasFlag(String[] userInputStringArray) { + for (String flag : userInputStringArray) { + if (isFlag(flag)) { + return true; + } + } + return false; + } + private static boolean containsFlag(String[] flagAndDescriptionArray, String flag) { + for (String flagAndDescription : flagAndDescriptionArray) { + if (flagAndDescription.equals(flag)) { + return true; + } + } + return false; + } + + private static int indexOfFlag(String[] flagAndDescriptionArray, String flag) { + for (int i = 0; i < flagAndDescriptionArray.length; i++) { + if (flagAndDescriptionArray[i].equals(flag)) { + return i; + } + } + return -1; + } +} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 9ec0eabdfd..b46b1ec537 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -4,7 +4,6 @@ import seedu.bigpp.exceptions.PPException; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.pc.PC; -import seedu.bigpp.pc.PCList; public class ViewerViewCommand extends Command { @@ -18,9 +17,6 @@ public ViewerViewCommand(String arguments) { */ @Override public String executeCommand(DataStorage dataStorage) throws PPException { - if (PCList.getIsFilter()){ - return "Please clear filter before viewing a pc"; - } String argument = super.getArguments(); // throw exception if no index is selected diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java deleted file mode 100644 index df2c88313b..0000000000 --- a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterClearCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -package seedu.bigpp.command.viewercommand.filtercommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.pc.PCList; - -public class ViewerFilterClearCommand extends Command { - - /** - * Clear filter and reset to default settings - * @return inform the user that the filter has been cleared - */ - @Override - public String executeCommand(DataStorage dataStorage) throws PPException { - PCList.setFilterFalse(); - PCList.setFilterType(""); - PCList.setArguments(""); - return "Filter has been cleared"; - } -} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java deleted file mode 100644 index 03780bd83c..0000000000 --- a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterCostCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package seedu.bigpp.command.viewercommand.filtercommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.pc.PCList; - -public class ViewerFilterCostCommand extends Command { - - public ViewerFilterCostCommand(String arguments) { - super.setArguments(arguments); - } - - /** - * Filter PC List by cost of a given value. - * @return inform the user that the filter has been applied - */ - @Override - public String executeCommand(DataStorage dataStorage) throws PPException { - // throw exception if no index is selected - if (PCList.getIsFilter()){ - return "Please clear filter before creating a new one"; - } - String argument = super.getArguments(); - if (argument.equals("")) { - throw new PPException("Please input a value"); - } - if (argument.matches(".*\\D.*")) { - throw new PPException("Please enter an integer"); - } - int cost = Integer.parseInt(argument); - if (cost < 0) { - throw new PPException("Please enter a valid index"); - } - PCList.setFilterTrue(); - PCList.setFilterType("cost"); - PCList.setArguments(argument); - return "List has been filtered by cost of " + cost; - } -} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java deleted file mode 100644 index 6ce6cd4705..0000000000 --- a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterIsBuiltCommand.java +++ /dev/null @@ -1,38 +0,0 @@ -package seedu.bigpp.command.viewercommand.filtercommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.pc.PCList; - -public class ViewerFilterIsBuiltCommand extends Command { - - public ViewerFilterIsBuiltCommand(String arguments) { - super.setArguments(arguments); - } - - /** - * Filter PC List by whether it is built or not - * @return inform the user that the filter has been applied - */ - @Override - public String executeCommand(DataStorage dataStorage) throws PPException { - // throw exception if no index is selected - if (PCList.getIsFilter()){ - return "Please clear filter before creating a new one"; - } - String argument = super.getArguments(); - if (argument.equals("")) { - throw new PPException("Please enter either complete or incomplete"); - } - if (argument.equals("complete") || argument.equals("incomplete")) { - PCList.setFilterTrue(); - PCList.setFilterType("built"); - PCList.setArguments(argument); - } - else { - return "Please enter either complete or incomplete"; - } - return "PC List has been updated with the following filter: built " + argument; - } -} diff --git a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java deleted file mode 100644 index 62bcef84b5..0000000000 --- a/src/main/java/seedu/bigpp/command/viewercommand/filtercommand/ViewerFilterNameCommand.java +++ /dev/null @@ -1,33 +0,0 @@ -package seedu.bigpp.command.viewercommand.filtercommand; - -import seedu.bigpp.command.Command; -import seedu.bigpp.datastorage.DataStorage; -import seedu.bigpp.exceptions.PPException; -import seedu.bigpp.pc.PCList; - -public class ViewerFilterNameCommand extends Command { - - public ViewerFilterNameCommand(String arguments) { - super.setArguments(arguments); - } - - /** - * Filter PC list by a given name - * @return inform the user that the filter has been applied - */ - @Override - public String executeCommand(DataStorage dataStorage) throws PPException { - if (PCList.getIsFilter()){ - return "Please clear filter before creating a new one"; - } - String name = super.getArguments(); - // throw exception if no name is provided - if (name.equals("")) { - throw new PPException("Please enter a name"); - } - PCList.setFilterTrue(); - PCList.setFilterType("name"); - PCList.setArguments(name); - return "PC List has been updated with the following filter: name " + name; - } -} diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 86fe9e2113..117743a87c 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -27,15 +27,7 @@ import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; -import seedu.bigpp.command.viewercommand.ViewerAddCommand; -import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; -import seedu.bigpp.command.viewercommand.ViewerEditCommand; -import seedu.bigpp.command.viewercommand.ViewerHelpCommand; -import seedu.bigpp.command.viewercommand.ViewerViewCommand; -import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterClearCommand; -import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterCostCommand; -import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterIsBuiltCommand; -import seedu.bigpp.command.viewercommand.filtercommand.ViewerFilterNameCommand; +import seedu.bigpp.command.viewercommand.*; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; @@ -109,7 +101,7 @@ private Command parseViewerCommand(String commandWord, String arguments) { case "edit": return new ViewerEditCommand(arguments); case "filter": - return parseFilterCommand(arguments); + return new ViewerFilterCommand(arguments); case "help": return new ViewerHelpCommand(); default: @@ -217,27 +209,4 @@ private Command parseCompareCommand(String arguments) { + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } - - private Command parseFilterCommand(String arguments) { - String[] inputList = arguments.split(" ", 2); - String filterType = inputList[0].toLowerCase(); - String input = ""; - if (inputList.length == 2) { - input = inputList[1]; - } - switch (filterType) { - case "name": - return new ViewerFilterNameCommand(input); - case "cost": - return new ViewerFilterCostCommand(input); - case "built": - return new ViewerFilterIsBuiltCommand(input); - case "clear": - return new ViewerFilterClearCommand(); - default: - return new UnrecognizedCommand( - "Invalid component type!, valid types are " - + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); - } - } } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index f622fc3d75..4a23f11179 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,98 +1,134 @@ package seedu.bigpp.pc; - import java.util.ArrayList; import static seedu.bigpp.ui.UI.out; - public class PCList extends ArrayList { private static Boolean isFilter; - private static String filterType; - private static String arguments; + private static String costFrom; + private static String costTo; + private static String name; + private static String built; public PCList() { - this.isFilter = false; - this.filterType = ""; - this.arguments = ""; - } + isFilter = false; + built = ""; + costFrom = ""; + costTo = ""; + name = ""; + } public void printPcList() { if (isFilter) { printAltPcList(); - } else { + } + else { if (this.size() > 0) { out.println("Here is the list of PC Builds:"); for (int i = 0; i < this.size(); i++) { out.println((i + 1) + "." + this.get(i)); } - } else { + } + else { out.println("List currently empty!"); } } } - public void printAltPcList() { - ArrayList filterList = new ArrayList(); - switch (filterType) { - case "name": - for (int i = 0; i < this.size(); i++) { - if ((this.get(i).getName()).contains(getArguments())) { - filterList.add(this.get(i)); - } - } - break; - case "built": - if (getArguments().equals("complete")) { - for (int i = 0; i < this.size(); i++) { - if (this.get(i).isComplete()) { - filterList.add(this.get(i)); - } - } - } - else { - for (int i = 0; i < this.size(); i++) { - if (!(this.get(i).isComplete())) { - filterList.add(this.get(i)); - } - } - } - break; - case "cost": + int pcCount = 0; + if (this.size() > 0) { + out.println("Here is the list of PC Builds:"); for (int i = 0; i < this.size(); i++) { - if (this.get(i).getCost() >= Integer.parseInt(getArguments())) { - filterList.add(this.get(i)); + if (filterByBuilt(this.get(i), getIsBuilt()) && filterByCost(this.get(i), + getCostFrom(), getCostTo()) && filterByName(this.get(i), getName())) { + out.println((i + 1) + "." + this.get(i)); + pcCount += 1; } } - break; - default: - break; - } - if (filterList.size() > 0) { - out.println("Here is the list of PC Builds:"); - for (int i = 0; i < filterList.size(); i++) { - out.println((i + 1) + "." + filterList.get(i)); + if (pcCount == 0) { + out.println("Filtered list is empty"); } } else { out.println("List currently empty!"); } } - - public String getArguments() { - return arguments; - } - public static Boolean getIsFilter() { return isFilter; } + public static String getIsBuilt() { + return built; + } + public static String getName() { + return name; + } + public static String getCostFrom() { + return costFrom; + } + public static String getCostTo() { + return costTo; + } public static void setFilterTrue() { isFilter = true; } public static void setFilterFalse() { isFilter = false; } - public static void setFilterType (String input) { - filterType = input; + + public static void setBuilt(String input) { + built = input; + } + + public static void setName(String input) { + name = input; + } + public static void setCostFrom(String input) { + costFrom = input; + } + public static void setCostTo(String input) { + costTo = input; + } + public static Boolean filterByCost(PC pc, String costFrom, String costTo) { + if (costFrom == "") { + return true; + } + if (pc.getCost() >= Integer.parseInt(costFrom) && pc.getCost() <= Integer.parseInt(costTo)) { + return true; + } + else { + return false; + } + } + public static Boolean filterByName(PC pc, String name) { + if (name == "") { + return true; + } + if (pc.getName().toLowerCase().contains(name)) { + return true; + } + else { + return false; + } } - public static void setArguments (String input) { - arguments = input; + + public static Boolean filterByBuilt(PC pc, String built) { + if (built == "") { + return true; + } + Boolean isBuilt = null; + switch(built) { + case "complete": + isBuilt = true; + break; + case "incomplete": + isBuilt = false; + break; + default: + break; + } + if (pc.isComplete() == isBuilt) { + return true; + } + else { + return false; + } } } From 35a030e791d6971d5430e53898d92eed58507c5f Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 21:39:30 +0800 Subject: [PATCH 239/420] Update checkstyle of code --- src/main/java/seedu/bigpp/pc/PCList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 4a23f11179..6b549170f2 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -102,7 +102,7 @@ public static Boolean filterByName(PC pc, String name) { return true; } if (pc.getName().toLowerCase().contains(name)) { - return true; + return true; } else { return false; From 84f70293b1396caf07b6792107d00977f818eb1e Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 21:42:44 +0800 Subject: [PATCH 240/420] Update checkstyle of Parser code --- src/main/java/seedu/bigpp/parser/Parser.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 117743a87c..a7cdcdc03a 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -27,7 +27,12 @@ import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; -import seedu.bigpp.command.viewercommand.*; +import seedu.bigpp.command.viewercommand.ViewerAddCommand; +import seedu.bigpp.command.viewercommand.ViewerDeleteCommand; +import seedu.bigpp.command.viewercommand.ViewerEditCommand; +import seedu.bigpp.command.viewercommand.ViewerFilterCommand; +import seedu.bigpp.command.viewercommand.ViewerHelpCommand; +import seedu.bigpp.command.viewercommand.ViewerViewCommand; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; From 936bbc0a6caa2b2e5bc269e728b5a2631ba73f51 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Wed, 29 Mar 2023 22:06:01 +0800 Subject: [PATCH 241/420] Update user guide with Viewer filter functionality --- docs/UserGuide.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 5189722861..a49e57ff77 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -101,6 +101,23 @@ What would you like to do? #### `delete PC_INDEX` **Functionality:** Deletes the PC with index `PC_INDEX` +#### `filer -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` +**Functionality:** Filters the PC with the following flags `-name`, `-cost` and `-built` + +**Example:** filter the PC List by the name of intermediate, in the range of starting from 1000 to 3000 and is a complete built +``` +input: filter -cost /from 1000 /to 3000 -built complete + +output: + +=================================================== +PC viewer +Here is the list of PC Builds: +2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete +What would you like to do? +=================================================== +Filter completed +``` #### `bye` **Functionality:** Exits the application From e4b58617ae432cbde25752ee5a14bc35ff7e1b91 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 30 Mar 2023 01:46:41 +0800 Subject: [PATCH 242/420] Add functionality for compatibility checks --- .../BuilderCustomChassisCommand.java | 12 +- .../BuilderCustomComponentCommand.java | 3 +- .../BuilderCustomCpuCommand.java | 4 +- .../BuilderCustomCpuCoolerCommand.java | 6 +- .../BuilderCustomGpuCommand.java | 14 +- .../BuilderCustomMotherboardCommand.java | 5 +- .../BuilderCustomPsuCommand.java | 6 +- .../BuilderCustomRamCommand.java | 6 +- .../BuilderCustomStorageCommand.java | 6 +- .../BuilderListComponentCommand.java | 98 ++++--- .../buildercommand/BuilderSelectCommand.java | 4 +- .../BuilderCompareChassisCommand.java | 4 +- .../BuilderCompareGpuCommand.java | 4 +- .../viewercommand/ViewerFilterCommand.java | 12 +- .../seedu/bigpp/component/ComponentList.java | 37 ++- .../bigpp/component/chassis/Chassis.java | 16 +- .../java/seedu/bigpp/component/gpu/GPU.java | 16 +- .../component/motherboard/Motherboard.java | 14 +- .../java/seedu/bigpp/component/psu/PSU.java | 14 +- src/main/java/seedu/bigpp/parser/Parser.java | 16 +- .../java/seedu/bigpp/pc/FormFactorEnum.java | 30 ++ src/main/java/seedu/bigpp/pc/PC.java | 268 ++++++++++++++++-- src/main/java/seedu/bigpp/pc/PCList.java | 32 ++- src/main/java/seedu/bigpp/ui/UI.java | 10 + src/main/resources/chassis.json | 8 +- src/main/resources/gpu.json | 8 +- src/main/resources/motherboard.json | 24 +- src/main/resources/prebuilt.json | 120 ++++---- src/main/resources/psu.json | 2 +- .../java/seedu/bigpp/parser/ParserTest.java | 2 +- src/test/resources/chassis.json | 8 +- src/test/resources/gpu.json | 8 +- src/test/resources/motherboard.json | 24 +- src/test/resources/prebuilt.json | 120 ++++---- src/test/resources/psu.json | 2 +- 35 files changed, 610 insertions(+), 353 deletions(-) create mode 100644 src/main/java/seedu/bigpp/pc/FormFactorEnum.java diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java index dc49f38b7b..4d038ddd54 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java @@ -32,14 +32,12 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price should be a float"); } - String size = argumentList[3].trim(); - if (size.equals("")) { - throw new PPException("Please enter a valid size for the custom component"); + String formfactor = argumentList[3].trim(); + if (formfactor.equals("")) { + throw new PPException("Please enter a valid formfactor for the custom component"); } - Chassis chassis = new Chassis(name, brand, price, size); + Chassis chassis = new Chassis(name, brand, price, formfactor); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setChassis(chassis); - - return "Chassis added:" + chassis.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setChassis(chassis); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java index a8fc31ee9c..db8ead5b44 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java @@ -11,8 +11,10 @@ public BuilderCustomComponentCommand(String arguments) { } public abstract int getExpectedArgumentLength(); + public abstract String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) throws PPException; + @Override public String executeCommand(DataStorage dataStorage) throws PPException { String arguments = super.getArguments(); @@ -35,4 +37,3 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } } - diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 1bb76e5bfa..626ebb7ac4 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -48,8 +48,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpu(cpu); - - return "CPU added: " + cpu.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpu(cpu); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java index c089a5a69f..0ee6267399 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java @@ -29,7 +29,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St noise = Float.parseFloat(argumentList[2]); // Check if all the values are positive - if (price < 0 || power < 0 || rpm < 0 || noise < 0) { + if (price < 0 || power < 0 || rpm < 0 || noise < 0) { throw new PPException("price, power, rpm and noise should be positive"); } @@ -40,8 +40,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St CPUCooler cpuCooler = new CPUCooler(name, brand, price, rpm, noise, power); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpuCooler(cpuCooler); - - return "CPU Cooler added: " + cpuCooler.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setCpuCooler(cpuCooler); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java index 5b08797517..35c3d7a03e 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java @@ -25,7 +25,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St power = Float.parseFloat(argumentList[3]); // Check if all the values are positive - if (price < 0 || power < 0) { + if (price < 0 || power < 0) { throw new PPException("price and power should be positive"); } @@ -34,14 +34,12 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price and power should be floats"); } - String size = argumentList[4].trim(); - if (size.equals("")) { - throw new PPException("Please enter a valid size for the custom component"); + String formfactor = argumentList[4].trim(); + if (formfactor.equals("")) { + throw new PPException("Please enter a valid formfactor for the custom component"); } - GPU gpu = new GPU(name, brand, price, power, size); + GPU gpu = new GPU(name, brand, price, power, formfactor); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setGpu(gpu); - - return "GPU added: " + gpu.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setGpu(gpu); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index abdc75e37e..1e5c2dfa1b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -14,6 +14,7 @@ public BuilderCustomMotherboardCommand(String arguments) { public int getExpectedArgumentLength() { return 6; } + public String addNewComponent(String[] argumentList, DataStorage dataStorage, String name, String brand) throws PPException { float price = 0; @@ -40,8 +41,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } Motherboard motherboard = new Motherboard(name, brand, price, formfactor, socket, power); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setMotherboard(motherboard); - - return "Motherboard added: " + motherboard.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setMotherboard(motherboard); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java index cfa5d25186..962ff4ed74 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java @@ -25,7 +25,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St power = Float.parseFloat(argumentList[4]); // Check if all the values are positive - if (price < 0 || power < 0) { + if (price < 0 || power < 0) { throw new PPException("price and power should be positive"); } @@ -41,8 +41,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } PSU psu = new PSU(name, price, brand, efficiency, formFactor, power); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setPsu(psu); - - return "PSU added: " + psu.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setPsu(psu); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java index 2ac87ebb80..5ba2883e08 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java @@ -31,7 +31,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St speed = Integer.parseInt(argumentList[4]); // Check if all the values are positive - if (price < 0 || power < 0 || memory < 0 || sticks < 0 || speed < 0) { + if (price < 0 || power < 0 || memory < 0 || sticks < 0 || speed < 0) { throw new PPException("price, power, memory, sticks, and speed should be positive"); } @@ -41,8 +41,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } RAM ram = new RAM(name, brand, price, memory, sticks, speed, power); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setRam(ram); - - return "RAM added: " + ram.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setRam(ram); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java index 9754af66df..de3b4dc7ac 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -27,7 +27,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St size = Integer.parseInt(argumentList[5]); // Check if all the values are positive - if (price < 0 || power < 0 || size < 0) { + if (price < 0 || power < 0 || size < 0) { throw new PPException("price, power and size should be positive"); } @@ -42,8 +42,6 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } Storage storage = new Storage(name, brand, price, type, size, power); - dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setStorage(storage); - - return "Storage added: " + storage.getName(); + return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setStorage(storage); } } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 8ec02045a5..74846e9de2 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -90,8 +90,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { switch (componentType) { case CHASSIS_TYPE: - if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { - componentList = handleCpuSizeFlag(componentList, flagsArray, flagAndDescriptionArray, + if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { + componentList = handleFormFactorFlagChassis(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } break; @@ -125,7 +125,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { break; case CPU_COOLER_TYPE: - //handle rpm, noise and power flag + // handle rpm, noise and power flag if (containsFlag(flagAndDescriptionArray, RPM_FLAG)) { componentList = handleRpmFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, @@ -141,9 +141,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } break; case GPU_TYPE: - //handle power and size flag - if (containsFlag(flagAndDescriptionArray, SIZE_FLAG)) { - componentList = handleSizeFlagGpu(componentList, flagsArray, flagAndDescriptionArray, + // handle power and size flag + if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { + componentList = handleFormFactorFlagGpu(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { @@ -152,9 +152,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } break; case MOTHERBOARD_TYPE: - //handle formfactor, socket and power flag + // handle formfactor, socket and power flag if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, + componentList = handleFormFactorFlagMotherboard(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } @@ -168,7 +168,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } break; case RAM_TYPE: - //handle memory, sticks, speed and power flag + // handle memory, sticks, speed and power flag if (containsFlag(flagAndDescriptionArray, MEMORY_FLAG)) { componentList = handleMemoryFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); @@ -187,7 +187,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } break; case STORAGE_TYPE: - //handle type, size and power flag + // handle type, size and power flag if (containsFlag(flagAndDescriptionArray, TYPE_FLAG)) { componentList = handleTypeFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); @@ -229,7 +229,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } - //handle size flag, size can be 512, 1024, 2048, 4096 + // handle size flag, size can be 512, 1024, 2048, 4096 private ComponentList handleSizeFlag(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int sizeIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); @@ -257,7 +257,7 @@ private ComponentList handleSizeFlag(ComponentList componentList, ArrayLis return componentList; } - //handle type flag, type can be M.2 SSD, HDD, or SATA SSD + // handle type flag, type can be M.2 SSD, HDD, or SATA SSD private ComponentList handleTypeFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -287,7 +287,7 @@ private ComponentList handleTypeFlag(String userInputString, ComponentList return componentList; } - //handle speed flag, speed can be 1600 or 3200 + // handle speed flag, speed can be 1600 or 3200 private ComponentList handleSpeedFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -317,7 +317,7 @@ private ComponentList handleSpeedFlag(String userInputString, ComponentList handleSticksFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -347,7 +347,7 @@ private ComponentList handleSticksFlag(String userInputString, ComponentList< return componentList; } - //handle memory flag, memory could be int 8, 16, 32 + // handle memory flag, memory could be int 8, 16, 32 private ComponentList handleMemoryFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -377,8 +377,8 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< return componentList; } - //handle formfactor flag, formfactor could be string ATX, Micro or Mini - private ComponentList handleFormFactorFlag(String userInputString, ComponentList componentList, + // handle formfactor flag, formfactor could be string ATX, Micro or Mini + private ComponentList handleFormFactorFlagMotherboard(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int formFactorIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); @@ -397,13 +397,13 @@ private ComponentList handleFormFactorFlag(String userInputString, ComponentL } String formFactor = formFactorDescriptionArray[0]; - if (!formFactor.equals("ATX") && !formFactor.equals("Micro") && !formFactor.equals("Mini")) { + if (!formFactor.equals("atx") && !formFactor.equals("micro") && !formFactor.equals("mini")) { throw new PPException("Please enter a valid form factor (ATX, Micro or Mini)"); } flagsArray.add("Form Factor: " + formFactor); - componentList = ComponentList.filterByFormFactor(componentList, formFactor, componentIndexes); + componentList = ComponentList.filterByFormFactorMotherboard(componentList, formFactor, componentIndexes); return componentList; } @@ -530,7 +530,7 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList return componentList; } - //handle socket flag that can be either AM4, AM5, LGA1200 or LGA1700 + // handle socket flag that can be either AM4, AM5, LGA1200 or LGA1700 private ComponentList handleSocketFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) @@ -565,7 +565,7 @@ private ComponentList handleSocketFlag(String userInputString, ComponentList< return componentList; } - //handle power flag with int from and int to range + // handle power flag with int from and int to range private ComponentList handlePowerFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) @@ -652,24 +652,24 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList handleSizeFlagGpu(ComponentList componentList, ArrayList flagsArray, + private ComponentList handleFormFactorFlagGpu(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int sizeFlagIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); - if (sizeFlagIndex == flagAndDescriptionArray.length - 1) { + int formFactorFlagIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); + if (formFactorFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a size after the flag"); } - String size = flagAndDescriptionArray[sizeFlagIndex + 1].trim().toLowerCase(); + String formFactor = flagAndDescriptionArray[formFactorFlagIndex + 1].trim().toLowerCase(); - if (isFlag(size)) { + if (isFlag(formFactor)) { throw new PPException("Flag detected in size description. Please enter a valid size"); } - if (!size.equals("micro") && !size.equals("mini") && !size.equals("atx")) { + if (!formFactor.equals("micro") && !formFactor.equals("mini") && !formFactor.equals("atx")) { throw new PPException("Please enter a valid size (atx, mini or micro)"); } - flagsArray.add("size: " + size); - componentList = ComponentList.filterBySizeChassis(componentList, size, componentIndexes); + flagsArray.add("size: " + formFactor); + componentList = ComponentList.filterByFormFactorGpu(componentList, formFactor, componentIndexes); return componentList; } @@ -736,7 +736,7 @@ private ComponentList handleBoostClockFlag(String userInputString, ComponentL } - //handle base clock flag, base clock is a float and has a /from and /to flag + // handle base clock flag, base clock is a float and has a /from and /to flag private ComponentList handleBaseClockFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -852,24 +852,24 @@ private ComponentList handleCoreFlag(ComponentList componentList, ArrayLis return componentList; } - private ComponentList handleCpuSizeFlag(ComponentList componentList, ArrayList flagsArray, + private ComponentList handleFormFactorFlagChassis(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int sizeFlagIndex = indexOfFlag(flagAndDescriptionArray, SIZE_FLAG); - if (sizeFlagIndex == flagAndDescriptionArray.length - 1) { + int formFactorFlagIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); + if (formFactorFlagIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a size after the flag"); } - String size = flagAndDescriptionArray[sizeFlagIndex + 1].trim().toLowerCase(); + String formFactor = flagAndDescriptionArray[formFactorFlagIndex + 1].trim().toLowerCase(); - if (isFlag(size)) { + if (isFlag(formFactor)) { throw new PPException("Flag detected in size description. Please enter a valid size"); } - if (!size.equals("micro") && !size.equals("mini") && !size.equals("mid") && !size.equals("full")) { - throw new PPException("Please enter a valid size (micro, mini, mid or full)"); + if (!formFactor.equals("micro") && !formFactor.equals("mini") && !formFactor.equals("atx")) { + throw new PPException("Please enter a valid size (micro, mini or atx)"); } - flagsArray.add("size: " + size); - componentList = ComponentList.filterBySizeChassis(componentList, size, componentIndexes); + flagsArray.add("size: " + formFactor); + componentList = ComponentList.filterByFormFactorChassis(componentList, formFactor, componentIndexes); return componentList; } @@ -884,13 +884,13 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList handleNameFlag(ComponentList componentList, ArrayLis } private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals( - SIZE_FLAG) || flag.equals(CORE_FLAG) || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag - .equals(BOOST_CLOCK_FLAG) || flag - .equals(POWER_FLAG) || flag.equals(SOCKET_FLAG) || flag.equals(RPM_FLAG) || flag.equals( - NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals(STICKS_FLAG) || flag - .equals( - SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag.equals( - FORM_FACTOR_FLAG) || flag - .equals(EFFICIENCY_FLAG); + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals(CORE_FLAG) + || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag.equals(SIZE_FLAG) + || flag.equals(BOOST_CLOCK_FLAG) || flag.equals(POWER_FLAG) + || flag.equals(SOCKET_FLAG) || flag.equals(RPM_FLAG) || flag.equals(NOISE_FLAG) + || flag.equals(MEMORY_FLAG) || flag.equals(STICKS_FLAG) || flag.equals(SPEED_FLAG) + || flag.equals(TYPE_FLAG) || flag.equals(FORM_FACTOR_FLAG) + || flag.equals(EFFICIENCY_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index f6bd6ae326..69c8758981 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -15,7 +15,6 @@ public BuilderSelectCommand(String arguments) { /** * Selects a component to be added to the PC that the builder is working on - * * @return Added Component message */ @Override @@ -54,7 +53,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { int componentIndex = Integer.parseInt(indexString) - 1; // throw exception if index is out of bounds eg. "select cpu 100" - if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { + if (componentIndex < 0 + || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { throw new PPException("Please enter a valid index"); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java index def25e0d55..3899613486 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java @@ -65,8 +65,8 @@ public String executeCommand(DataStorage dataStorage) secondComponentObject.getBrand()); outputString += String.format("%n|%-12s|%-40s|%-40s|", "PRICE", "$" + firstComponentObject.getPrice(), "$" + secondComponentObject.getPrice()); - outputString += String.format("%n|%-12s|%-40s|%-40s|", "FORM FACTOR", firstComponentObject.getSize(), - secondComponentObject.getSize()); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "FORM FACTOR", firstComponentObject.getFormFactor(), + secondComponentObject.getFormFactor()); outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java index 9cddbb9b68..702c322c2b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java @@ -62,8 +62,8 @@ public String executeCommand(DataStorage dataStorage) "$" + secondComponentObject.getPrice()); outputString += String.format("%n|%-12s|%-40s|%-40s|", "POWER", firstComponentObject.getPower() + "W", secondComponentObject.getPower() + "W"); - outputString += String.format("%n|%-12s|%-40s|%-40s|", "SIZE", firstComponentObject.getSize(), - secondComponentObject.getSize()); + outputString += String.format("%n|%-12s|%-40s|%-40s|", "formfactor", firstComponentObject.getFormFactor(), + secondComponentObject.getFormFactor()); outputString += String.format("%n%96s", "_".repeat(96)); return outputString; } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 5d15d88c7b..5f25f12d45 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -7,6 +7,7 @@ import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; import java.util.Arrays; + public class ViewerFilterCommand extends Command { private static final String NAME_FLAG = "-name"; @@ -19,7 +20,8 @@ public ViewerFilterCommand(String arguments) { } /** - * Checks for the filter flags and applies it to the PC Viewer menu user interface + * Checks for the filter flags and applies it to the PC Viewer menu user + * interface * @return that the filter has been executed successfully */ @Override @@ -121,8 +123,7 @@ private void handleBuiltFlag(String[] flagAndDescriptionArray) throws PPExceptio } if (built.equals("complete") || built.equals("incomplete")) { PCList.setBuilt(built); - } - else { + } else { throw new PPException("built description is incorrect, please enter either complete or incomplete"); } } @@ -138,9 +139,11 @@ private void handleNameFlag(String[] flagAndDescriptionArray) throws PPException } PCList.setName(name); } + private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(COST_FLAG) || flag.equals(BUILT_FLAG) ; + return flag.equals(NAME_FLAG) || flag.equals(COST_FLAG) || flag.equals(BUILT_FLAG); } + private static boolean hasFlag(String[] userInputStringArray) { for (String flag : userInputStringArray) { if (isFlag(flag)) { @@ -149,6 +152,7 @@ private static boolean hasFlag(String[] userInputStringArray) { } return false; } + private static boolean containsFlag(String[] flagAndDescriptionArray, String flag) { for (String flagAndDescription : flagAndDescriptionArray) { if (flagAndDescription.equals(flag)) { diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index 0a5c412e20..a93beba7ef 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -15,7 +15,6 @@ public class ComponentList extends ArrayList { /* * Lists all components in the list. If the list is filtered, the indexes of the * components in the original list will be shown. - * * @return a string containing all the components in the list */ public String getListString(ArrayList componentIndexes) { @@ -36,7 +35,7 @@ public String getListString(ArrayList componentIndexes) { return outputString; } - //filter storage by power + // filter storage by power public static ComponentList filterByPowerStorage(ComponentList componentList, int from, int to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -89,7 +88,7 @@ public static ComponentList filterByPowerRam(ComponentList componentList, return filteredComponentList; } - //filter ram by speed, speed could be 1600 or 3200 + // filter ram by speed, speed could be 1600 or 3200 public static ComponentList filterBySpeed(ComponentList componentList, int speed, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -103,7 +102,7 @@ public static ComponentList filterBySpeed(ComponentList componentList, int return filteredComponentList; } - //filter ram by sticks, sticks could be 1 or 2 + // filter ram by sticks, sticks could be 1 or 2 public static ComponentList filterBySticks(ComponentList componentList, int sticks, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -117,7 +116,7 @@ public static ComponentList filterBySticks(ComponentList componentList, in return filteredComponentList; } - //filter ram by memory, memory could be 8, 16 or 32 + // filter ram by memory, memory could be 8, 16 or 32 public static ComponentList filterByMemory(ComponentList componentList, int memory, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -157,8 +156,8 @@ public static ComponentList filterBySocketMotherboard(ComponentList compon return filteredComponentList; } - //filter motherboard by formfactor - public static ComponentList filterByFormFactor(ComponentList componentList, String formFactor, + // filter motherboard by formfactor + public static ComponentList filterByFormFactorMotherboard(ComponentList componentList, String formFactor, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { @@ -184,6 +183,19 @@ public static ComponentList filterByPowerGpu(ComponentList componentList, return filteredComponentList; } + public static ComponentList filterByFormFactorGpu(ComponentList componentList, String formFactor, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + GPU gpu = (GPU) componentList.get(i); + if (gpu.getFormFactor().toLowerCase().contains(formFactor)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + public static ComponentList filterByPowerCpuCooler(ComponentList componentList, int from, int to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -197,7 +209,7 @@ public static ComponentList filterByPowerCpuCooler(ComponentList component return filteredComponentList; } - //filter cpucooler by noise from to range int + // filter cpucooler by noise from to range int public static ComponentList filterByNoise(ComponentList componentList, float from, float to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -211,7 +223,7 @@ public static ComponentList filterByNoise(ComponentList componentList, flo return filteredComponentList; } - //filter cpucooler by rpm from and to range int + // filter cpucooler by rpm from and to range int public static ComponentList filterByRpm(ComponentList componentList, int from, int to, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); @@ -303,12 +315,12 @@ public static ComponentList filterByCore(ComponentList componentList, int return filteredComponentList; } - public static ComponentList filterBySizeChassis(ComponentList componentList, String size, + public static ComponentList filterByFormFactorChassis(ComponentList componentList, String formFactor, ArrayList componentIndexes) { ComponentList filteredComponentList = new ComponentList<>(); for (int i = 0; i <= componentList.size() - 1; i++) { Chassis chassis = (Chassis) componentList.get(i); - if (chassis.getSize().toLowerCase().contains(size)) { + if (chassis.getFormFactor().toLowerCase().contains(formFactor)) { filteredComponentList.add(componentList.get(i)); componentIndexes.add(i + 1); } @@ -319,7 +331,6 @@ public static ComponentList filterBySizeChassis(ComponentList componentLis /* * Filters the list of components by name. Adds the index of the component in * the original list to the componentIndexes list. - * * @param componentList the list of components to be filtered */ public static ComponentList filterByName(ComponentList componentList, String name, @@ -337,7 +348,6 @@ public static ComponentList filterByName(ComponentList componentList, Stri /* * Filters the list of components by brand. Adds the index of the component in * the original list to the componentIndexes list. - * * @return componentList the list of components to be filtered */ public static ComponentList filterByBrand(ComponentList componentList, String brand, @@ -355,7 +365,6 @@ public static ComponentList filterByBrand(ComponentList componentList, Str /* * Filters the list of components by price. Adds the index of the component in * the original list to the componentIndexes list. - * * @return componentList the list of components to be filtered */ public static ComponentList filterByPrice(ComponentList componentList, String priceFrom, String priceTo, diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index cf330b5999..8163490ef5 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -6,21 +6,21 @@ public class Chassis extends Component { public static final String COMPONENT_STRING = CHASSIS_TYPE; - private String size; + private String formfactor; - public Chassis(String name, String brand, float price, String size) { + public Chassis(String name, String brand, float price, String formfactor) { super.setName(name); super.setBrand(brand); super.setPrice(price); - this.size = size; + this.formfactor = formfactor; } - public String getSize() { - return size; + public String getFormFactor() { + return formfactor; } - public void setSize(String size) { - this.size = size; + public void setFormFactor(String formfactor) { + this.formfactor = formfactor; } @Override @@ -28,6 +28,6 @@ public String toString() { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nSIZE: " + size; + "\nformfactor: " + formfactor; } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index b119acb7f0..8a65c70fa4 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -6,30 +6,30 @@ public class GPU extends Component { public static final String COMPONENT_STRING = GPU_TYPE; private float power; - private String size; + private String formfactor; - public GPU(String name, String brand, float price, float power, String size) { + public GPU(String name, String brand, float price, float power, String formfactor) { super.setName(name); super.setBrand(brand); super.setPrice(price); this.power = power; - this.size = size; + this.formfactor = formfactor; } public float getPower() { return power; } - public String getSize() { - return size; + public String getFormFactor() { + return formfactor; } public void setPower(float power) { this.power = power; } - public void setSize(String size) { - this.size = size; + public void setFormFactor(String formfactor) { + this.formfactor = formfactor; } @Override @@ -38,6 +38,6 @@ public String toString() { "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nPOWER: " + power + - "\nSIZE: " + size; + "\nformfactor: " + formfactor; } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index f5d6b011c5..f7a139ac8f 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -5,25 +5,25 @@ public class Motherboard extends Component { public static final String COMPONENT_STRING = MOTHERBOARD_TYPE; - private String size; + private String formfactor; private String socket; private float power; - public Motherboard(String name, String brand, float price, String size, String socket, float power) { + public Motherboard(String name, String brand, float price, String formfactor, String socket, float power) { super.setName(name); super.setBrand(brand); super.setPrice(price); - this.size = size; + this.formfactor = formfactor; this.socket = socket; this.power = power; } public String getFormFactor() { - return size; + return formfactor; } - public void setFormFactor(String size) { - this.size = size; + public void setFormFactor(String formfactor) { + this.formfactor = formfactor; } public String getSocket() { @@ -47,7 +47,7 @@ public String toString() { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nSIZE: " + size + + "\nformfactor: " + formfactor + "\nSOCKET: " + socket + "\nPOWER: " + power; } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index 8a1886e02e..0d2aa56b37 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -6,15 +6,15 @@ public class PSU extends Component { public static final String COMPONENT_STRING = PSU_TYPE; private String efficiency; - private String size; + private String formfactor; private float power; - public PSU(String name, float price, String brand, String efficiency, String size, float power) { + public PSU(String name, float price, String brand, String efficiency, String formfactor, float power) { super.setName(name); super.setPrice(price); super.setBrand(brand); this.efficiency = efficiency; - this.size = size; + this.formfactor = formfactor; this.power = power; } @@ -27,11 +27,11 @@ public void setEfficiency(String efficiency) { } public String getFormFactor() { - return size; + return formfactor; } - public void setFormFactor(String size) { - this.size = size; + public void setFormFactor(String formfactor) { + this.formfactor = formfactor; } public float getPower() { @@ -48,7 +48,7 @@ public String toString() { "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nEFFICIENCY: " + efficiency + - "\nSIZE: " + size + + "\nformfactor: " + formfactor + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index a7cdcdc03a..3e5c71d0d6 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -1,14 +1,6 @@ package seedu.bigpp.parser; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.BuilderCustomChassisCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomMotherboardCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomCpuCoolerCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomGpuCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomPsuCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomRamCommand; -import seedu.bigpp.command.buildercommand.BuilderCustomStorageCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderSelectCommand; @@ -24,6 +16,14 @@ import seedu.bigpp.command.buildercommand.comparecommand.BuilderComparePsuCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareRamCommand; import seedu.bigpp.command.buildercommand.comparecommand.BuilderCompareStorageCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomChassisCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCoolerCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomGpuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomMotherboardCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomPsuCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomRamCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomStorageCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.commoncommand.UnrecognizedCommand; diff --git a/src/main/java/seedu/bigpp/pc/FormFactorEnum.java b/src/main/java/seedu/bigpp/pc/FormFactorEnum.java new file mode 100644 index 0000000000..5e836f9f54 --- /dev/null +++ b/src/main/java/seedu/bigpp/pc/FormFactorEnum.java @@ -0,0 +1,30 @@ +package seedu.bigpp.pc; + +public enum FormFactorEnum { + + MINI(1), MICRO(2), ATX(3); + + private int value; + + FormFactorEnum(int value) { + this.value = value; + } + + public int getFormFactor() { + return value; + } + + public static int getFormFactorFromString(String formFactor) { + switch (formFactor) { + case "mini": + return 1; + case "micro": + return 2; + case "atx": + return 3; + default: + return 0; + } + } + +} diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index a6769c85fd..0865c3827c 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -9,6 +9,7 @@ import seedu.bigpp.component.psu.PSU; import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.exceptions.PPException; import seedu.bigpp.ui.UI; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_TYPE; @@ -19,6 +20,8 @@ import static seedu.bigpp.component.ComponentType.RAM_TYPE; import static seedu.bigpp.component.ComponentType.STORAGE_TYPE; +import java.util.ArrayList; + public class PC { private String name; private Boolean isPrebuilt; @@ -52,75 +55,277 @@ public PC(PC pcCopy) { this.budget = pcCopy.getBudget(); } - public void setChassis(Chassis chassis) { + public String setChassis(Chassis chassis) throws PPException { + if (chassis == null) { + this.chassis = null; + return "Chassis removed"; + } + + // Check if chassis is larger than all other components, else throw exception + // with all incompatible components + ArrayList incompatibleComponents = new ArrayList<>(); + + int chassisSize = FormFactorEnum.getFormFactorFromString(chassis.getFormFactor()); + + if (gpu != null && FormFactorEnum.getFormFactorFromString(gpu.getFormFactor()) > chassisSize) { + incompatibleComponents.add(GPU_TYPE); + } + if (motherboard != null && FormFactorEnum.getFormFactorFromString(motherboard.getFormFactor()) > chassisSize) { + incompatibleComponents.add(MOTHERBOARD_TYPE); + } + if (psu != null && FormFactorEnum.getFormFactorFromString(psu.getFormFactor()) > chassisSize) { + incompatibleComponents.add(PSU_TYPE); + } + if (incompatibleComponents.size() > 0) { + throw new PPException("Chassis is too small for the following components:\n" + + UI.listToString(incompatibleComponents)); + } this.chassis = chassis; + return "Chassis added: " + chassis.getName(); } - public void setCpu(CPU cpu) { + public String setCpu(CPU cpu) throws PPException { + if (cpu == null) { + this.cpu = null; + return "CPU removed"; + } + + if (motherboard != null) { + // Check if cpu socket is compatible with motherboard socket + if (!cpu.getSocket().equals(motherboard.getSocket())) { + throw new PPException("CPU socket is not compatible with current motherboard socket\n" + + "Please choose another cpu or change your motherboard"); + } + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + if (psu != null) { + float totalPower = getTotalPowerConsumption() + cpu.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.cpu != null) { + totalPower -= this.cpu.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another cpu or add a higher wattage PSU"); + } + } + this.cpu = cpu; + return "CPU added: " + cpu.getName(); } - public void setCpuCooler(CPUCooler cpuCooler) { + public String setCpuCooler(CPUCooler cpuCooler) throws PPException { + if (cpuCooler == null) { + this.cpuCooler = null; + return "CPU Cooler removed"; + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + if (psu != null) { + float totalPower = getTotalPowerConsumption() + cpuCooler.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.cpuCooler != null) { + totalPower -= this.cpuCooler.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another cpuCooler or add a higher wattage PSU"); + } + } + this.cpuCooler = cpuCooler; + return "CPU Cooler added: " + cpuCooler.getName(); } - public void setGpu(GPU gpu) { + public String setGpu(GPU gpu) throws PPException { + if (gpu == null) { + this.gpu = null; + return "GPU removed"; + } + + if (chassis != null && FormFactorEnum.getFormFactorFromString(gpu.getFormFactor()) > FormFactorEnum + .getFormFactorFromString(chassis.getFormFactor())) { + throw new PPException("GPU is too large for current chassis\n" + + "Please choose another gpu or change your chassis"); + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + if (psu != null) { + float totalPower = getTotalPowerConsumption() + gpu.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.gpu != null) { + totalPower -= this.gpu.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another gpu or add a higher wattage PSU"); + } + } + this.gpu = gpu; + return "GPU added: " + gpu.getName(); } - public void setMotherboard(Motherboard motherboard) { + public String setMotherboard(Motherboard motherboard) throws PPException { + if (motherboard == null) { + this.motherboard = null; + return "Motherboard removed"; + } + + if (cpu != null) { + // Check if cpu socket is compatible with motherboard socket + if (!cpu.getSocket().equals(motherboard.getSocket())) { + throw new PPException("Motherboard socket is not compatible with current cpu socket\n" + + "Please choose another motherboard or change your cpu"); + } + } + + if (chassis != null && FormFactorEnum.getFormFactorFromString(motherboard.getFormFactor()) > FormFactorEnum + .getFormFactorFromString(chassis.getFormFactor())) { + throw new PPException("Motherboard is too large for current chassis\n" + + "Please choose another motherboard or change your chassis"); + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + + if (psu != null) { + float totalPower = getTotalPowerConsumption() + motherboard.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.motherboard != null) { + totalPower -= this.motherboard.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another motherboard or add a higher wattage PSU"); + } + } + this.motherboard = motherboard; + return "Motherboard added: " + motherboard.getName(); } - public void setRam(RAM ram) { + public String setRam(RAM ram) throws PPException { + if (ram == null) { + this.ram = null; + return "RAM removed"; + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + if (psu != null) { + float totalPower = getTotalPowerConsumption() + ram.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.ram != null) { + totalPower -= this.ram.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another ram or add a higher wattage PSU"); + } + } + this.ram = ram; + return "RAM added: " + ram.getName(); } - public void setStorage(Storage storage) { + public String setStorage(Storage storage) throws PPException { + if (storage == null) { + this.storage = null; + return "Storage removed"; + } + + // if PSU is added, check if the total power draw of all components plus new + // component exceeds the PSU's max power + if (psu != null) { + float totalPower = getTotalPowerConsumption() + storage.getPower(); + + // if pc already has a cpu, remove the power consumption of the old cpu + if (this.storage != null) { + totalPower -= this.storage.getPower(); + } + + if (totalPower > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another storage or add a higher wattage PSU"); + } + } + this.storage = storage; + return "Storage added: " + storage.getName(); } - public void setPsu(PSU psu) { + public String setPsu(PSU psu) throws PPException { + if (psu == null) { + this.psu = null; + return "PSU removed"; + } + + // check if total power draw of all components exceeds the PSU's max power + if (getTotalPowerConsumption() > psu.getPower() * 0.8) { + throw new PPException("Total power draw exceeds 80% of PSU's max power\n" + + "Please choose another psu or remove some components"); + } + this.psu = psu; + return "PSU added: " + psu.getName(); } - public void setComponent(Component component) { + public String setComponent(Component component) throws PPException { if (component instanceof CPU) { - setCpu((CPU) component); + return setCpu((CPU) component); } else if (component instanceof CPUCooler) { - setCpuCooler((CPUCooler) component); + return setCpuCooler((CPUCooler) component); } else if (component instanceof GPU) { - setGpu((GPU) component); + return setGpu((GPU) component); } else if (component instanceof Motherboard) { - setMotherboard((Motherboard) component); + return setMotherboard((Motherboard) component); } else if (component instanceof RAM) { - setRam((RAM) component); + return setRam((RAM) component); } else if (component instanceof Storage) { - setStorage((Storage) component); + return setStorage((Storage) component); } else if (component instanceof PSU) { - setPsu((PSU) component); + return setPsu((PSU) component); } else if (component instanceof Chassis) { - setChassis((Chassis) component); + return setChassis((Chassis) component); + } else { + throw new PPException("Invalid component type"); } } - public void setNullComponent(String componentType) { + public String setNullComponent(String componentType) throws PPException { if (componentType.equals(CPU_TYPE)) { - setCpu(null); + return setCpu(null); } else if (componentType.equals(CPU_COOLER_TYPE)) { - setCpuCooler(null); + return setCpuCooler(null); } else if (componentType.equals(GPU_TYPE)) { - setGpu(null); + return setGpu(null); } else if (componentType.equals(MOTHERBOARD_TYPE)) { - setMotherboard(null); + return setMotherboard(null); } else if (componentType.equals(RAM_TYPE)) { - setRam(null); + return setRam(null); } else if (componentType.equals(STORAGE_TYPE)) { - setStorage(null); + return setStorage(null); } else if (componentType.equals(PSU_TYPE)) { - setPsu(null); + return setPsu(null); } else if (componentType.equals(CHASSIS_TYPE)) { - setChassis(null); + return setChassis(null); + } else { + throw new PPException("Invalid component type"); } } @@ -208,7 +413,7 @@ public String getBudgetString() { */ public float getCost() { float totalCost = 0.00f; - Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; + Component[] components = { chassis, cpu, cpuCooler, gpu, motherboard, ram, storage, psu }; for (Component component : components) { if (component != null) { totalCost += component.getPrice(); @@ -227,7 +432,12 @@ public String buildType(Boolean isPrebuilt) { } } - public float getPowerConsumption() { + /** + * Gets the power consumption of each of the components in the PC and returns + * the total. + * @return the total power consumption of the PC + */ + public float getTotalPowerConsumption() { float totalPowerConsumption = 0.00f; if (cpu != null) { totalPowerConsumption += cpu.getPower(); @@ -276,7 +486,7 @@ public String viewComponents() { componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", - "Storage :", "PSU :", "Chassis :" }; + "Storage :", "PSU :", "Chassis :" }; Component[] components = { cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis }; diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 6b549170f2..ba5a0b4db9 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -1,6 +1,8 @@ package seedu.bigpp.pc; + import java.util.ArrayList; import static seedu.bigpp.ui.UI.out; + public class PCList extends ArrayList { private static Boolean isFilter; @@ -17,22 +19,22 @@ public PCList() { name = ""; } + public void printPcList() { if (isFilter) { printAltPcList(); - } - else { + } else { if (this.size() > 0) { out.println("Here is the list of PC Builds:"); for (int i = 0; i < this.size(); i++) { out.println((i + 1) + "." + this.get(i)); } - } - else { + } else { out.println("List currently empty!"); } } } + public void printAltPcList() { int pcCount = 0; if (this.size() > 0) { @@ -51,24 +53,31 @@ public void printAltPcList() { out.println("List currently empty!"); } } + public static Boolean getIsFilter() { return isFilter; } + public static String getIsBuilt() { return built; } + public static String getName() { return name; } + public static String getCostFrom() { return costFrom; } + public static String getCostTo() { return costTo; } + public static void setFilterTrue() { isFilter = true; } + public static void setFilterFalse() { isFilter = false; } @@ -80,31 +89,33 @@ public static void setBuilt(String input) { public static void setName(String input) { name = input; } + public static void setCostFrom(String input) { costFrom = input; } + public static void setCostTo(String input) { costTo = input; } + public static Boolean filterByCost(PC pc, String costFrom, String costTo) { if (costFrom == "") { return true; } if (pc.getCost() >= Integer.parseInt(costFrom) && pc.getCost() <= Integer.parseInt(costTo)) { return true; - } - else { + } else { return false; } } + public static Boolean filterByName(PC pc, String name) { if (name == "") { return true; } if (pc.getName().toLowerCase().contains(name)) { return true; - } - else { + } else { return false; } } @@ -114,7 +125,7 @@ public static Boolean filterByBuilt(PC pc, String built) { return true; } Boolean isBuilt = null; - switch(built) { + switch (built) { case "complete": isBuilt = true; break; @@ -126,8 +137,7 @@ public static Boolean filterByBuilt(PC pc, String built) { } if (pc.isComplete() == isBuilt) { return true; - } - else { + } else { return false; } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 14d9da666a..04a3d43fdc 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -6,6 +6,7 @@ import java.io.PrintStream; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.Scanner; public abstract class UI { @@ -124,4 +125,13 @@ public static void setPCBuilderMode(int pcIndex) { uiState = UIState.PCBUILDER; pcBuilderMenu = new PCBuilderMenu(pcIndex); } + + public static String listToString(ArrayList list) { + StringBuilder sb = new StringBuilder(); + for (String s : list) { + sb.append(s); + sb.append(", "); + } + return sb.toString(); + } } diff --git a/src/main/resources/chassis.json b/src/main/resources/chassis.json index 7ea48e638f..b6c6b1e0a3 100644 --- a/src/main/resources/chassis.json +++ b/src/main/resources/chassis.json @@ -2,21 +2,21 @@ "Fractal Design Pop XL Air": { "brand": "Fractal Design", "price": 124.98, - "size": "atx" + "formfactor": "atx" }, "Corsair iCUE 4000X RGB": { "brand": "Corsair", "price": 144.99, - "size": "atx" + "formfactor": "atx" }, "Cooler Master MasterBox MB311L ARGB": { "brand": "Cooler Master", "price": 74.98, - "size": "micro" + "formfactor": "micro" }, "Silverstone SUGO 14": { "brand": "Silverstone", "price": 139.36, - "size": "mini" + "formfactor": "mini" } } diff --git a/src/main/resources/gpu.json b/src/main/resources/gpu.json index 590ca71cb5..fbb1f9d27d 100644 --- a/src/main/resources/gpu.json +++ b/src/main/resources/gpu.json @@ -3,24 +3,24 @@ "brand": "Gigabyte", "price": 309.99, "power": 115, - "size": "mini" + "formfactor": "mini" }, "MSI GeForce RTX 3060 Gaming X12G": { "brand": "MSI", "price": 379.99, "power": 170, - "size": "micro" + "formfactor": "micro" }, "Asus TUF GAMING OC RTX3070 Ti": { "brand": "Asus", "price": 786.99, "power": 290, - "size": "atx" + "formfactor": "atx" }, "MSI GAMING Z TRIO RTX3080": { "brand": "MSI", "price": 934.06, "power": 350, - "size": "atx" + "formfactor": "atx" } } diff --git a/src/main/resources/motherboard.json b/src/main/resources/motherboard.json index 4c072c2a67..d9b2886735 100644 --- a/src/main/resources/motherboard.json +++ b/src/main/resources/motherboard.json @@ -2,84 +2,84 @@ "Asus Prime Z590-P WiFi": { "price": 121.99, "brand": "Asus", - "size": "atx", + "formfactor": "atx", "socket": "LGA1200", "power": 45 }, "MSI MAG Z690 TOMAHAWK WIFI DDR4": { "price": 239.99, "brand": "MSI", - "size": "atx", + "formfactor": "atx", "socket": "LGA1700", "power": 47 }, "Asus TUF GAMING X570-PLUS (WI-FI)": { "price": 209.99, "brand": "Asus", - "size": "atx", + "formfactor": "atx", "socket": "AM4", "power": 48 }, "Gigabyte B650 AORUS ELITE AX": { "price": 219.99, "brand": "Gigabyte", - "size": "atx", + "formfactor": "atx", "socket": "AM5", "power": 42 }, "Asus TUF GAMING B560M-PLUS WIFI": { "price": 149.99, "brand": "Asus", - "size": "micro", + "formfactor": "micro", "socket": "LGA1200", "power": 45 }, "ASRock B760M Steel Legend WiFi": { "price": 139.99, "brand": "ASRock", - "size": "micro", + "formfactor": "micro", "socket": "LGA1700", "power": 46 }, "MSI B550M PRO-VDH WIFI": { "price": 119.99, "brand": "MSI", - "size": "micro", + "formfactor": "micro", "socket": "AM4", "power": 43 }, "Gigabyte B650M DS3H": { "price": 149.99, "brand": "Gigabyte", - "size": "micro", + "formfactor": "micro", "socket": "AM5", "power": 47 }, "MSI MPG B560I GAMING EDGE WIFI": { "price": 149.99, "brand": "MSI", - "size": "mini", + "formfactor": "mini", "socket": "LGA1200", "power": 46 }, "Asus ROG STRIX B760-I GAMING WIFI": { "price": 219.99, "brand": "Asus", - "size": "mini", + "formfactor": "mini", "socket": "LGA1700", "power": 42 }, "ASRock B550M-ITX/ac": { "price": 119.99, "brand": "ASRock", - "size": "mini", + "formfactor": "mini", "socket": "AM4", "power": 45 }, "Gigabyte B650I AORUS ULTRA": { "price": 159.99, "brand": "Gigabyte", - "size": "mini", + "formfactor": "mini", "socket": "AM5", "power": 49 } diff --git a/src/main/resources/prebuilt.json b/src/main/resources/prebuilt.json index 17b8089aae..cacbc666f8 100644 --- a/src/main/resources/prebuilt.json +++ b/src/main/resources/prebuilt.json @@ -23,13 +23,13 @@ }, "gpu": { "power": 115.0, - "size": "mini", + "formfactor": "mini", "name": "Gigabyte GAMING OC RTX3050", "brand": "Gigabyte", "price": 309.99 }, "motherboard": { - "size": "atx", + "formfactor": "atx", "socket": "LGA1200", "power": 45.0, "name": "Asus Prime Z590-P WiFi", @@ -38,12 +38,12 @@ }, "ram": { "memory": 8, - "sticks": 2, - "speed": 3200, - "power": 5.0, - "name": "Kingston FURY Beast 16 GB", - "brand": "Kingston", - "price": 43.98 + "sticks": 1, + "speed": 1600, + "power": 3.0, + "name": "G.Skill Ripjaws X 8 GB", + "brand": "G.Skill", + "price": 22.99 }, "storage": { "type": "M.2 SSD", @@ -55,14 +55,14 @@ }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", + "formfactor": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -73,47 +73,47 @@ "name": "intermediate", "isPrebuilt": true, "cpu": { - "cores": 4, - "threads": 4, - "baseClock": 3.6, - "boostClock": 4.0, - "power": 65.0, - "socket": "AM4", - "name": "AMD Ryzen 3 3200G", - "brand": "AMD", - "price": 97.5 + "cores": 8, + "threads": 16, + "baseClock": 3.8, + "boostClock": 5.1, + "power": 125.0, + "socket": "LGA1200", + "name": "Intel core i7-10700k", + "brand": "Intel", + "price": 269.95 }, "cpuCooler": { - "rpm": 2500, - "noise": 23.6, + "rpm": 1800, + "noise": 27.5, "power": 2.0, - "name": "Noctua NH-L9i", - "brand": "Noctua", - "price": 44.95 + "name": "NZXT T120 RGB", + "brand": "NZXT", + "price": 59.9 }, "gpu": { "power": 290.0, - "size": "atx", + "formfactor": "atx", "name": "Asus TUF GAMING OC RTX3070 Ti", "brand": "Asus", "price": 786.99 }, "motherboard": { - "size": "atx", - "socket": "AM4", - "power": 48.0, - "name": "Asus TUF GAMING X570-PLUS (WI-FI)", + "formfactor": "micro", + "socket": "LGA1200", + "power": 45.0, + "name": "Asus TUF GAMING B560M-PLUS WIFI", "brand": "Asus", - "price": 209.99 + "price": 149.99 }, "ram": { - "memory": 16, + "memory": 8, "sticks": 2, - "speed": 3600, - "power": 8.0, - "name": "Corsair Vengeance RGB Pro 32 GB", - "brand": "Corsair", - "price": 104.99 + "speed": 3200, + "power": 5.0, + "name": "Kingston FURY Beast 16 GB", + "brand": "Kingston", + "price": 43.98 }, "storage": { "type": "HDD", @@ -125,22 +125,22 @@ }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", - "name": "Fractal Design Pop XL Air", - "brand": "Fractal Design", - "price": 124.98 + "formfactor": "atx", + "name": "Corsair iCUE 4000X RGB", + "brand": "Corsair", + "price": 144.99 }, "budget": -1 }, { - "name": "advanced", + "name": "expert", "isPrebuilt": true, "cpu": { "cores": 16, @@ -163,13 +163,13 @@ }, "gpu": { "power": 350.0, - "size": "atx", + "formfactor": "atx", "name": "MSI GAMING Z TRIO RTX3080", "brand": "MSI", "price": 934.06 }, "motherboard": { - "size": "mini", + "formfactor": "mini", "socket": "AM5", "power": 49.0, "name": "Gigabyte B650I AORUS ULTRA", @@ -177,35 +177,35 @@ "price": 159.99 }, "ram": { - "memory": 32, + "memory": 16, "sticks": 2, - "speed": 3200, - "power": 10.0, - "name": "G.Skill Trident Z RGB 64 GB", - "brand": "G.Skill", - "price": 164.99 + "speed": 3600, + "power": 8.0, + "name": "Corsair Vengeance RGB Pro 32 GB", + "brand": "Corsair", + "price": 104.99 }, "storage": { "type": "M.2 SSD", - "size": 512, - "power": 4.5, - "name": "ADATA XPG SPECTRIX S40G RGB", - "brand": "ADATA", - "price": 54.99 + "size": 2048, + "power": 5.2, + "name": "Samsung 980 Pro", + "brand": "Samsung", + "price": 159.99 }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", - "name": "Fractal Design Pop XL Air", - "brand": "Fractal Design", - "price": 124.98 + "formfactor": "atx", + "name": "Corsair iCUE 4000X RGB", + "brand": "Corsair", + "price": 144.99 }, "budget": -1 } diff --git a/src/main/resources/psu.json b/src/main/resources/psu.json index 2b12d4ae6a..099c4b6b1f 100644 --- a/src/main/resources/psu.json +++ b/src/main/resources/psu.json @@ -2,7 +2,7 @@ "SeaSonic FOCUS PLUS 850 Gold": { "brand": "SeaSonic", "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850, "price": 159.94 } diff --git a/src/test/java/seedu/bigpp/parser/ParserTest.java b/src/test/java/seedu/bigpp/parser/ParserTest.java index f65d3eb471..35939154db 100644 --- a/src/test/java/seedu/bigpp/parser/ParserTest.java +++ b/src/test/java/seedu/bigpp/parser/ParserTest.java @@ -2,12 +2,12 @@ import org.junit.jupiter.api.Test; import seedu.bigpp.command.Command; -import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.buildercommand.BuilderEditBudgetCommand; import seedu.bigpp.command.buildercommand.BuilderEditNameCommand; import seedu.bigpp.command.buildercommand.BuilderInfoCommand; import seedu.bigpp.command.buildercommand.BuilderListComponentCommand; import seedu.bigpp.command.buildercommand.BuilderSelectCommand; +import seedu.bigpp.command.buildercommand.BuilderCustomCpuCommand; import seedu.bigpp.command.commoncommand.BackCommand; import seedu.bigpp.command.commoncommand.ByeCommand; import seedu.bigpp.command.viewercommand.ViewerAddCommand; diff --git a/src/test/resources/chassis.json b/src/test/resources/chassis.json index 7ea48e638f..b6c6b1e0a3 100644 --- a/src/test/resources/chassis.json +++ b/src/test/resources/chassis.json @@ -2,21 +2,21 @@ "Fractal Design Pop XL Air": { "brand": "Fractal Design", "price": 124.98, - "size": "atx" + "formfactor": "atx" }, "Corsair iCUE 4000X RGB": { "brand": "Corsair", "price": 144.99, - "size": "atx" + "formfactor": "atx" }, "Cooler Master MasterBox MB311L ARGB": { "brand": "Cooler Master", "price": 74.98, - "size": "micro" + "formfactor": "micro" }, "Silverstone SUGO 14": { "brand": "Silverstone", "price": 139.36, - "size": "mini" + "formfactor": "mini" } } diff --git a/src/test/resources/gpu.json b/src/test/resources/gpu.json index 590ca71cb5..fbb1f9d27d 100644 --- a/src/test/resources/gpu.json +++ b/src/test/resources/gpu.json @@ -3,24 +3,24 @@ "brand": "Gigabyte", "price": 309.99, "power": 115, - "size": "mini" + "formfactor": "mini" }, "MSI GeForce RTX 3060 Gaming X12G": { "brand": "MSI", "price": 379.99, "power": 170, - "size": "micro" + "formfactor": "micro" }, "Asus TUF GAMING OC RTX3070 Ti": { "brand": "Asus", "price": 786.99, "power": 290, - "size": "atx" + "formfactor": "atx" }, "MSI GAMING Z TRIO RTX3080": { "brand": "MSI", "price": 934.06, "power": 350, - "size": "atx" + "formfactor": "atx" } } diff --git a/src/test/resources/motherboard.json b/src/test/resources/motherboard.json index 4c072c2a67..d9b2886735 100644 --- a/src/test/resources/motherboard.json +++ b/src/test/resources/motherboard.json @@ -2,84 +2,84 @@ "Asus Prime Z590-P WiFi": { "price": 121.99, "brand": "Asus", - "size": "atx", + "formfactor": "atx", "socket": "LGA1200", "power": 45 }, "MSI MAG Z690 TOMAHAWK WIFI DDR4": { "price": 239.99, "brand": "MSI", - "size": "atx", + "formfactor": "atx", "socket": "LGA1700", "power": 47 }, "Asus TUF GAMING X570-PLUS (WI-FI)": { "price": 209.99, "brand": "Asus", - "size": "atx", + "formfactor": "atx", "socket": "AM4", "power": 48 }, "Gigabyte B650 AORUS ELITE AX": { "price": 219.99, "brand": "Gigabyte", - "size": "atx", + "formfactor": "atx", "socket": "AM5", "power": 42 }, "Asus TUF GAMING B560M-PLUS WIFI": { "price": 149.99, "brand": "Asus", - "size": "micro", + "formfactor": "micro", "socket": "LGA1200", "power": 45 }, "ASRock B760M Steel Legend WiFi": { "price": 139.99, "brand": "ASRock", - "size": "micro", + "formfactor": "micro", "socket": "LGA1700", "power": 46 }, "MSI B550M PRO-VDH WIFI": { "price": 119.99, "brand": "MSI", - "size": "micro", + "formfactor": "micro", "socket": "AM4", "power": 43 }, "Gigabyte B650M DS3H": { "price": 149.99, "brand": "Gigabyte", - "size": "micro", + "formfactor": "micro", "socket": "AM5", "power": 47 }, "MSI MPG B560I GAMING EDGE WIFI": { "price": 149.99, "brand": "MSI", - "size": "mini", + "formfactor": "mini", "socket": "LGA1200", "power": 46 }, "Asus ROG STRIX B760-I GAMING WIFI": { "price": 219.99, "brand": "Asus", - "size": "mini", + "formfactor": "mini", "socket": "LGA1700", "power": 42 }, "ASRock B550M-ITX/ac": { "price": 119.99, "brand": "ASRock", - "size": "mini", + "formfactor": "mini", "socket": "AM4", "power": 45 }, "Gigabyte B650I AORUS ULTRA": { "price": 159.99, "brand": "Gigabyte", - "size": "mini", + "formfactor": "mini", "socket": "AM5", "power": 49 } diff --git a/src/test/resources/prebuilt.json b/src/test/resources/prebuilt.json index 17b8089aae..cacbc666f8 100644 --- a/src/test/resources/prebuilt.json +++ b/src/test/resources/prebuilt.json @@ -23,13 +23,13 @@ }, "gpu": { "power": 115.0, - "size": "mini", + "formfactor": "mini", "name": "Gigabyte GAMING OC RTX3050", "brand": "Gigabyte", "price": 309.99 }, "motherboard": { - "size": "atx", + "formfactor": "atx", "socket": "LGA1200", "power": 45.0, "name": "Asus Prime Z590-P WiFi", @@ -38,12 +38,12 @@ }, "ram": { "memory": 8, - "sticks": 2, - "speed": 3200, - "power": 5.0, - "name": "Kingston FURY Beast 16 GB", - "brand": "Kingston", - "price": 43.98 + "sticks": 1, + "speed": 1600, + "power": 3.0, + "name": "G.Skill Ripjaws X 8 GB", + "brand": "G.Skill", + "price": 22.99 }, "storage": { "type": "M.2 SSD", @@ -55,14 +55,14 @@ }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", + "formfactor": "atx", "name": "Fractal Design Pop XL Air", "brand": "Fractal Design", "price": 124.98 @@ -73,47 +73,47 @@ "name": "intermediate", "isPrebuilt": true, "cpu": { - "cores": 4, - "threads": 4, - "baseClock": 3.6, - "boostClock": 4.0, - "power": 65.0, - "socket": "AM4", - "name": "AMD Ryzen 3 3200G", - "brand": "AMD", - "price": 97.5 + "cores": 8, + "threads": 16, + "baseClock": 3.8, + "boostClock": 5.1, + "power": 125.0, + "socket": "LGA1200", + "name": "Intel core i7-10700k", + "brand": "Intel", + "price": 269.95 }, "cpuCooler": { - "rpm": 2500, - "noise": 23.6, + "rpm": 1800, + "noise": 27.5, "power": 2.0, - "name": "Noctua NH-L9i", - "brand": "Noctua", - "price": 44.95 + "name": "NZXT T120 RGB", + "brand": "NZXT", + "price": 59.9 }, "gpu": { "power": 290.0, - "size": "atx", + "formfactor": "atx", "name": "Asus TUF GAMING OC RTX3070 Ti", "brand": "Asus", "price": 786.99 }, "motherboard": { - "size": "atx", - "socket": "AM4", - "power": 48.0, - "name": "Asus TUF GAMING X570-PLUS (WI-FI)", + "formfactor": "micro", + "socket": "LGA1200", + "power": 45.0, + "name": "Asus TUF GAMING B560M-PLUS WIFI", "brand": "Asus", - "price": 209.99 + "price": 149.99 }, "ram": { - "memory": 16, + "memory": 8, "sticks": 2, - "speed": 3600, - "power": 8.0, - "name": "Corsair Vengeance RGB Pro 32 GB", - "brand": "Corsair", - "price": 104.99 + "speed": 3200, + "power": 5.0, + "name": "Kingston FURY Beast 16 GB", + "brand": "Kingston", + "price": 43.98 }, "storage": { "type": "HDD", @@ -125,22 +125,22 @@ }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", - "name": "Fractal Design Pop XL Air", - "brand": "Fractal Design", - "price": 124.98 + "formfactor": "atx", + "name": "Corsair iCUE 4000X RGB", + "brand": "Corsair", + "price": 144.99 }, "budget": -1 }, { - "name": "advanced", + "name": "expert", "isPrebuilt": true, "cpu": { "cores": 16, @@ -163,13 +163,13 @@ }, "gpu": { "power": 350.0, - "size": "atx", + "formfactor": "atx", "name": "MSI GAMING Z TRIO RTX3080", "brand": "MSI", "price": 934.06 }, "motherboard": { - "size": "mini", + "formfactor": "mini", "socket": "AM5", "power": 49.0, "name": "Gigabyte B650I AORUS ULTRA", @@ -177,35 +177,35 @@ "price": 159.99 }, "ram": { - "memory": 32, + "memory": 16, "sticks": 2, - "speed": 3200, - "power": 10.0, - "name": "G.Skill Trident Z RGB 64 GB", - "brand": "G.Skill", - "price": 164.99 + "speed": 3600, + "power": 8.0, + "name": "Corsair Vengeance RGB Pro 32 GB", + "brand": "Corsair", + "price": 104.99 }, "storage": { "type": "M.2 SSD", - "size": 512, - "power": 4.5, - "name": "ADATA XPG SPECTRIX S40G RGB", - "brand": "ADATA", - "price": 54.99 + "size": 2048, + "power": 5.2, + "name": "Samsung 980 Pro", + "brand": "Samsung", + "price": 159.99 }, "psu": { "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850.0, "name": "SeaSonic FOCUS PLUS 850 Gold", "brand": "SeaSonic", "price": 159.94 }, "chassis": { - "size": "atx", - "name": "Fractal Design Pop XL Air", - "brand": "Fractal Design", - "price": 124.98 + "formfactor": "atx", + "name": "Corsair iCUE 4000X RGB", + "brand": "Corsair", + "price": 144.99 }, "budget": -1 } diff --git a/src/test/resources/psu.json b/src/test/resources/psu.json index 2b12d4ae6a..099c4b6b1f 100644 --- a/src/test/resources/psu.json +++ b/src/test/resources/psu.json @@ -2,7 +2,7 @@ "SeaSonic FOCUS PLUS 850 Gold": { "brand": "SeaSonic", "efficiency": "Gold", - "size": "atx", + "formfactor": "atx", "power": 850, "price": 159.94 } From 316846c41d447b97678345d84445b261a7d2c38d Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:25:33 +0800 Subject: [PATCH 243/420] Update EXPECTED.TXT --- text-ui-test/EXPECTED.TXT | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 8003fbfab4..453ca4f64a 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -27,18 +27,18 @@ Welcome to BigPP! =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete -3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete What would you like to do? ===================================================  =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete -3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete What would you like to do? =================================================== @@ -47,9 +47,9 @@ Custom PC: [ newpc1 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete -3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete 5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? @@ -59,9 +59,9 @@ Custom PC: [ newpc2 ] has been created =================================================== PC viewer Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $813.29/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1499.36/infinite - Complete -3.Prebuilt-PC: [advanced] - $2149.75/infinite - Complete +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete 4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete 5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete What would you like to do? From 1c7a6e6a66c920de3906e14343d24adabaf8a92f Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:13:06 +0800 Subject: [PATCH 244/420] Update UserGuide.md Bugs with filter command --- docs/UserGuide.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 43492f5d7e..f065bcff1e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -10,6 +10,7 @@ - [`view PC_INDEX`](#view-pc_index) - [`edit PC_INDEX`](#edit-pc_index) - [`delete PC_INDEX`](#delete-pc_index) + - [`filter FLAGS`](#filter-flags) - [`bye`](#bye) - [In PCBuilder Mode](#in-pcbuilder-mode) - [`list COMPONENT_TYPE`](#list-component_type) @@ -101,7 +102,7 @@ What would you like to do? #### `delete PC_INDEX` **Functionality:** Deletes the PC with index `PC_INDEX` -#### `filer -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` +#### `filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` **Functionality:** Filters the PC with the following flags `-name`, `-cost` and `-built` **Example:** filter the PC List by the name of intermediate, in the range of starting from 1000 to 3000 and is a complete built @@ -299,4 +300,4 @@ CPU added: Intel-new-cpu `Coming soon` -### Glossary \ No newline at end of file +### Glossary From 5c781fc92783bf5df22d143ec5899b295f38e557 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:23:24 +0800 Subject: [PATCH 245/420] Update UserGuide.md --- docs/UserGuide.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index f065bcff1e..3cde8a3c3b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -297,7 +297,12 @@ CPU added: Intel-new-cpu ## Additional Features ### Compatibility Check -`Coming soon` +BigPP will check if your components that you added are compatible with each other. + +If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you +If your total items have power that exceeds 80% of your power supply rated power, it will result in incompatibility errors. +if your the item you want to add exceeds your total budget, it will not allow you to add the component. +If your CPU has a different socket than your Motherboard or vice versa, it will not allow you to add it. ### Glossary From 416cb231559414901665ab01b7d299c52999cd42 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:23:46 +0800 Subject: [PATCH 246/420] Update UserGuide.md --- docs/UserGuide.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3cde8a3c3b..88eb5acab5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -299,9 +299,12 @@ CPU added: Intel-new-cpu ### Compatibility Check BigPP will check if your components that you added are compatible with each other. -If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you +If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you. + If your total items have power that exceeds 80% of your power supply rated power, it will result in incompatibility errors. + if your the item you want to add exceeds your total budget, it will not allow you to add the component. + If your CPU has a different socket than your Motherboard or vice versa, it will not allow you to add it. From e496b7a7765f3b27f8422161bf05ce8f2007ebc7 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Fri, 31 Mar 2023 14:38:58 +0800 Subject: [PATCH 247/420] Update UG --- docs/UserGuide.md | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 88eb5acab5..c934cb2bd5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -10,10 +10,9 @@ - [`view PC_INDEX`](#view-pc_index) - [`edit PC_INDEX`](#edit-pc_index) - [`delete PC_INDEX`](#delete-pc_index) - - [`filter FLAGS`](#filter-flags) - - [`bye`](#bye) + - [`filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) - [In PCBuilder Mode](#in-pcbuilder-mode) - - [`list COMPONENT_TYPE`](#list-component_type) + - [`list COMPONENT_TYPE [-name COMPONENT_NAME] [-brand COMPONENT-BRAND] [-price /from COMPONENT_START_PRICE /to COMPONENT_END_PRICE]`](#list-component_type--name-component_name--brand-component-brand--price-from-component_start_price-to-component_end_price) - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) - [`unselect COMPONENT_TYPE`](#unselect-component_type) - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) @@ -21,6 +20,7 @@ - [`name NEW_NAME`](#name-new_name) - [`custom COMPONENT_TYPE SPEC_1,SPEC_2, ...`](#custom-component_type-spec_1spec_2-) - [`back`](#back) + - [`bye`](#bye) - [Additional Features](#additional-features) - [Compatibility Check](#compatibility-check) - [Glossary](#glossary) @@ -119,12 +119,32 @@ What would you like to do? =================================================== Filter completed ``` -#### `bye` -**Functionality:** Exits the application ### In PCBuilder Mode -#### `list COMPONENT_TYPE` -**Functionality:** Lists all components of type `COMPONENT_TYPE` +#### `list COMPONENT_TYPE [-name COMPONENT_NAME] [-brand COMPONENT-BRAND] [-price /from COMPONENT_START_PRICE /to COMPONENT_END_PRICE]` +**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. + +**Example:** +``` +input: list cpu -name intel -price /from 1 /to 100 + +output: +Here are all available components of type 'cpu': +meeting the following criteria: +name: intel +price: 1 to 100 +1. +NAME: Intel core i3-10100 +BRAND: Intel +PRICE: 99.5 +CORES: 4 +THREADS: 8 +BASECLOCK: 3.6 +BOOSTCLOCK: 4.3 +POWER: 65.0 +SOCKET: LGA1200 +================ +``` #### `select COMPONENT_TYPE INDEX` **Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build @@ -294,6 +314,9 @@ CPU added: Intel-new-cpu #### `back` **Functionality:** Goes back to PCViewer menu +#### `bye` +**Functionality:** Exits the application + ## Additional Features ### Compatibility Check From da3070474776c6674be36d308b5abc9289a2b0c0 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Fri, 31 Mar 2023 14:52:52 +0800 Subject: [PATCH 248/420] Refactor table of contents --- docs/UserGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c934cb2bd5..bffc46623f 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -12,7 +12,7 @@ - [`delete PC_INDEX`](#delete-pc_index) - [`filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) - [In PCBuilder Mode](#in-pcbuilder-mode) - - [`list COMPONENT_TYPE [-name COMPONENT_NAME] [-brand COMPONENT-BRAND] [-price /from COMPONENT_START_PRICE /to COMPONENT_END_PRICE]`](#list-component_type--name-component_name--brand-component-brand--price-from-component_start_price-to-component_end_price) + - [`list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]`](#list-component_type--component_flag-flag) - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) - [`unselect COMPONENT_TYPE`](#unselect-component_type) - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) @@ -121,8 +121,8 @@ Filter completed ``` ### In PCBuilder Mode -#### `list COMPONENT_TYPE [-name COMPONENT_NAME] [-brand COMPONENT-BRAND] [-price /from COMPONENT_START_PRICE /to COMPONENT_END_PRICE]` -**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. +#### `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` +**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. **Example:** ``` From 8faf6bcaeb886aefd955e348903fec073a347a80 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 21:27:58 +0800 Subject: [PATCH 249/420] Add exception to account for interger overflow --- .../BuilderListComponentCommand.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 74846e9de2..3d31338141 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -446,6 +446,10 @@ private ComponentList handleNoiseFlag(String userInputString, ComponentList 4 || noiseTo.length() > 4) { + throw new PPException("Noise must be less than 10000"); + } + int noiseFromInt = Integer.parseInt(noiseFrom); int noiseToInt = Integer.parseInt(noiseTo); @@ -457,10 +461,6 @@ private ComponentList handleNoiseFlag(String userInputString, ComponentList 10000 || noiseToInt > 10000) { - throw new PPException("Noise must be less than 10000"); - } - componentList = ComponentList.filterByNoise(componentList, noiseFromInt, noiseToInt, componentIndexes); flagsArray.add("Noise: " + noiseFrom + " to " + noiseTo); @@ -508,6 +508,10 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList throw new PPException("Rpm end range must be an integer"); } + if (powerFrom.length() > 4 || powerTo.length() > 4) { + throw new PPException("Rpm must be less than 10000"); + } + int rpmFromInt = Integer.parseInt(powerFrom); int rpmToInt = Integer.parseInt(powerTo); @@ -519,10 +523,6 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList throw new PPException("Rpm must be a positive integer"); } - if (rpmFromInt > 100000 || rpmToInt > 100000) { - throw new PPException("Rpm must be less than 100000"); - } - componentList = ComponentList.filterByRpm(componentList, rpmFromInt, rpmToInt, componentIndexes); flagsArray.add("Rpm: " + powerFrom + " to " + powerTo); @@ -605,6 +605,10 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList 4 || powerTo.length() > 4) { + throw new PPException("Power must be less than 10000W"); + } + int powerFromInt = Integer.parseInt(powerFrom); int powerToInt = Integer.parseInt(powerTo); @@ -616,10 +620,6 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList 10000 || powerToInt > 10000) { - throw new PPException("Power must be less than 10000W"); - } - switch (componentType) { case CPU_TYPE: componentList = ComponentList.filterByPowerCpu(componentList, powerFromInt, powerToInt, componentIndexes); @@ -910,6 +910,10 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList 6 || priceTo.length() > 6) { + throw new PPException("Price must be smaller than 1000000"); + } + int priceFromInt = Integer.parseInt(priceFrom); int priceToInt = Integer.parseInt(priceTo); @@ -919,9 +923,7 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList 1000000 || priceToInt > 1000000) { - throw new PPException("Price must be smaller than 1000000"); - } + componentList = ComponentList.filterByPrice(componentList, priceFrom, priceTo, componentIndexes); flagsArray.add("price: " + priceFrom + " to " + priceTo); return componentList; From a8f0e19edd27a88c69100f080c77432af68ed53e Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 21:39:01 +0800 Subject: [PATCH 250/420] Add limit to integer size --- .../command/buildercommand/BuilderEditBudgetCommand.java | 4 ++++ .../bigpp/command/buildercommand/BuilderSelectCommand.java | 4 ++++ .../bigpp/command/viewercommand/ViewerDeleteCommand.java | 5 +++++ .../seedu/bigpp/command/viewercommand/ViewerEditCommand.java | 5 +++++ .../bigpp/command/viewercommand/ViewerFilterCommand.java | 5 +++++ .../seedu/bigpp/command/viewercommand/ViewerViewCommand.java | 4 ++++ 6 files changed, 27 insertions(+) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index c1291590e1..64e4fde7df 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -28,6 +28,10 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a budget that is an integer"); } + if (argument.length() > 6) { + throw new PPException("Integer too large, please enter a smaller budget"); + } + int budget = Integer.parseInt(super.getArguments()); if (budget <= 0 && budget != -1) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 69c8758981..617c1f786f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -50,6 +50,10 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } + if (indexString.length() > 3) { + throw new PPException("Integer too large, please enter a smaller index"); + } + int componentIndex = Integer.parseInt(indexString) - 1; // throw exception if index is out of bounds eg. "select cpu 100" diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 181dece363..70b97f9680 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -26,6 +26,11 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (argument.matches(".*\\D.*")) { throw new PPException("Please enter an integer"); } + + if (argument.length() > 3) { + throw new PPException("Integer too large, please enter a smaller index"); + } + int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 19ede7d07b..6a2c8928c2 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -28,8 +28,13 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } + if (argument.length() > 3) { + throw new PPException("Integer too large, please enter a smaller index"); + } + int pcIndex = Integer.parseInt(argument) - 1; + // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPException("Please enter a valid index"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 7adb1c16bc..fd6f2ca64d 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -97,6 +97,11 @@ private void handlePriceFlag(String userInputString, String[] flagAndDescription if (priceTo.matches(".*\\D.*")) { throw new PPException("End price must be a positive integer"); } + + if (priceFrom.length() > 6 || priceTo.length() > 6) { + throw new PPException("Price must be smaller than 1000000"); + } + int priceFromInt = Integer.parseInt(priceFrom); int priceToInt = Integer.parseInt(priceTo); if (priceFromInt > priceToInt) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index b46b1ec537..43a3bc0ca9 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -29,6 +29,10 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } + if (argument.length() > 3) { + throw new PPException("Integer too large, please enter a smaller index"); + } + int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { From 88a3e84968f4f9d8af0fa4fd437bc73d99fb6b16 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 22:01:02 +0800 Subject: [PATCH 251/420] handle integer overflow --- .../BuilderEditBudgetCommand.java | 14 +-- .../BuilderListComponentCommand.java | 118 ++++++++++++------ .../buildercommand/BuilderSelectCommand.java | 13 +- .../viewercommand/ViewerDeleteCommand.java | 9 +- .../viewercommand/ViewerEditCommand.java | 11 +- .../viewercommand/ViewerFilterCommand.java | 19 +-- .../viewercommand/ViewerViewCommand.java | 9 +- 7 files changed, 117 insertions(+), 76 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 64e4fde7df..fe222bab73 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -28,12 +28,13 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a budget that is an integer"); } - if (argument.length() > 6) { - throw new PPException("Integer too large, please enter a smaller budget"); - } - - int budget = Integer.parseInt(super.getArguments()); + int budget = 0; + try { + budget = Integer.parseInt(super.getArguments()); + } catch (NumberFormatException e) { + throw new PPException("Budget too large, please enter a smaller budget"); + } if (budget <= 0 && budget != -1) { throw new PPException("Please enter a budget that is greater than 0"); } @@ -43,8 +44,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (budget < currentCost) { throw new PPException( - "You have set a budget that is lower than the" + - "current cost of the build, please set a higher budget."); + "You have set a budget that is lower than the" + "current cost of the build, please set a higher budget."); } dataStorage.pcList.get(pcIndex).setBudget(budget); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 3d31338141..9a92a00443 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -252,8 +252,15 @@ private ComponentList handleSizeFlag(ComponentList componentList, ArrayLis throw new PPException("Please enter a valid size (512, 1024, 2048, 4096)"); } + int sizeInt = 0; + try { + sizeInt = Integer.parseInt(size); + } catch (NumberFormatException e) { + throw new PPException("Please enter a valid size (512, 1024, 2048, 4096)"); + } + flagsArray.add("Size: " + size + "GB"); - componentList = ComponentList.filterBySizeStorage(componentList, Integer.parseInt(size), componentIndexes); + componentList = ComponentList.filterBySizeStorage(componentList, sizeInt, componentIndexes); return componentList; } @@ -306,7 +313,12 @@ private ComponentList handleSpeedFlag(String userInputString, ComponentList handleSticksFlag(String userInputString, ComponentList< throw new PPException("Flag detected in sticks description"); } - int sticks = Integer.parseInt(sticksDescriptionArray[0]); + int sticks = 0; + try { + sticks = Integer.parseInt(sticksDescriptionArray[0]); + } catch (NumberFormatException e) { + throw new PPException("Please enter a valid sticks description (1 or 2))"); + } if (sticks != 1 && sticks != 2) { throw new PPException("Please enter a valid sticks description (1 or 2))"); } @@ -366,7 +383,12 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< throw new PPException("Flag detected in memory description"); } - int memory = Integer.parseInt(memoryDescriptionArray[0]); + int memory = 0; + try { + memory = Integer.parseInt(memoryDescriptionArray[0]); + } catch (NumberFormatException e) { + throw new PPException("Please enter a valid memory description (8, 16 or 32)"); + } if (memory != 8 && memory != 16 && memory != 32) { throw new PPException("Please enter a valid memory description (8, 16 or 32)"); } @@ -446,13 +468,15 @@ private ComponentList handleNoiseFlag(String userInputString, ComponentList 4 || noiseTo.length() > 4) { - throw new PPException("Noise must be less than 10000"); - } - - int noiseFromInt = Integer.parseInt(noiseFrom); - int noiseToInt = Integer.parseInt(noiseTo); + int noiseFromInt = 0; + int noiseToInt = 0; + try { + noiseFromInt = Integer.parseInt(noiseFrom); + noiseToInt = Integer.parseInt(noiseTo); + } catch (NumberFormatException e) { + throw new PPException("Noise too large, please enter a smaller number"); + } if (noiseFromInt > noiseToInt) { throw new PPException("Noise start range must be smaller than noise end range"); } @@ -508,12 +532,15 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList throw new PPException("Rpm end range must be an integer"); } - if (powerFrom.length() > 4 || powerTo.length() > 4) { - throw new PPException("Rpm must be less than 10000"); - } + int rpmFromInt = 0; + int rpmToInt = 0; - int rpmFromInt = Integer.parseInt(powerFrom); - int rpmToInt = Integer.parseInt(powerTo); + try { + rpmFromInt = Integer.parseInt(powerFrom); + rpmToInt = Integer.parseInt(powerTo); + } catch (NumberFormatException e) { + throw new PPException("Rpm too large, please enter a smaller number"); + } if (rpmFromInt > rpmToInt) { throw new PPException("Rpm start range must be smaller than power end range"); @@ -605,13 +632,17 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList 4 || powerTo.length() > 4) { - throw new PPException("Power must be less than 10000W"); - } + int powerFromInt = 0; + int powerToInt = 0; + try { + powerFromInt = Integer.parseInt(powerFrom); + powerToInt = Integer.parseInt(powerTo); - int powerFromInt = Integer.parseInt(powerFrom); - int powerToInt = Integer.parseInt(powerTo); + } catch (NumberFormatException e) { + throw new PPException("Power too large, please enter a smaller number"); + } + // if (powerFromInt > powerToInt if (powerFromInt > powerToInt) { throw new PPException("Power start range must be smaller than power end range"); } @@ -817,7 +848,12 @@ private ComponentList handleThreadFlag(ComponentList componentList, ArrayL if (thread.matches(".*\\D.*")) { throw new PPException("Please enter an integer for thread number"); } - int threadInt = Integer.parseInt(thread); + int threadInt = 0; + try { + threadInt = Integer.parseInt(thread); + } catch (NumberFormatException e) { + throw new PPException("Thread too large, please enter a smaller thread number"); + } flagsArray.add("Thread: " + thread); componentList = ComponentList.filterByThread(componentList, threadInt, componentIndexes); @@ -846,8 +882,12 @@ private ComponentList handleCoreFlag(ComponentList componentList, ArrayLis if (core.matches(".*\\D.*")) { throw new PPException("Please enter an integer for core number"); } - - int coreInt = Integer.parseInt(core); + int coreInt = 0; + try { + coreInt = Integer.parseInt(core); + } catch (NumberFormatException e) { + throw new PPException("Core too large, please enter a smaller core number"); + } componentList = ComponentList.filterByCore(componentList, coreInt, componentIndexes); return componentList; } @@ -883,14 +923,12 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList handlePriceFlag(String userInputString, ComponentList 6 || priceTo.length() > 6) { - throw new PPException("Price must be smaller than 1000000"); + int priceFromInt = 0; + int priceToInt = 0; + try { + priceFromInt = Integer.parseInt(priceFrom); + priceToInt = Integer.parseInt(priceTo); + } catch (NumberFormatException e) { + throw new PPException("Price must be a positive integer"); } - - int priceFromInt = Integer.parseInt(priceFrom); - int priceToInt = Integer.parseInt(priceTo); - if (priceFromInt > priceToInt) { throw new PPException("Start price must be less than end price"); } @@ -960,13 +999,12 @@ private ComponentList handleNameFlag(ComponentList componentList, ArrayLis } private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals(CORE_FLAG) - || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag.equals(SIZE_FLAG) - || flag.equals(BOOST_CLOCK_FLAG) || flag.equals(POWER_FLAG) - || flag.equals(SOCKET_FLAG) || flag.equals(RPM_FLAG) || flag.equals(NOISE_FLAG) - || flag.equals(MEMORY_FLAG) || flag.equals(STICKS_FLAG) || flag.equals(SPEED_FLAG) - || flag.equals(TYPE_FLAG) || flag.equals(FORM_FACTOR_FLAG) - || flag.equals(EFFICIENCY_FLAG); + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals( + CORE_FLAG) || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag.equals(SIZE_FLAG) || flag + .equals(BOOST_CLOCK_FLAG) || flag.equals(POWER_FLAG) || flag.equals(SOCKET_FLAG) || flag.equals( + RPM_FLAG) || flag.equals(NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals( + STICKS_FLAG) || flag.equals(SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag + .equals(FORM_FACTOR_FLAG) || flag.equals(EFFICIENCY_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 617c1f786f..3795479690 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -50,15 +50,14 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } - if (indexString.length() > 3) { - throw new PPException("Integer too large, please enter a smaller index"); + int componentIndex = 0; + try { + componentIndex = Integer.parseInt(indexString) - 1; + } catch (NumberFormatException e) { + throw new PPException("Index too large, please enter a smaller index"); } - - int componentIndex = Integer.parseInt(indexString) - 1; - // throw exception if index is out of bounds eg. "select cpu 100" - if (componentIndex < 0 - || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { + if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { throw new PPException("Please enter a valid index"); } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 70b97f9680..3b193b3c2a 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -27,11 +27,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } - if (argument.length() > 3) { - throw new PPException("Integer too large, please enter a smaller index"); + int pcIndex = 0; + try { + pcIndex = Integer.parseInt(argument) - 1; + } catch (NumberFormatException e) { + throw new PPException("Index too large, please enter a smaller index"); } - - int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPException("Please enter a valid index"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 6a2c8928c2..98e9cfb34b 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -28,13 +28,14 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } - if (argument.length() > 3) { - throw new PPException("Integer too large, please enter a smaller index"); + int pcIndex = 0; + + try { + pcIndex = Integer.parseInt(argument) - 1; + } catch (NumberFormatException e) { + throw new PPException("Please enter an integer"); } - int pcIndex = Integer.parseInt(argument) - 1; - - // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPException("Please enter a valid index"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index fd6f2ca64d..8963c205cd 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -72,14 +72,12 @@ private void handlePriceFlag(String userInputString, String[] flagAndDescription String flagPriceDescription = userInputString.split(PRICE_FLAG)[1].trim(); if (flagPriceDescription.split("\\s+").length < 4) { throw new PPException( - "Please enter the full price description after the flag containing the start " + - "and end price range"); + "Please enter the full price description after the flag containing the start " + "and end price range"); } String[] flagPriceDescriptionArray = Arrays.copyOfRange(flagPriceDescription.split("\\s+"), 0, 4); if (hasFlag(flagPriceDescriptionArray)) { throw new PPException( - "Flag detected in price description. Please enter a different price" + - " description after the flag"); + "Flag detected in price description. Please enter a different price" + " description after the flag"); } String fromFlag = flagPriceDescriptionArray[0].trim(); if (!fromFlag.equals("/from")) { @@ -98,12 +96,15 @@ private void handlePriceFlag(String userInputString, String[] flagAndDescription throw new PPException("End price must be a positive integer"); } - if (priceFrom.length() > 6 || priceTo.length() > 6) { - throw new PPException("Price must be smaller than 1000000"); + int priceFromInt = 0; + int priceToInt = 0; + + try { + priceFromInt = Integer.parseInt(priceFrom); + priceToInt = Integer.parseInt(priceTo); + } catch (NumberFormatException e) { + throw new PPException("Price too large, please enter a smaller number"); } - - int priceFromInt = Integer.parseInt(priceFrom); - int priceToInt = Integer.parseInt(priceTo); if (priceFromInt > priceToInt) { throw new PPException("Start price must be less than end price"); } diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 43a3bc0ca9..9f652a60ad 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -29,11 +29,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter an integer"); } - if (argument.length() > 3) { - throw new PPException("Integer too large, please enter a smaller index"); + int pcIndex = 0; + try { + pcIndex = Integer.parseInt(argument) - 1; + } catch (NumberFormatException e) { + throw new PPException("Index too large, please enter a smaller index"); } - - int pcIndex = Integer.parseInt(argument) - 1; // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { throw new PPException("Please enter a valid index"); From a90d551402267746d0f7f342d85a63a3fd66f2fc Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 22:24:09 +0800 Subject: [PATCH 252/420] Protect from integer overflow --- .../buildercommand/BuilderCustomChassisCommand.java | 2 +- .../buildercommand/BuilderCustomCpuCommand.java | 4 ++-- .../BuilderCustomCpuCoolerCommand.java | 2 +- .../buildercommand/BuilderCustomGpuCommand.java | 2 +- .../BuilderCustomMotherboardCommand.java | 2 +- .../buildercommand/BuilderCustomPsuCommand.java | 2 +- .../buildercommand/BuilderCustomRamCommand.java | 2 +- .../buildercommand/BuilderCustomStorageCommand.java | 2 +- .../buildercommand/BuilderEditBudgetCommand.java | 6 +++--- .../buildercommand/BuilderListComponentCommand.java | 12 ++++++------ .../command/buildercommand/BuilderSelectCommand.java | 4 ++-- .../comparecommand/BuilderCompareChassisCommand.java | 2 +- .../comparecommand/BuilderCompareCpuCommand.java | 2 +- .../BuilderCompareCpuCoolerCommand.java | 2 +- .../comparecommand/BuilderCompareGpuCommand.java | 2 +- .../BuilderCompareMotherboardCommand.java | 2 +- .../comparecommand/BuilderComparePsuCommand.java | 2 +- .../comparecommand/BuilderCompareRamCommand.java | 2 +- .../comparecommand/BuilderCompareStorageCommand.java | 2 +- .../command/viewercommand/ViewerDeleteCommand.java | 4 ++-- .../command/viewercommand/ViewerEditCommand.java | 6 +++--- .../command/viewercommand/ViewerFilterCommand.java | 4 ++-- .../command/viewercommand/ViewerViewCommand.java | 2 +- 23 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java index 4d038ddd54..34196fa811 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java @@ -29,7 +29,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price should be a float"); + "Please enter a float within 32 bits"); } String formfactor = argumentList[3].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 626ebb7ac4..af644ac9bf 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -34,12 +34,12 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St // Check if all the values are positive if (price < 0 || cores < 0 || threads < 0 || baseClock < 0 || boostClock < 0 || power < 0) { - throw new PPException("price, baseClock, boostClock, power, cores and threads should be positive"); + throw new PPException("Pleae enter integers and floats within 16 and 32 bits respectively"); } } catch (NumberFormatException e) { throw new PPException( - "price, baseClock, boostClock and power should be a float, cores and threads should be an integer"); + "Pleae enter integers and floats within 16 and 32 bits respectively"); } String socket = argumentList[8].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java index 0ee6267399..5ef7278765 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCoolerCommand.java @@ -35,7 +35,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price, power and noise should be floats, rpm should be an int"); + "Please enter integers and floats within 16 and 32 bits respectively"); } CPUCooler cpuCooler = new CPUCooler(name, brand, price, rpm, noise, power); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java index 35c3d7a03e..9865a88bbd 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java @@ -31,7 +31,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price and power should be floats"); + "Please enter a floats within 32 bits"); } String formfactor = argumentList[4].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index 1e5c2dfa1b..b1abb9b609 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -31,7 +31,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price and power should be floats"); + "Please enter floats within 32 bits"); } String formfactor = argumentList[3].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java index 962ff4ed74..5d661b33ea 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java @@ -31,7 +31,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price and power should be floats"); + "Please enter floats within 32 bits"); } String efficiency = argumentList[2].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java index 5ba2883e08..d30d056bea 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java @@ -37,7 +37,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price and power should be floats, memory sticks and speed should be integers"); + "Please enter integers and floats within 16 and 32 bits respectively"); } RAM ram = new RAM(name, brand, price, memory, sticks, speed, power); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java index de3b4dc7ac..a6e25d5439 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -33,7 +33,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } catch (NumberFormatException e) { throw new PPException( - "price and power should be floats, size should be an integer"); + "Please enter integers and floats within 16 and 32 bits respectively"); } String type = argumentList[1].trim(); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index fe222bab73..23b9a55c86 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -33,7 +33,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { try { budget = Integer.parseInt(super.getArguments()); } catch (NumberFormatException e) { - throw new PPException("Budget too large, please enter a smaller budget"); + throw new PPException("Please enter a postive integer within 16 bits"); } if (budget <= 0 && budget != -1) { throw new PPException("Please enter a budget that is greater than 0"); @@ -42,9 +42,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { int pcIndex = UI.pcBuilderMenu.getPCIndex(); float currentCost = dataStorage.pcList.get(pcIndex).getCost(); - if (budget < currentCost) { + if (budget != -1 && budget < currentCost) { throw new PPException( - "You have set a budget that is lower than the" + "current cost of the build, please set a higher budget."); + "You have set a budget that is lower than the" + " current cost of the build, please set a higher budget."); } dataStorage.pcList.get(pcIndex).setBudget(budget); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 9a92a00443..a18c92dce8 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -475,7 +475,7 @@ private ComponentList handleNoiseFlag(String userInputString, ComponentList noiseToInt) { throw new PPException("Noise start range must be smaller than noise end range"); @@ -539,7 +539,7 @@ private ComponentList handleRpmFlag(String userInputString, ComponentList rpmFromInt = Integer.parseInt(powerFrom); rpmToInt = Integer.parseInt(powerTo); } catch (NumberFormatException e) { - throw new PPException("Rpm too large, please enter a smaller number"); + throw new PPException("Please enter a postive integer within 16 bits"); } if (rpmFromInt > rpmToInt) { @@ -639,7 +639,7 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList powerToInt @@ -852,7 +852,7 @@ private ComponentList handleThreadFlag(ComponentList componentList, ArrayL try { threadInt = Integer.parseInt(thread); } catch (NumberFormatException e) { - throw new PPException("Thread too large, please enter a smaller thread number"); + throw new PPException("Please enter a postive integer within 16 bits"); } flagsArray.add("Thread: " + thread); @@ -886,7 +886,7 @@ private ComponentList handleCoreFlag(ComponentList componentList, ArrayLis try { coreInt = Integer.parseInt(core); } catch (NumberFormatException e) { - throw new PPException("Core too large, please enter a smaller core number"); + throw new PPException("Please enter a postive integer within 16 bits"); } componentList = ComponentList.filterByCore(componentList, coreInt, componentIndexes); return componentList; @@ -954,7 +954,7 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList priceToInt) { throw new PPException("Start price must be less than end price"); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java index 3795479690..16aa733e5f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderSelectCommand.java @@ -47,14 +47,14 @@ public String executeCommand(DataStorage dataStorage) throws PPException { // throw exception if index is not a number eg. "select cpu a" if (indexString.matches(".*\\D.*")) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer"); } int componentIndex = 0; try { componentIndex = Integer.parseInt(indexString) - 1; } catch (NumberFormatException e) { - throw new PPException("Index too large, please enter a smaller index"); + throw new PPException("Please enter a postive integer within 16 bits"); } // throw exception if index is out of bounds eg. "select cpu 100" if (componentIndex < 0 || componentIndex >= dataStorage.stringToComponentListMap.get(inputArray[0]).size()) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java index 3899613486..5b289df291 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareChassisCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a postive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java index f4659eb33a..6754a9f53a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCommand.java @@ -38,7 +38,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java index e64609ef4b..ff4757a4c9 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareCpuCoolerCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java index 702c322c2b..f41fe71a68 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareGpuCommand.java @@ -36,7 +36,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java index 7810beda84..134a202f26 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareMotherboardCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java index a70537f7de..b6a98eb45b 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderComparePsuCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java index b402ba132d..4ac35a7167 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareRamCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a postive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java index 5c276d0327..0776363a4f 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/comparecommand/BuilderCompareStorageCommand.java @@ -37,7 +37,7 @@ public String executeCommand(DataStorage dataStorage) firstComponentIndex = Integer.parseInt(firstComponent) - 1; secondComponentIndex = Integer.parseInt(secondComponent) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a postive integer within 16 bits"); } // check if index is out of bounds diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java index 3b193b3c2a..8f667bc51d 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerDeleteCommand.java @@ -24,14 +24,14 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please input an index"); } if (argument.matches(".*\\D.*")) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer"); } int pcIndex = 0; try { pcIndex = Integer.parseInt(argument) - 1; } catch (NumberFormatException e) { - throw new PPException("Index too large, please enter a smaller index"); + throw new PPException("Please enter a postive integer within 16 bits"); } // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java index 98e9cfb34b..0442c58724 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerEditCommand.java @@ -25,15 +25,15 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } if (argument.matches(".*\\D.*")) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a positive integer"); } int pcIndex = 0; - + try { pcIndex = Integer.parseInt(argument) - 1; } catch (NumberFormatException e) { - throw new PPException("Please enter an integer"); + throw new PPException("Please enter a postive integer within 16 bits"); } // throw exception if index selected is out of the PCList range diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 8963c205cd..0777026527 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -98,12 +98,12 @@ private void handlePriceFlag(String userInputString, String[] flagAndDescription int priceFromInt = 0; int priceToInt = 0; - + try { priceFromInt = Integer.parseInt(priceFrom); priceToInt = Integer.parseInt(priceTo); } catch (NumberFormatException e) { - throw new PPException("Price too large, please enter a smaller number"); + throw new PPException("Please enter a postive integer within 16 bits"); } if (priceFromInt > priceToInt) { throw new PPException("Start price must be less than end price"); diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java index 9f652a60ad..73a98eb07b 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerViewCommand.java @@ -33,7 +33,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { try { pcIndex = Integer.parseInt(argument) - 1; } catch (NumberFormatException e) { - throw new PPException("Index too large, please enter a smaller index"); + throw new PPException("Please enter a postive integer within 16 bits"); } // throw exception if index selected is out of the PCList range if (pcIndex < 0 || pcIndex >= dataStorage.pcList.size()) { From faa6b7b2194f0b0ef1837d1e1729bd02f0761876 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 22:32:06 +0800 Subject: [PATCH 253/420] Fix grammer errors --- .../buildercommand/BuilderListComponentCommand.java | 8 ++++---- src/main/java/seedu/bigpp/parser/Parser.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index a18c92dce8..98f877dcef 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -410,17 +410,17 @@ private ComponentList handleFormFactorFlagMotherboard(String userInputString, String formFactorDescription = userInputString.split(FORM_FACTOR_FLAG)[1].trim().toLowerCase(); if (formFactorDescription.split("\\s+").length < 1) { - throw new PPException("Please enter a full form factor description"); + throw new PPException("Please enter a full formfactor description"); } String[] formFactorDescriptionArray = Arrays.copyOfRange(formFactorDescription.split(" "), 0, 1); if (hasFlag(formFactorDescriptionArray)) { - throw new PPException("Flag detected in form factor description. Please enter a valid form factor"); + throw new PPException("Flag detected in formfactor description. Please enter a valid form factor"); } String formFactor = formFactorDescriptionArray[0]; if (!formFactor.equals("atx") && !formFactor.equals("micro") && !formFactor.equals("mini")) { - throw new PPException("Please enter a valid form factor (ATX, Micro or Mini)"); + throw new PPException("Please enter a valid formfactor (ATX, Micro or Mini)"); } flagsArray.add("Form Factor: " + formFactor); @@ -906,7 +906,7 @@ private ComponentList handleFormFactorFlagChassis(ComponentList componentL } if (!formFactor.equals("micro") && !formFactor.equals("mini") && !formFactor.equals("atx")) { - throw new PPException("Please enter a valid size (micro, mini or atx)"); + throw new PPException("Please enter a valid formfactor (micro, mini or atx)"); } flagsArray.add("size: " + formFactor); componentList = ComponentList.filterByFormFactorChassis(componentList, formFactor, componentIndexes); diff --git a/src/main/java/seedu/bigpp/parser/Parser.java b/src/main/java/seedu/bigpp/parser/Parser.java index 3e5c71d0d6..754da00ed5 100644 --- a/src/main/java/seedu/bigpp/parser/Parser.java +++ b/src/main/java/seedu/bigpp/parser/Parser.java @@ -178,7 +178,7 @@ private Command parseCustomCommand(String arguments) { return new BuilderCustomCpuCoolerCommand(attributes); default: return new UnrecognizedCommand( - "Invalid component type!, valid types are " + "Invalid component type! Valid types are " + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } @@ -210,7 +210,7 @@ private Command parseCompareCommand(String arguments) { return new BuilderCompareCpuCoolerCommand(attributes); default: return new UnrecognizedCommand( - "Invalid component type!, valid types are " + "Invalid component type! Valid types are " + "(cpu,gpu,ram,storage,psu,motherboard,cpu-cooler,chassis)"); } } From a8da41ece8b4d85ca77da8dd07fb5c039fecfaf0 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 1 Apr 2023 22:54:09 +0800 Subject: [PATCH 254/420] Fix checkstyle --- .../BuilderEditBudgetCommand.java | 3 ++- .../BuilderListComponentCommand.java | 21 ++++++++++++------- .../viewercommand/ViewerFilterCommand.java | 6 ++++-- .../BuilderSelectCommandTest.java | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java index 23b9a55c86..d53fbc766a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderEditBudgetCommand.java @@ -44,7 +44,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (budget != -1 && budget < currentCost) { throw new PPException( - "You have set a budget that is lower than the" + " current cost of the build, please set a higher budget."); + "You have set a budget that is lower than the" + + " current cost of the build, please set a higher budget."); } dataStorage.pcList.get(pcIndex).setBudget(budget); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 98f877dcef..abbf9432dd 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -923,12 +923,14 @@ private ComponentList handlePriceFlag(String userInputString, ComponentList handleNameFlag(ComponentList componentList, ArrayLis private static boolean isFlag(String flag) { return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BRAND_FLAG) || flag.equals( - CORE_FLAG) || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag.equals(SIZE_FLAG) || flag - .equals(BOOST_CLOCK_FLAG) || flag.equals(POWER_FLAG) || flag.equals(SOCKET_FLAG) || flag.equals( - RPM_FLAG) || flag.equals(NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals( - STICKS_FLAG) || flag.equals(SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag - .equals(FORM_FACTOR_FLAG) || flag.equals(EFFICIENCY_FLAG); + CORE_FLAG) || flag.equals(THREAD_FLAG) || flag.equals(BASE_CLOCK_FLAG) || flag.equals(SIZE_FLAG) + || flag + .equals(BOOST_CLOCK_FLAG) + || flag.equals(POWER_FLAG) || flag.equals(SOCKET_FLAG) || flag.equals( + RPM_FLAG) + || flag.equals(NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals( + STICKS_FLAG) + || flag.equals(SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag + .equals(FORM_FACTOR_FLAG) + || flag.equals(EFFICIENCY_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 0777026527..16188594a1 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -72,12 +72,14 @@ private void handlePriceFlag(String userInputString, String[] flagAndDescription String flagPriceDescription = userInputString.split(PRICE_FLAG)[1].trim(); if (flagPriceDescription.split("\\s+").length < 4) { throw new PPException( - "Please enter the full price description after the flag containing the start " + "and end price range"); + "Please enter the full price description after the flag containing the start " + + "and end price range"); } String[] flagPriceDescriptionArray = Arrays.copyOfRange(flagPriceDescription.split("\\s+"), 0, 4); if (hasFlag(flagPriceDescriptionArray)) { throw new PPException( - "Flag detected in price description. Please enter a different price" + " description after the flag"); + "Flag detected in price description. Please enter a different price" + + " description after the flag"); } String fromFlag = flagPriceDescriptionArray[0].trim(); if (!fromFlag.equals("/from")) { diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java index 3955bc32c1..e8dedfceca 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderSelectCommandTest.java @@ -73,7 +73,7 @@ public void executeCommand_invalidTypeForIndexOfComponent_exceptionThrown() { Exception exception = assertThrows(PPException.class, () -> new BuilderSelectCommand("cpu a") .executeCommand( dataStorage)); - assertEquals("Please enter an integer", + assertEquals("Please enter a positive integer", exception.getMessage()); } From e73566f87358473432deeb6c257dc9ab8defd64e Mon Sep 17 00:00:00 2001 From: HackMD <37423+hackmd-hub[bot]@users.noreply.github.com> Date: Sat, 1 Apr 2023 15:12:46 +0000 Subject: [PATCH 255/420] Magmanat initial branch commit --- docs/UserGuide.md | 192 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 152 insertions(+), 40 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index bffc46623f..2c072c4fb0 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -10,7 +10,7 @@ - [`view PC_INDEX`](#view-pc_index) - [`edit PC_INDEX`](#edit-pc_index) - [`delete PC_INDEX`](#delete-pc_index) - - [`filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) + - [`filter -name PC_NAME -price /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) - [In PCBuilder Mode](#in-pcbuilder-mode) - [`list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]`](#list-component_type--component_flag-flag) - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) @@ -20,7 +20,6 @@ - [`name NEW_NAME`](#name-new_name) - [`custom COMPONENT_TYPE SPEC_1,SPEC_2, ...`](#custom-component_type-spec_1spec_2-) - [`back`](#back) - - [`bye`](#bye) - [Additional Features](#additional-features) - [Compatibility Check](#compatibility-check) - [Glossary](#glossary) @@ -86,28 +85,128 @@ What would you like to do? =================================================== ``` +If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. -### In PCViewer Mode -#### `add PC_NAME` -**Functionality:** Adds a PC with the name `PC_NAME` to your PC list +For reference, + - PCViewer looks like this: +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +What would you like to do? +=================================================== +``` + - PCBuilder looks like this +``` +=================================================== +PC builder +Custom-PC: [expert (copy)] - $2339.74/infinite - Complete +Components: +CPU : AMD Ryzen 9 7950X +CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: Gigabyte B650I AORUS ULTRA +RAM : Corsair Vengeance RGB Pro 32 GB +Storage : Samsung 980 Pro +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Corsair iCUE 4000X RGB + +What would you like to do? +=================================================== +``` +--- +### Common Commands +Common commands will be the commands that the user will be able to use in both the modes + +#### **Bye command** +Usage: `bye` +Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application + +**IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! -#### `view PC_INDEX` -**Functionality:** Views the PC with index `PC_INDEX` +#### **Help command** +Usage: `help` +Functionality: Displays the valid commands in the respective modes +Example: + - Entering the help command in the PCViewer mode will show the following output: +``` +Here are the list of valid commands: +Add - Add a new PC of a given name +Delete - Delete the PC of a given index +Edit - Edit the PC of a given index +View - Display all the components of the PC of a given index +``` -#### `edit PC_INDEX` -**Functionality:** Enters PCBuilder mode for the PC with index `PC_INDEX` + - Entering the help command in the PCBuilder mode will show the following output: +``` +Here are the list of valid commands: +list - List all components of a certain type +name - Change the name of the PC currently being edited to +budget - Change the budget of the PC currently being edited to +select - Add the component of type with index to the PC currently being edited +info - View all the specifications of the component of type currently selected for the build +unselect - Remove the component of type from the PC currently beingedited +custom - Creates a custom component of type with all the and adds it to the list of components of that type +compare & Compares all the specifications between the components oftype with indices and +``` +Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands -#### `delete PC_INDEX` -**Functionality:** Deletes the PC with index `PC_INDEX` +--- +### PCViewer Mode Commands +PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode -#### `filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` -**Functionality:** Filters the PC with the following flags `-name`, `-cost` and `-built` +#### **Add command** +Usage: `add PC_NAME` +Functionality: Adds a PC with the name `PC_NAME` to your PC list +Example: +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +What would you like to do? +=================================================== +Custom PC: [ NEWPC ] has been created +``` +Notes: newly added PCs will always begin with infinite budget + +#### View command +Usage: `view PC_INDEX` +Functionality: Views the PC with index `PC_INDEX` +Example: + +#### Edit command +Usage: `edit PC_INDEX` +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. If the PC that the user has selected to edit is a **prebuilt PC**, the application would create a copy of it and mark it as a **custom PC**. This is we provide the prebuilts as a reference for the user. + +#### Delete command +Usage: `delete PC_INDEX` +Functionality: Deletes the PC with index `PC_INDEX` + +#### Filter command +Usage: `filter FLAGS` -**Example:** filter the PC List by the name of intermediate, in the range of starting from 1000 to 3000 and is a complete built +Available flags: + - `-name PC_NAME` + - `-price /from PC_START_COST /to PC_END_COST` + - `-built PC_ISCOMPLETE` + - `-clear` + +Functionality: + - Filter u `-name PC_NAME` to filter the PC List by the given name + +Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build ``` -input: filter -cost /from 1000 /to 3000 -built complete +input: filter -name intermediate -price /from 1000 /to 3000 -built complete output: @@ -119,12 +218,20 @@ What would you like to do? =================================================== Filter completed ``` +Notes: +#### `filter -clear` +Functionality: Clears all filters and shows all PCs currently in the list +Example: -### In PCBuilder Mode -#### `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` -**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. +--- +### PCBuilder Mode Commands +PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode -**Example:** +#### List command +Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` +Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. + +Example: ``` input: list cpu -name intel -price /from 1 /to 100 @@ -146,10 +253,13 @@ SOCKET: LGA1200 ================ ``` -#### `select COMPONENT_TYPE INDEX` -**Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build +Notes: Arguments with missing flags will be ignored. + +#### Select command +Usage: `select COMPONENT_TYPE INDEX` +Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build -**Example:** add component of type `GPU` with index `4` to the current PC Build. +Example: add component of type `GPU` with index `4` to the current PC Build. ``` input: select gpu 4 @@ -170,10 +280,11 @@ Chassis : - Not Selected - ``` -#### `unselect COMPONENT_TYPE` -**Functionality:** Removes the component of type `COMPONENT_TYPE` from your PC Build. +#### Unselect command +Usage: `unselect COMPONENT_TYPE` +Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. -**Example:** remove compoennt of type `GPU` from the current PC Build. +Example: remove compoennt of type `GPU` from the current PC Build. ``` Previous PC compoenent list: =================================================== @@ -209,10 +320,11 @@ Chassis : - Not Selected - ``` -#### `compare COMPONENT_TYPE INDEX_1 & INDEX_2` -**Functionality:** Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format +#### Compare command +Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` +Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format -**Example:** Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. +Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. ``` input: compare cpu 1 & 2 @@ -233,10 +345,11 @@ ________________________________________________________________________________ -#### `budget INTEGER` -**Functionality:** Sets the budget of the current PC build to `INTEGER` +#### Budget command +Usage: `budget INTEGER` +Functionality: Sets the budget of the current PC build to `INTEGER` -**Example** Set budget of Prebuilt-PC [Beginner] to be $1000 +Example Set budget of Prebuilt-PC [Beginner] to be $1000 ``` input: budget 1000 @@ -260,10 +373,11 @@ Current build budget is now: $1000.00 ``` -#### `name NEW_NAME` -**Functionality:** Sets the name of the current PC build to `NEW_NAME` +#### Name command +Usage: `name NEW_NAME` +Functionality: Sets the name of the current PC build to `NEW_NAME` -**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC +Example Set the name of Prebuilt-PC [Beginner] to be MyPC ``` input: name MyPC @@ -286,9 +400,9 @@ What would you like to do? Current build name is now: MyPc ``` -#### `custom COMPONENT_TYPE SPEC_1,SPEC_2, ...` -**Functionality:** Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the -current PC build +#### Custom command +Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` +Functionality: Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the current PC build ``` input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 @@ -312,10 +426,8 @@ CPU added: Intel-new-cpu ``` #### `back` -**Functionality:** Goes back to PCViewer menu +Functionality: Goes back to PCViewer menu -#### `bye` -**Functionality:** Exits the application ## Additional Features From 22ddb05dc26d9f278ca2c8deb490a07a2e0e1a1b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 02:35:46 +0800 Subject: [PATCH 256/420] Add changes required to follow user guide --- .../BuilderCustomChassisCommand.java | 9 +++---- .../BuilderCustomComponentCommand.java | 7 +++--- .../BuilderCustomCpuCommand.java | 2 +- .../BuilderCustomGpuCommand.java | 7 +++--- .../BuilderCustomMotherboardCommand.java | 11 ++++++--- .../BuilderCustomPsuCommand.java | 10 +++++--- .../BuilderCustomRamCommand.java | 12 ++++++++++ .../BuilderCustomStorageCommand.java | 4 ++++ .../BuilderListComponentCommand.java | 18 +++++++------- .../bigpp/component/chassis/Chassis.java | 2 +- .../java/seedu/bigpp/component/gpu/GPU.java | 2 +- .../component/motherboard/Motherboard.java | 2 +- .../java/seedu/bigpp/component/psu/PSU.java | 2 +- .../java/seedu/bigpp/pc/FormFactorEnum.java | 24 ++++++++++++++++--- src/main/java/seedu/bigpp/pc/PC.java | 6 +++++ 15 files changed, 85 insertions(+), 33 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java index 4d038ddd54..c4954e5714 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomChassisCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.chassis.Chassis; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.FormFactorEnum; import seedu.bigpp.ui.UI; public class BuilderCustomChassisCommand extends BuilderCustomComponentCommand { @@ -32,11 +33,11 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price should be a float"); } - String formfactor = argumentList[3].trim(); - if (formfactor.equals("")) { - throw new PPException("Please enter a valid formfactor for the custom component"); + String formFactor = argumentList[3].trim().toLowerCase(); + if (FormFactorEnum.isFormFactor(formFactor) == false) { + throw new PPException("Please enter a valid formfactor for the custom component (mini, micro, atx)"); } - Chassis chassis = new Chassis(name, brand, price, formfactor); + Chassis chassis = new Chassis(name, brand, price, formFactor); return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setChassis(chassis); } diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java index db8ead5b44..2610be6a72 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomComponentCommand.java @@ -20,17 +20,18 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String arguments = super.getArguments(); String[] argumentList = arguments.split("\\|"); if (argumentList.length != getExpectedArgumentLength()) { - throw new PPException("Please enter a valid number of arguments for the custom component"); + throw new PPException("Please enter a valid number of arguments for the custom component: " + + getExpectedArgumentLength() + " arguments are expected"); } String name = argumentList[0].trim(); if (name.equals("")) { - throw new PPException("Please enter a valid name for the custom component"); + throw new PPException("Please enter a name for the custom component"); } String brand = argumentList[1].trim(); if (brand.equals("")) { - throw new PPException("Please enter a valid brand for the custom component"); + throw new PPException("Please enter a brand for the custom component"); } return addNewComponent(argumentList, dataStorage, name, brand); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 626ebb7ac4..5b14e3b309 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -44,7 +44,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St String socket = argumentList[8].trim(); if (socket.equals("")) { - throw new PPException("Please enter a valid socket for the custom component"); + throw new PPException("Please enter a socket for the custom component"); } CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java index 35c3d7a03e..228bfa26c6 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomGpuCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.gpu.GPU; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.FormFactorEnum; import seedu.bigpp.ui.UI; public class BuilderCustomGpuCommand extends BuilderCustomComponentCommand { @@ -34,9 +35,9 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price and power should be floats"); } - String formfactor = argumentList[4].trim(); - if (formfactor.equals("")) { - throw new PPException("Please enter a valid formfactor for the custom component"); + String formfactor = argumentList[4].trim().toLowerCase(); + if (FormFactorEnum.isFormFactor(formfactor) == false) { + throw new PPException("Please enter a valid formfactor for the custom component (mini, micro, atx)"); } GPU gpu = new GPU(name, brand, price, power, formfactor); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index 1e5c2dfa1b..cc12f40dcc 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.motherboard.Motherboard; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.FormFactorEnum; import seedu.bigpp.ui.UI; public class BuilderCustomMotherboardCommand extends BuilderCustomComponentCommand { @@ -34,11 +35,15 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St "price and power should be floats"); } - String formfactor = argumentList[3].trim(); + String formfactor = argumentList[3].trim().toLowerCase(); String socket = argumentList[4].trim(); - if (socket.equals("") || formfactor.equals("")) { - throw new PPException("Please enter a valid socket/formfactor for the custom component"); + if (socket.equals("")) { + throw new PPException("Please enter a valid socket for the custom component"); } + if (FormFactorEnum.isFormFactor(formfactor) == false) { + throw new PPException("Please enter a valid formfactor for the custom component (mini, micro, atx)"); + } + Motherboard motherboard = new Motherboard(name, brand, price, formfactor, socket, power); return dataStorage.pcList.get(UI.pcBuilderMenu.getPCIndex()).setMotherboard(motherboard); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java index 962ff4ed74..38a49ff699 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomPsuCommand.java @@ -3,6 +3,7 @@ import seedu.bigpp.component.psu.PSU; import seedu.bigpp.datastorage.DataStorage; import seedu.bigpp.exceptions.PPException; +import seedu.bigpp.pc.FormFactorEnum; import seedu.bigpp.ui.UI; public class BuilderCustomPsuCommand extends BuilderCustomComponentCommand { @@ -35,9 +36,12 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } String efficiency = argumentList[2].trim(); - String formFactor = argumentList[3].trim(); - if (efficiency.equals("") || formFactor.equals("")) { - throw new PPException("Please enter a valid efficiency and form factor for the custom component"); + String formFactor = argumentList[3].trim().toLowerCase(); + if (efficiency.equals("")) { + throw new PPException("Please enter a efficiency for the custom component"); + } + if (FormFactorEnum.isFormFactor(formFactor) == false) { + throw new PPException("Please enter a valid formfactor for the custom component (mini, micro, atx)"); } PSU psu = new PSU(name, price, brand, efficiency, formFactor, power); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java index 5ba2883e08..8eb36ffe08 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomRamCommand.java @@ -30,6 +30,18 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St sticks = Integer.parseInt(argumentList[3]); speed = Integer.parseInt(argumentList[4]); + if (sticks != 1 && sticks != 2 && sticks != 4) { + throw new PPException("sticks should be 1, 2 or 4"); + } + + if (memory != 8 && memory != 16 && memory != 32 && memory != 64) { + throw new PPException("memory should be 8, 16, 32 or 64"); + } + + if (speed != 1600 && speed != 2000 && speed != 2666 && speed != 3200 && speed != 3600) { + throw new PPException("speed should be 1600, 2000, 2666, 3200 or 3600"); + } + // Check if all the values are positive if (price < 0 || power < 0 || memory < 0 || sticks < 0 || speed < 0) { throw new PPException("price, power, memory, sticks, and speed should be positive"); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java index de3b4dc7ac..2035a871ca 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -26,6 +26,10 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St power = Float.parseFloat(argumentList[3]); size = Integer.parseInt(argumentList[5]); + if (size != 512 && size != 1024 && size != 2048 && size != 4096) { + throw new PPException("size should be 512, 1024, 2048 or 4096"); + } + // Check if all the values are positive if (price < 0 || power < 0 || size < 0) { throw new PPException("price, power and size should be positive"); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 74846e9de2..ad31920249 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -287,7 +287,7 @@ private ComponentList handleTypeFlag(String userInputString, ComponentList return componentList; } - // handle speed flag, speed can be 1600 or 3200 + // handle speed flag, speed can be 1600/2000/2666/3000/3200/3600 private ComponentList handleSpeedFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -307,8 +307,8 @@ private ComponentList handleSpeedFlag(String userInputString, ComponentList handleSpeedFlag(String userInputString, ComponentList handleSticksFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -337,8 +337,8 @@ private ComponentList handleSticksFlag(String userInputString, ComponentList< } int sticks = Integer.parseInt(sticksDescriptionArray[0]); - if (sticks != 1 && sticks != 2) { - throw new PPException("Please enter a valid sticks description (1 or 2))"); + if (sticks != 1 && sticks != 2 && sticks != 3 && sticks != 4) { + throw new PPException("Please enter a valid sticks description (1, 2, 3 or 4))"); } flagsArray.add("Sticks: " + sticks); @@ -347,7 +347,7 @@ private ComponentList handleSticksFlag(String userInputString, ComponentList< return componentList; } - // handle memory flag, memory could be int 8, 16, 32 + // handle memory flag, memory could be int 8, 16, 32, 64 private ComponentList handleMemoryFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -367,8 +367,8 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< } int memory = Integer.parseInt(memoryDescriptionArray[0]); - if (memory != 8 && memory != 16 && memory != 32) { - throw new PPException("Please enter a valid memory description (8, 16 or 32)"); + if (memory != 8 && memory != 16 && memory != 32 && memory != 64) { + throw new PPException("Please enter a valid memory description (8, 16, 32 or 64)"); } flagsArray.add("Memory: " + memory + "GB"); diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index 8163490ef5..2f3881bf3d 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -28,6 +28,6 @@ public String toString() { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nformfactor: " + formfactor; + "\nFORMFACTOR: " + formfactor; } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index 8a65c70fa4..833bf1bd40 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -38,6 +38,6 @@ public String toString() { "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nPOWER: " + power + - "\nformfactor: " + formfactor; + "\nFORMFACTOR: " + formfactor; } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index f7a139ac8f..71fde52574 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -47,7 +47,7 @@ public String toString() { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nformfactor: " + formfactor + + "\nFORMFACTOR: " + formfactor + "\nSOCKET: " + socket + "\nPOWER: " + power; } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index 0d2aa56b37..dcea199d78 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -48,7 +48,7 @@ public String toString() { "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + "\nEFFICIENCY: " + efficiency + - "\nformfactor: " + formfactor + + "\nFORMFACTOR: " + formfactor + "\nPOWER: " + power; } } diff --git a/src/main/java/seedu/bigpp/pc/FormFactorEnum.java b/src/main/java/seedu/bigpp/pc/FormFactorEnum.java index 5e836f9f54..c84878397a 100644 --- a/src/main/java/seedu/bigpp/pc/FormFactorEnum.java +++ b/src/main/java/seedu/bigpp/pc/FormFactorEnum.java @@ -2,18 +2,36 @@ public enum FormFactorEnum { - MINI(1), MICRO(2), ATX(3); + MINI(1, "mini"), MICRO(2, "micro"), ATX(3, "atx"); private int value; + private String formFactor; - FormFactorEnum(int value) { + FormFactorEnum(int value, String formFactor) { this.value = value; } - public int getFormFactor() { + public int getFormFactorEnum() { return value; } + public String getFormFactorEnumString() { + return formFactor; + } + + public static Boolean isFormFactor(String formFactor) { + switch (formFactor) { + case "mini": + return true; + case "micro": + return true; + case "atx": + return true; + default: + return false; + } + } + public static int getFormFactorFromString(String formFactor) { switch (formFactor) { case "mini": diff --git a/src/main/java/seedu/bigpp/pc/PC.java b/src/main/java/seedu/bigpp/pc/PC.java index 0865c3827c..6bc9047aec 100644 --- a/src/main/java/seedu/bigpp/pc/PC.java +++ b/src/main/java/seedu/bigpp/pc/PC.java @@ -483,6 +483,12 @@ public String viewComponents() { String componentString = ""; componentString += this.toString() + "\n"; + if (psu == null) { + componentString += ("Power Consumption: " + this.getTotalPowerConsumption() + "W/" + "0W\n"); + } else { + componentString += ("Power Consumption: " + this.getTotalPowerConsumption() + "W/" + psu.getPower() + + "W\n"); + } componentString += ("Components:" + '\n'); String[] componentNames = { "CPU :", "CPU Cooler :", "GPU :", "Motherboard:", "RAM :", From 3e8a24da1d2495aa6f0f17b51be3a730c2ac6271 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sun, 2 Apr 2023 03:09:15 +0800 Subject: [PATCH 257/420] Update ViewerFilterCommand to account for invalid inputs and empty commands Update ViewerHelpCommand to include filter commands Update return message in PCList --- .../viewercommand/ViewerFilterCommand.java | 26 ++++++++++++------- .../viewercommand/ViewerHelpCommand.java | 13 +++++++--- src/main/java/seedu/bigpp/pc/PCList.java | 4 +-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 7adb1c16bc..2144a9a1bc 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -20,8 +20,7 @@ public ViewerFilterCommand(String arguments) { } /** - * Checks for the filter flags and applies it to the PC Viewer menu user - * interface + * Checks for the filter flags and applies it to the PC Viewer menu user interface * @return that the filter has been executed successfully */ @Override @@ -37,13 +36,12 @@ public String executeCommand(DataStorage dataStorage) throws PPException { throw new PPException("Please enter a valid filter"); } if (containsFlag(userInputStringArray, CLEAR_FLAG)) { - PCList.setFilterFalse(); - PCList.setBuilt(""); - PCList.setPriceFrom(""); - PCList.setName(""); - PCList.setPriceTo(""); + handleClearFlag(userInputStringArray); return "Filter cleared"; } + if (userInputStringArray.length <= 1) { + throw new PPException("Please enter a valid flag and description"); + } if (userInputStringArray.length > 1) { if (hasFlag(userInputStringArray)) { PCList.setFilterTrue(); @@ -59,11 +57,19 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } else { throw new PPException("Please enter a valid flag"); } - - } return "Filter completed"; + } + return ""; } + + private void handleClearFlag(String[] flagAndDescriptionArray) throws PPException { + PCList.setFilterFalse(); + PCList.setBuilt(""); + PCList.setPriceFrom(""); + PCList.setName(""); + PCList.setPriceTo(""); + } private void handlePriceFlag(String userInputString, String[] flagAndDescriptionArray) throws PPException { int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, PRICE_FLAG); if (priceFlagIndex == flagAndDescriptionArray.length - 1) { @@ -141,7 +147,7 @@ private void handleNameFlag(String[] flagAndDescriptionArray) throws PPException } private static boolean isFlag(String flag) { - return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BUILT_FLAG); + return flag.equals(NAME_FLAG) || flag.equals(PRICE_FLAG) || flag.equals(BUILT_FLAG) || flag.equals(CLEAR_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java index 7a5171efa7..e0e2559eda 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -5,10 +5,15 @@ public class ViewerHelpCommand extends Command { private static final String HELP = "Here are the list of valid commands: \n" - + "Add - Add a new PC of a given name \n" - + "Delete - Delete the PC of a given index \n" - + "Edit - Edit the PC of a given index \n" - + "View - Display all the components of the PC of a given index \n"; + + "add : Add a new PC of a given name \n" + + "delete : Delete the PC of a given index \n" + + "edit : Edit the PC of a given index \n" + + "view : Display all the components of the PC of a given index \n" + + "filter -name : Filter PC List by a given name\n" + + "filter -price /from /to : Filter PC List by a given price range\n" + + "filter -built : Filter PC List by a built of complete or incomplete\n" + + "filter -clear : Clear all filters that were applied previously\n"; + /** * Help command to view the list of valid commands diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 6290cb76cf..33d2c58215 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -21,7 +21,7 @@ public PCList() { } public void printPcList() { - if (isFilter) { + if (getIsFilter()) { printAltPcList(); } else { if (this.size() > 0) { @@ -38,7 +38,7 @@ public void printPcList() { public void printAltPcList() { int pcCount = 0; if (this.size() > 0) { - out.println("Here is the list of PC Builds:"); + out.println("Here is the filtered list of PC Builds:"); for (int i = 0; i < this.size(); i++) { if (filterByBuilt(this.get(i), getIsBuilt()) && filterByPrice(this.get(i), getPriceFrom(), getPriceTo()) && filterByName(this.get(i), getName())) { From 9f6c433a87d83fa7cdf2d152fcd6e5162548491b Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sun, 2 Apr 2023 03:13:14 +0800 Subject: [PATCH 258/420] Update checkstyle of code --- .../seedu/bigpp/command/viewercommand/ViewerFilterCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 2144a9a1bc..54968f85c4 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -57,7 +57,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { } else { throw new PPException("Please enter a valid flag"); } - return "Filter completed"; + return "Filter completed"; } return ""; } From f22d6c97623164b3198411af20b6edb6c2d85d0b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 03:13:28 +0800 Subject: [PATCH 259/420] Solve clear screen bug for windows cmd terminal --- BigPP.log.1 | 0 src/main/java/seedu/bigpp/ui/UI.java | 14 +++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 BigPP.log.1 diff --git a/BigPP.log.1 b/BigPP.log.1 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 04a3d43fdc..571d31d40a 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -4,6 +4,7 @@ import seedu.bigpp.menu.PCBuilderMenu; import seedu.bigpp.menu.PCViewerMenu; +import java.io.IOException; import java.io.PrintStream; import java.text.DecimalFormat; import java.util.ArrayList; @@ -109,7 +110,18 @@ public static void updateUI(boolean isInitial, DataStorage dataStorage) { } public static void clearTerminal() { - out.println("\033[H\033[2J"); + try { + if (System.getProperty("os.name").contains("Windows")) { + new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); + } else { + System.out.print("\033[H\033[2J"); + System.out.flush(); + } + } catch (IOException | InterruptedException ex) { + // Handle any exceptions. + ex.printStackTrace(); + } + } public static void showResult(String result) { From f9f26959593ec1c45082190afb1ae6b9a67c32c7 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:01:14 +0800 Subject: [PATCH 260/420] Add getDetails which will improve the list quality --- docs/UserGuide.md | 484 ++++++++++++++---- .../BuilderCustomStorageCommand.java | 4 +- .../BuilderListComponentCommand.java | 11 +- .../java/seedu/bigpp/component/Component.java | 8 +- .../seedu/bigpp/component/ComponentList.java | 6 +- .../bigpp/component/chassis/Chassis.java | 14 +- .../java/seedu/bigpp/component/cpu/CPU.java | 24 +- .../bigpp/component/cpucooler/CPUCooler.java | 18 +- .../java/seedu/bigpp/component/gpu/GPU.java | 16 +- .../component/motherboard/Motherboard.java | 19 +- .../java/seedu/bigpp/component/psu/PSU.java | 18 +- .../java/seedu/bigpp/component/ram/RAM.java | 20 +- .../bigpp/component/storage/Storage.java | 18 +- src/main/resources/prebuilt.json | 6 +- src/main/resources/storage.json | 8 +- 15 files changed, 500 insertions(+), 174 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index bffc46623f..a2c60c3d3b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -5,25 +5,30 @@ - [Introduction](#introduction) - [Getting Started](#getting-started) - [Commands](#commands) - - [In PCViewer Mode](#in-pcviewer-mode) - - [`add PC_NAME`](#add-pc_name) - - [`view PC_INDEX`](#view-pc_index) - - [`edit PC_INDEX`](#edit-pc_index) - - [`delete PC_INDEX`](#delete-pc_index) - - [`filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) - - [In PCBuilder Mode](#in-pcbuilder-mode) - - [`list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]`](#list-component_type--component_flag-flag) - - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) - - [`unselect COMPONENT_TYPE`](#unselect-component_type) - - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) - - [`budget INTEGER`](#budget-integer) - - [`name NEW_NAME`](#name-new_name) - - [`custom COMPONENT_TYPE SPEC_1,SPEC_2, ...`](#custom-component_type-spec_1spec_2-) - - [`back`](#back) - - [`bye`](#bye) + - [Common Commands](#common-commands) + - [**Bye command**](#bye-command) + - [**Help command**](#help-command) + - [PCViewer Mode Commands](#pcviewer-mode-commands) + - [**Add command**](#add-command) + - [**View command**](#view-command) + - [**Edit command**](#edit-command) + - [**Delete command**](#delete-command) + - [**Filter command**](#filter-command) + - [PCBuilder Mode Commands](#pcbuilder-mode-commands) + - [**List command**](#list-command) + - [**Select command**](#select-command) + - [**Unselect command**](#unselect-command) + - [**Compare command**](#compare-command) + - [**Budget command**](#budget-command) + - [**Name command**](#name-command) + - [**Custom command**](#custom-command) + - [**Back Command**](#back-command) - [Additional Features](#additional-features) - [Compatibility Check](#compatibility-check) - - [Glossary](#glossary) +- [Glossary](#glossary) + - [Parameters Glossary](#parameters-glossary) + - [Command glossary](#command-glossary) + - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) ## Introduction @@ -34,8 +39,8 @@ BigPP is a command-line application designed for PC enthusiasts and professional - verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. -If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions, or consult a search engine or even ask ChatGPT. -Text formatted like `this` represents commands that can be entered into the command line or output displayed in the terminal. +If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. + ## Getting Started @@ -86,31 +91,209 @@ What would you like to do? =================================================== ``` +If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. -### In PCViewer Mode -#### `add PC_NAME` -**Functionality:** Adds a PC with the name `PC_NAME` to your PC list +For reference, + - PCViewer looks like this: +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +What would you like to do? +=================================================== +``` + - PCBuilder looks like this +``` +=================================================== +PC builder +Custom-PC: [expert (copy)] - $2339.74/infinite - Complete +Components: +CPU : AMD Ryzen 9 7950X +CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: Gigabyte B650I AORUS ULTRA +RAM : Corsair Vengeance RGB Pro 32 GB +Storage : Samsung 980 Pro +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Corsair iCUE 4000X RGB -#### `view PC_INDEX` -**Functionality:** Views the PC with index `PC_INDEX` +What would you like to do? +=================================================== +``` +--- +### Common Commands +Common commands will be the commands that the user will be able to use in both the modes -#### `edit PC_INDEX` -**Functionality:** Enters PCBuilder mode for the PC with index `PC_INDEX` +#### **Bye command** +Usage: `bye` +Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application -#### `delete PC_INDEX` -**Functionality:** Deletes the PC with index `PC_INDEX` +**IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! -#### `filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` -**Functionality:** Filters the PC with the following flags `-name`, `-cost` and `-built` +#### **Help command** +Usage: `help` +Functionality: Displays the valid commands in the respective modes +Example: + - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: +``` +Here are the list of valid commands: +Add - Add a new PC of a given name +Delete - Delete the PC of a given index +Edit - Edit the PC of a given index +View - Display all the components of the PC of a given index +``` -**Example:** filter the PC List by the name of intermediate, in the range of starting from 1000 to 3000 and is a complete built + - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: +``` +Here are the list of valid commands: +list - List all components of a certain type +name - Change the name of the PC currently being edited to +budget - Change the budget of the PC currently being edited to +select - Add the component of type with index to the PC currently being edited +info - View all the specifications of the component of type currently selected for the build +unselect - Remove the component of type from the PC currently beingedited +custom - Creates a custom component of type with all the and adds it to the list of components of that type +compare & Compares all the specifications between the components oftype with indices and ``` -input: filter -cost /from 1000 /to 3000 -built complete +Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands + +--- +### PCViewer Mode Commands +PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode + + +#### **Add command** +Usage: `add PC_NAME` + +Functionality: Adds a PC with the name `PC_NAME` to your PC list + +Example: +>input: add NEWPC +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +What would you like to do? +=================================================== +Custom PC: [ NEWPC ] has been created +``` +Notes: newly added PCs will always begin with infinite budget + +--- +#### **View command** +Usage: `view PC_INDEX` + +Functionality: Views the PC with index `PC_INDEX` + +Example: +>input: view 3 +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +What would you like to do? +=================================================== +Prebuilt-PC: [expert] - $2339.74/infinite - Complete +Components: +CPU : AMD Ryzen 9 7950X +CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: Gigabyte B650I AORUS ULTRA +RAM : Corsair Vengeance RGB Pro 32 GB +Storage : Samsung 980 Pro +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Corsair iCUE 4000X RGB +``` + +--- +#### **Edit command** +Usage: `edit PC_INDEX` + +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. + +Example: +>input: edit 4 +``` +=================================================== +PC builder +Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +What would you like to do? +=================================================== +Currently editing PC: NEWPC +``` + +Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the application would create a copy of it and mark it as a `CUSTOM_PC`. This is because we provide the prebuilts as a reference for the user, and not for editing. + +--- +#### **Delete command** +Usage: `delete PC_INDEX` + +Functionality: Deletes the PC with index `PC_INDEX` + +Example: +>input: delete 4 +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +What would you like to do? +=================================================== +Custom PC: [ NEWPC ] has been deleted +``` + +--- +#### **Filter command** +Usage: `filter FILTER_FLAGS` + -output: +Available flags: +> `-name PC_NAME` +> +> `-price /from PC_START_PRICE /to PC_END_PRICE` +> +> `-built PC_ISCOMPLETE` +> +> `-clear` + +Functionality: +The following explains the functionality of filtering by each flag: + - `-name PC_NAME` will filter the PC List by the given name + - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range + - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete + - `-clear` will clear all filters that were applied previously + +Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build +>input: filter -name intermediate -price /from 1000 /to 3000 -built complete + +``` =================================================== PC viewer Here is the list of PC Builds: @@ -119,12 +302,17 @@ What would you like to do? =================================================== Filter completed ``` +Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. + +--- +### PCBuilder Mode Commands +PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode -### In PCBuilder Mode -#### `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` -**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. +#### **List command** +Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` +Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. -**Example:** +Example: ``` input: list cpu -name intel -price /from 1 /to 100 @@ -146,15 +334,17 @@ SOCKET: LGA1200 ================ ``` -#### `select COMPONENT_TYPE INDEX` -**Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build +Notes: Arguments with missing flags will be ignored. -**Example:** add component of type `GPU` with index `4` to the current PC Build. -``` -input: select gpu 4 +--- +#### **Select command** +Usage: `select COMPONENT_TYPE COMPONENT_INDEX` -output: +Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build +Example: add component of type `GPU` with index `4` to the current PC Build. +>input: select gpu 4 +``` =================================================== PC builder Custom-PC: [pc] - $934.06/infinite - Incomplete @@ -168,32 +358,23 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - +What would you like to do? +=================================================== +gpu added! : MSI GAMING Z TRIO RTX3080 + ``` +Notes: you can select any component at any time and do not need to list components before selecting as long as you know which index you want to add. -#### `unselect COMPONENT_TYPE` -**Functionality:** Removes the component of type `COMPONENT_TYPE` from your PC Build. +--- +#### **Unselect command** +Usage: `unselect COMPONENT_TYPE` -**Example:** remove compoennt of type `GPU` from the current PC Build. -``` -Previous PC compoenent list: -=================================================== -PC builder -Custom-PC: [pc] - $934.06/infinite - Incomplete -Components: -CPU : - Not Selected - -CPU Cooler : - Not Selected - -GPU : MSI GAMING Z TRIO RTX3080 -Motherboard: - Not Selected - -RAM : - Not Selected - -Storage : - Not Selected - -PSU : - Not Selected - -Chassis : - Not Selected - -``` -``` -input: unselect gpu +Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. -output: +Example: remove component of type `GPU` from the current PC Build. +>input: unselect gpu +``` =================================================== PC builder Custom-PC: [pc] - $0.0/infinite - Incomplete @@ -207,16 +388,20 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - +What would you like to do? +=================================================== +gpu removed! ``` -#### `compare COMPONENT_TYPE INDEX_1 & INDEX_2` -**Functionality:** Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format +--- +#### **Compare command** +Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` -**Example:** Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. -``` -input: compare cpu 1 & 2 +Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format -output: +Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. +>input: compare cpu 1 & 2 +``` ________________________________________________________________________________________________ |NAME |Intel core i3-10100 |Intel core i5-10600k | |------------|----------------------------------------|----------------------------------------| @@ -231,16 +416,15 @@ ________________________________________________________________________________ ``` +--- +#### **Budget command** +Usage: `budget POSITIVE_INTEGER` +Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` -#### `budget INTEGER` -**Functionality:** Sets the budget of the current PC build to `INTEGER` - -**Example** Set budget of Prebuilt-PC [Beginner] to be $1000 +Example Set `BUDGET` of the PC you are currently editing to be $1000 +>input: budget 1000 ``` -input: budget 1000 - -output: =================================================== PC builder Custom-PC: [beginner (copy)] - $813.29/$1000.00 - Complete @@ -260,14 +444,15 @@ Current build budget is now: $1000.00 ``` -#### `name NEW_NAME` -**Functionality:** Sets the name of the current PC build to `NEW_NAME` +--- +#### **Name command** +Usage: `name PC_NAME` -**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC -``` -input: name MyPC +Functionality: Sets the name of the current PC build to `PC_NAME` -output: +Example Set the name of PC to be MyPC +>input: name MyPC +``` =================================================== PC builder Custom-PC: [MyPc] - $813.29/$1000.00 - Complete @@ -286,13 +471,13 @@ What would you like to do? Current build name is now: MyPc ``` -#### `custom COMPONENT_TYPE SPEC_1,SPEC_2, ...` -**Functionality:** Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the -current PC build -``` -input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 +--- +#### **Custom command** +Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` -output: +Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build +>input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 +``` =================================================== PC builder Custom-PC: [pc-1] - $99.5/infinite - Incomplete @@ -310,25 +495,126 @@ What would you like to do? =================================================== CPU added: Intel-new-cpu ``` +Notes: Please see the glossary for the `SPEC` definitions for each component + +--- +#### **Back Command** +Usage: `back` -#### `back` -**Functionality:** Goes back to PCViewer menu +Functionality: Goes back to PCViewer menu -#### `bye` -**Functionality:** Exits the application +--- ## Additional Features ### Compatibility Check -BigPP will check if your components that you added are compatible with each other. +BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. + +1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. +2. Total power consumption of all `COMPONENT_TYPE` components in your build apart from `PSU` must be below 80% of the power supplied by the `PSU` selected to ensure there is enough power in your build, this check is ignored if your psu is not added. +3. Your `BUDGET` always needs to be larger than the total price of your entire build, this check is ignored if your budget is infinite. +4. Your `CPU` and `MOTHERBOARD` needs to have the same `SOCKET`. + +Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. + +Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. +>input: custom motherboard newmobo|AMD|10|atx|AM5|10 +``` +=================================================== +PC builder +Custom-PC: [pc] - $224.48/infinite - Incomplete +Components: +CPU : Intel core i3-10100 +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : Fractal Design Pop XL Air + +What would you like to do? +=================================================== +Motherboard socket is not compatible with current cpu socket +Please choose another motherboard or change your cpu +``` -If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you. -If your total items have power that exceeds 80% of your power supply rated power, it will result in incompatibility errors. -if your the item you want to add exceeds your total budget, it will not allow you to add the component. +## Glossary + +### Parameters Glossary +| Parameter | Explanation | Type | Example | +| -------------- |:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | +| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | +| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | +| TYPE | Type of storage device | String | "ssd" | +| EFFICIENCY | The power efficiency of power supply | String | gold | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | | | +| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | +| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | +| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | + +### Command glossary + + +| Viewer Menu Commands | Format | Flags | +|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| +| Add PC | `add PC_NAME` | nil | +| View PC | `view PC_INDEX` | nil | +| Edit PC | `edit PC_INDEX` | nil | +| Delete PC | `delete PC_INDEX` | nil | +| Filter PCs | `filter FILTER_FLAGS` | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| **Builder Menu Commands** | **Format** | **Flags** | +| List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | +| List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | +| List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | +| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | +| List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | +| List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | +| List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | +| List Chasis | `list chasis [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price` and `-formfactor` | +| Select Component | `select COMPONENT_TYPE COMPONENT_INDEX` | nil | +| Unselect Component | `unselect COMPONENT_TYPE COMPONENT_INDEX` | nil | +| Compare Components | `compare COMPONENT_TYPE INDEX_1 & INDEX_2` | nil | +| Budget | `budget POSITIVE_INTEGER` | nil | +| Name PC | `name PC_NAME` | nil | +| Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#Acceptable-Custom-Component-Commands) | +| Back | `back` | nil | + +#### Acceptable Custom Component Commands +The acceptable formats for custom component creation are as shown below + +1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` +2. `custom gpu NAME|BRAND|PRICE|POWER|FORMFACTOR` +3. `custom cpu-cooler NAME|BRAND|PRICE|RPM|NOISE|POWER` +4. `custom motherboard NAME|BRAND|PRICE|FORMFACTOR|SOCKET|POWER` +5. `custom ram NAME|BRAND|PRICE|MEMORY|STICKS|SPEED|POWER` +6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` +7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` +8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` -If your CPU has a different socket than your Motherboard or vice versa, it will not allow you to add it. -### Glossary diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java index 2035a871ca..b67ba98e45 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -41,8 +41,8 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } String type = argumentList[1].trim(); - if (type.equals("")) { - throw new PPException("Please enter a valid type for the custom component"); + if (!type.equals("ssd") || !type.equals("hdd")) { + throw new PPException("Please enter a valid type for the custom component (ssd, hdd)"); } Storage storage = new Storage(name, brand, price, type, size, power); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index ad31920249..cc38f81b33 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -38,6 +38,7 @@ public class BuilderListComponentCommand extends Command { private static final String TYPE_FLAG = "-type"; private static final String FORM_FACTOR_FLAG = "-formfactor"; private static final String EFFICIENCY_FLAG = "-efficiency"; + private static final String DETAILS_FLAG = "-details"; public BuilderListComponentCommand(String arguments) { setArguments(arguments); @@ -72,6 +73,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { ArrayList componentIndexes = new ArrayList(); ArrayList flagsArray = new ArrayList(); + Boolean getDetails = false; + if (userInputStringArray.length > 1) { String[] flagAndDescriptionArray = Arrays.copyOfRange(userInputStringArray, 1, userInputStringArray.length); if (hasFlag(userInputStringArray)) { @@ -87,6 +90,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentList = handlePriceFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } + if (containsFlag(flagAndDescriptionArray, DETAILS_FLAG)) { + getDetails = true; + } switch (componentType) { case CHASSIS_TYPE: @@ -225,8 +231,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { outputString += flagDescription + "\n"; } } - - return outputString + componentList.getListString(componentIndexes); + return outputString + componentList.getListString(componentIndexes, getDetails); } // handle size flag, size can be 512, 1024, 2048, 4096 @@ -964,7 +969,7 @@ private static boolean isFlag(String flag) { || flag.equals(SOCKET_FLAG) || flag.equals(RPM_FLAG) || flag.equals(NOISE_FLAG) || flag.equals(MEMORY_FLAG) || flag.equals(STICKS_FLAG) || flag.equals(SPEED_FLAG) || flag.equals(TYPE_FLAG) || flag.equals(FORM_FACTOR_FLAG) - || flag.equals(EFFICIENCY_FLAG); + || flag.equals(EFFICIENCY_FLAG) || flag.equals(DETAILS_FLAG); } private static boolean hasFlag(String[] userInputStringArray) { diff --git a/src/main/java/seedu/bigpp/component/Component.java b/src/main/java/seedu/bigpp/component/Component.java index 4ee5f88d40..dd84447a54 100644 --- a/src/main/java/seedu/bigpp/component/Component.java +++ b/src/main/java/seedu/bigpp/component/Component.java @@ -29,7 +29,11 @@ public void setPrice(float price) { this.price = price; } - public String toString() { - return "Name: " + this.name + "\nBrand: " + this.brand + "\nPrice: " + this.price; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + this.name + "\nBRAND: " + this.brand + "\nPRICE: " + this.price; + } else { + return this.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index a93beba7ef..99ac4277ca 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -17,18 +17,18 @@ public class ComponentList extends ArrayList { * components in the original list will be shown. * @return a string containing all the components in the list */ - public String getListString(ArrayList componentIndexes) { + public String getListString(ArrayList componentIndexes, Boolean getDetails) { String outputString = ""; if (componentIndexes.size() == 0) { for (int i = 0; i < super.size(); i++) { - outputString += (i + 1) + "." + "\n" + super.get(i).toString() + "\n" + "================\n"; + outputString += (i + 1) + "." + "\n" + super.get(i).toString(getDetails) + "\n" + "================\n"; } } else { for (int i = 0; i < super.size(); i++) { outputString += componentIndexes.get(i).toString() + "." + "\n" + super.get(i) - .toString() + "\n" + "================\n"; + .toString(getDetails) + "\n" + "================\n"; } } diff --git a/src/main/java/seedu/bigpp/component/chassis/Chassis.java b/src/main/java/seedu/bigpp/component/chassis/Chassis.java index 2f3881bf3d..0cec23cff9 100644 --- a/src/main/java/seedu/bigpp/component/chassis/Chassis.java +++ b/src/main/java/seedu/bigpp/component/chassis/Chassis.java @@ -24,10 +24,14 @@ public void setFormFactor(String formfactor) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nFORMFACTOR: " + formfactor; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nFORMFACTOR: " + formfactor; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/cpu/CPU.java b/src/main/java/seedu/bigpp/component/cpu/CPU.java index 75d26c4851..2f34a59846 100644 --- a/src/main/java/seedu/bigpp/component/cpu/CPU.java +++ b/src/main/java/seedu/bigpp/component/cpu/CPU.java @@ -74,15 +74,19 @@ public void setSocket(String socket) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nCORES: " + cores + - "\nTHREADS: " + threads + - "\nBASECLOCK: " + baseClock + - "\nBOOSTCLOCK: " + boostClock + - "\nPOWER: " + power + - "\nSOCKET: " + socket; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nCORES: " + cores + + "\nTHREADS: " + threads + + "\nBASECLOCK: " + baseClock + + "\nBOOSTCLOCK: " + boostClock + + "\nPOWER: " + power + + "\nSOCKET: " + socket; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java index 4e0a00e3b5..c24b07e01e 100644 --- a/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java +++ b/src/main/java/seedu/bigpp/component/cpucooler/CPUCooler.java @@ -43,12 +43,16 @@ public void setPower(float power) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nRPM: " + rpm + - "\nNOISE: " + noise + - "\nPOWER: " + power; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nRPM: " + rpm + + "\nNOISE: " + noise + + "\nPOWER: " + power; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/gpu/GPU.java b/src/main/java/seedu/bigpp/component/gpu/GPU.java index 833bf1bd40..70441541ed 100644 --- a/src/main/java/seedu/bigpp/component/gpu/GPU.java +++ b/src/main/java/seedu/bigpp/component/gpu/GPU.java @@ -33,11 +33,15 @@ public void setFormFactor(String formfactor) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nPOWER: " + power + - "\nFORMFACTOR: " + formfactor; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nPOWER: " + power + + "\nFORMFACTOR: " + formfactor; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java index 71fde52574..9a2f9d6f5d 100644 --- a/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java +++ b/src/main/java/seedu/bigpp/component/motherboard/Motherboard.java @@ -43,13 +43,16 @@ public void setPower(float power) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nFORMFACTOR: " + formfactor + - "\nSOCKET: " + socket + - "\nPOWER: " + power; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nFORMFACTOR: " + formfactor + + "\nSOCKET: " + socket + + "\nPOWER: " + power; + } else { + return super.name; + } } - } diff --git a/src/main/java/seedu/bigpp/component/psu/PSU.java b/src/main/java/seedu/bigpp/component/psu/PSU.java index dcea199d78..f269fd5cc4 100644 --- a/src/main/java/seedu/bigpp/component/psu/PSU.java +++ b/src/main/java/seedu/bigpp/component/psu/PSU.java @@ -43,12 +43,16 @@ public void setPower(float power) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nEFFICIENCY: " + efficiency + - "\nFORMFACTOR: " + formfactor + - "\nPOWER: " + power; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nEFFICIENCY: " + efficiency + + "\nFORMFACTOR: " + formfactor + + "\nPOWER: " + power; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/ram/RAM.java b/src/main/java/seedu/bigpp/component/ram/RAM.java index 7d7bd3507f..ba8e0c3291 100644 --- a/src/main/java/seedu/bigpp/component/ram/RAM.java +++ b/src/main/java/seedu/bigpp/component/ram/RAM.java @@ -53,13 +53,17 @@ public void setPower(float power) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nMEMORY: " + memory + - "\nSTICKS: " + sticks + - "\nSPEED: " + speed + - "\nPOWER: " + power; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nMEMORY: " + memory + + "\nSTICKS: " + sticks + + "\nSPEED: " + speed + + "\nPOWER: " + power; + } else { + return super.name; + } } } diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index 8ff90b97f5..2532f69661 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -44,12 +44,16 @@ public void setPower(float power) { } @Override - public String toString() { - return "NAME: " + super.getName() + - "\nBRAND: " + super.getBrand() + - "\nPRICE: " + super.getPrice() + - "\nTYPE: " + type + '\'' + - "\nSIZE: " + size + - "\nPOWER: " + power; + public String toString(Boolean getDetails) { + if (getDetails) { + return "NAME: " + super.getName() + + "\nBRAND: " + super.getBrand() + + "\nPRICE: " + super.getPrice() + + "\nTYPE: " + type + '\'' + + "\nSIZE: " + size + + "\nPOWER: " + power; + } else { + return super.name; + } } } diff --git a/src/main/resources/prebuilt.json b/src/main/resources/prebuilt.json index cacbc666f8..baa621123d 100644 --- a/src/main/resources/prebuilt.json +++ b/src/main/resources/prebuilt.json @@ -46,7 +46,7 @@ "price": 22.99 }, "storage": { - "type": "M.2 SSD", + "type": "ssd", "size": 512, "power": 4.5, "name": "ADATA XPG SPECTRIX S40G RGB", @@ -116,7 +116,7 @@ "price": 43.98 }, "storage": { - "type": "HDD", + "type": "hdd", "size": 1024, "power": 6.8, "name": "Seagate BarraCuda", @@ -186,7 +186,7 @@ "price": 104.99 }, "storage": { - "type": "M.2 SSD", + "type": "ssd", "size": 2048, "power": 5.2, "name": "Samsung 980 Pro", diff --git a/src/main/resources/storage.json b/src/main/resources/storage.json index 11f53c23ce..b7083e0b49 100644 --- a/src/main/resources/storage.json +++ b/src/main/resources/storage.json @@ -1,27 +1,27 @@ { "ADATA XPG SPECTRIX S40G RGB": { - "type": "M.2 SSD", + "type": "ssd", "size": 512, "price": 54.99, "brand": "ADATA", "power": 4.5 }, "Seagate BarraCuda": { - "type": "HDD", + "type": "hdd", "size": 1024, "price": 95.0, "brand": "Seagate", "power": 6.8 }, "Samsung 980 Pro": { - "type": "M.2 SSD", + "type": "ssd", "size": 2048, "price": 159.99, "brand": "Samsung", "power": 5.2 }, "Western Digital Blue": { - "type": "SATA SSD", + "type": "ssd", "size": 4096, "price": 229.96, "brand": "Western Digital", From 386a95ddcbc3f644e7339f0a465eb3904481d376 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:07:40 +0800 Subject: [PATCH 261/420] Ensure only selected sockets can be added --- .../bigpp/command/buildercommand/BuilderCustomCpuCommand.java | 4 ++-- .../buildercommand/BuilderCustomMotherboardCommand.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 5b14e3b309..7ebcd5fcaf 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -43,8 +43,8 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } String socket = argumentList[8].trim(); - if (socket.equals("")) { - throw new PPException("Please enter a socket for the custom component"); + if (!socket.equals("LGA1200") || !socket.equals("LGA1700") || !socket.equals("AM4") || !socket.equals("AM5")) { + throw new PPException("Please enter a valid socket for the custom component (LGA1200, LGA1700, AM4, AM5))"); } CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index cc12f40dcc..be3bd44c64 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -37,8 +37,8 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St String formfactor = argumentList[3].trim().toLowerCase(); String socket = argumentList[4].trim(); - if (socket.equals("")) { - throw new PPException("Please enter a valid socket for the custom component"); + if (!socket.equals("LGA1200") || !socket.equals("LGA1700") || !socket.equals("AM4") || !socket.equals("AM5")) { + throw new PPException("Please enter a valid socket for the custom component (LGA1200, LGA1700, AM4, AM5)"); } if (FormFactorEnum.isFormFactor(formfactor) == false) { throw new PPException("Please enter a valid formfactor for the custom component (mini, micro, atx)"); From 076d731b2a27b3f6bcd59e85dd1984f54627fb26 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:08:26 +0800 Subject: [PATCH 262/420] Remove log file --- BigPP.log.1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 BigPP.log.1 diff --git a/BigPP.log.1 b/BigPP.log.1 deleted file mode 100644 index e69de29bb2..0000000000 From ceadd6923a089e0d45397e61f28151ffc408567a Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:13:52 +0800 Subject: [PATCH 263/420] Solve bug with custom cpu and motherboard not adding because of socket --- .../bigpp/command/buildercommand/BuilderCustomCpuCommand.java | 2 +- .../command/buildercommand/BuilderCustomMotherboardCommand.java | 2 +- .../command/buildercommand/BuilderCustomStorageCommand.java | 2 +- .../seedu/bigpp/command/buildercommand/BuilderInfoCommand.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java index 7ebcd5fcaf..cee0da57eb 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomCpuCommand.java @@ -43,7 +43,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } String socket = argumentList[8].trim(); - if (!socket.equals("LGA1200") || !socket.equals("LGA1700") || !socket.equals("AM4") || !socket.equals("AM5")) { + if (!socket.equals("LGA1200") && !socket.equals("LGA1700") && !socket.equals("AM4") && !socket.equals("AM5")) { throw new PPException("Please enter a valid socket for the custom component (LGA1200, LGA1700, AM4, AM5))"); } CPU cpu = new CPU(name, brand, price, cores, threads, baseClock, boostClock, power, socket); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java index be3bd44c64..749e2dbc72 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomMotherboardCommand.java @@ -37,7 +37,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St String formfactor = argumentList[3].trim().toLowerCase(); String socket = argumentList[4].trim(); - if (!socket.equals("LGA1200") || !socket.equals("LGA1700") || !socket.equals("AM4") || !socket.equals("AM5")) { + if (!socket.equals("LGA1200") && !socket.equals("LGA1700") && !socket.equals("AM4") && !socket.equals("AM5")) { throw new PPException("Please enter a valid socket for the custom component (LGA1200, LGA1700, AM4, AM5)"); } if (FormFactorEnum.isFormFactor(formfactor) == false) { diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java index b67ba98e45..e0a170f926 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderCustomStorageCommand.java @@ -41,7 +41,7 @@ public String addNewComponent(String[] argumentList, DataStorage dataStorage, St } String type = argumentList[1].trim(); - if (!type.equals("ssd") || !type.equals("hdd")) { + if (!type.equals("ssd") && !type.equals("hdd")) { throw new PPException("Please enter a valid type for the custom component (ssd, hdd)"); } Storage storage = new Storage(name, brand, price, type, size, power); diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java index 95487f62dd..e9e7955985 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderInfoCommand.java @@ -39,7 +39,7 @@ public String executeCommand(DataStorage dataStorage) } String outputString = "Here is the specifications of your selected " + componentTypeString + ": \n"; - return outputString + dataStorage.pcList.get(pcIndex).getComponent(componentTypeString); + return outputString + dataStorage.pcList.get(pcIndex).getComponent(componentTypeString).toString(true); } } From 287f1f435c8a240659c574b13f8ade6e00f71bcd Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:16:23 +0800 Subject: [PATCH 264/420] Revert docs change --- docs/UserGuide.md | 484 ++++++++++------------------------------------ 1 file changed, 99 insertions(+), 385 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index a2c60c3d3b..bffc46623f 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -5,30 +5,25 @@ - [Introduction](#introduction) - [Getting Started](#getting-started) - [Commands](#commands) - - [Common Commands](#common-commands) - - [**Bye command**](#bye-command) - - [**Help command**](#help-command) - - [PCViewer Mode Commands](#pcviewer-mode-commands) - - [**Add command**](#add-command) - - [**View command**](#view-command) - - [**Edit command**](#edit-command) - - [**Delete command**](#delete-command) - - [**Filter command**](#filter-command) - - [PCBuilder Mode Commands](#pcbuilder-mode-commands) - - [**List command**](#list-command) - - [**Select command**](#select-command) - - [**Unselect command**](#unselect-command) - - [**Compare command**](#compare-command) - - [**Budget command**](#budget-command) - - [**Name command**](#name-command) - - [**Custom command**](#custom-command) - - [**Back Command**](#back-command) + - [In PCViewer Mode](#in-pcviewer-mode) + - [`add PC_NAME`](#add-pc_name) + - [`view PC_INDEX`](#view-pc_index) + - [`edit PC_INDEX`](#edit-pc_index) + - [`delete PC_INDEX`](#delete-pc_index) + - [`filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) + - [In PCBuilder Mode](#in-pcbuilder-mode) + - [`list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]`](#list-component_type--component_flag-flag) + - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) + - [`unselect COMPONENT_TYPE`](#unselect-component_type) + - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) + - [`budget INTEGER`](#budget-integer) + - [`name NEW_NAME`](#name-new_name) + - [`custom COMPONENT_TYPE SPEC_1,SPEC_2, ...`](#custom-component_type-spec_1spec_2-) + - [`back`](#back) + - [`bye`](#bye) - [Additional Features](#additional-features) - [Compatibility Check](#compatibility-check) -- [Glossary](#glossary) - - [Parameters Glossary](#parameters-glossary) - - [Command glossary](#command-glossary) - - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) + - [Glossary](#glossary) ## Introduction @@ -39,8 +34,8 @@ BigPP is a command-line application designed for PC enthusiasts and professional - verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. -If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. - +If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions, or consult a search engine or even ask ChatGPT. +Text formatted like `this` represents commands that can be entered into the command line or output displayed in the terminal. ## Getting Started @@ -91,209 +86,31 @@ What would you like to do? =================================================== ``` -If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands -Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. - -For reference, - - PCViewer looks like this: -``` -=================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -What would you like to do? -=================================================== -``` - - PCBuilder looks like this -``` -=================================================== -PC builder -Custom-PC: [expert (copy)] - $2339.74/infinite - Complete -Components: -CPU : AMD Ryzen 9 7950X -CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 -GPU : MSI GAMING Z TRIO RTX3080 -Motherboard: Gigabyte B650I AORUS ULTRA -RAM : Corsair Vengeance RGB Pro 32 GB -Storage : Samsung 980 Pro -PSU : SeaSonic FOCUS PLUS 850 Gold -Chassis : Corsair iCUE 4000X RGB -What would you like to do? -=================================================== -``` ---- -### Common Commands -Common commands will be the commands that the user will be able to use in both the modes +### In PCViewer Mode +#### `add PC_NAME` +**Functionality:** Adds a PC with the name `PC_NAME` to your PC list -#### **Bye command** -Usage: `bye` -Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application - -**IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! - -#### **Help command** -Usage: `help` -Functionality: Displays the valid commands in the respective modes -Example: - - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: -``` -Here are the list of valid commands: -Add - Add a new PC of a given name -Delete - Delete the PC of a given index -Edit - Edit the PC of a given index -View - Display all the components of the PC of a given index -``` - - - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: -``` -Here are the list of valid commands: -list - List all components of a certain type -name - Change the name of the PC currently being edited to -budget - Change the budget of the PC currently being edited to -select - Add the component of type with index to the PC currently being edited -info - View all the specifications of the component of type currently selected for the build -unselect - Remove the component of type from the PC currently beingedited -custom - Creates a custom component of type with all the and adds it to the list of components of that type -compare & Compares all the specifications between the components oftype with indices and -``` -Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands - ---- -### PCViewer Mode Commands -PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode - - -#### **Add command** -Usage: `add PC_NAME` - -Functionality: Adds a PC with the name `PC_NAME` to your PC list - -Example: ->input: add NEWPC -``` -=================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete -What would you like to do? -=================================================== -Custom PC: [ NEWPC ] has been created -``` -Notes: newly added PCs will always begin with infinite budget - ---- -#### **View command** -Usage: `view PC_INDEX` - -Functionality: Views the PC with index `PC_INDEX` - -Example: ->input: view 3 -``` -=================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete -What would you like to do? -=================================================== -Prebuilt-PC: [expert] - $2339.74/infinite - Complete -Components: -CPU : AMD Ryzen 9 7950X -CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 -GPU : MSI GAMING Z TRIO RTX3080 -Motherboard: Gigabyte B650I AORUS ULTRA -RAM : Corsair Vengeance RGB Pro 32 GB -Storage : Samsung 980 Pro -PSU : SeaSonic FOCUS PLUS 850 Gold -Chassis : Corsair iCUE 4000X RGB -``` - ---- -#### **Edit command** -Usage: `edit PC_INDEX` - -Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. - -Example: ->input: edit 4 -``` -=================================================== -PC builder -Custom-PC: [NEWPC] - $0.0/infinite - Incomplete -Components: -CPU : - Not Selected - -CPU Cooler : - Not Selected - -GPU : - Not Selected - -Motherboard: - Not Selected - -RAM : - Not Selected - -Storage : - Not Selected - -PSU : - Not Selected - -Chassis : - Not Selected - - -What would you like to do? -=================================================== -Currently editing PC: NEWPC -``` +#### `view PC_INDEX` +**Functionality:** Views the PC with index `PC_INDEX` -Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the application would create a copy of it and mark it as a `CUSTOM_PC`. This is because we provide the prebuilts as a reference for the user, and not for editing. +#### `edit PC_INDEX` +**Functionality:** Enters PCBuilder mode for the PC with index `PC_INDEX` ---- -#### **Delete command** -Usage: `delete PC_INDEX` +#### `delete PC_INDEX` +**Functionality:** Deletes the PC with index `PC_INDEX` -Functionality: Deletes the PC with index `PC_INDEX` +#### `filter -name PC_NAME -cost /from PC_START_COST /to PC_END_COST -built PC_isComplete` +**Functionality:** Filters the PC with the following flags `-name`, `-cost` and `-built` -Example: ->input: delete 4 +**Example:** filter the PC List by the name of intermediate, in the range of starting from 1000 to 3000 and is a complete built ``` -=================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -What would you like to do? -=================================================== -Custom PC: [ NEWPC ] has been deleted -``` - ---- -#### **Filter command** -Usage: `filter FILTER_FLAGS` - - +input: filter -cost /from 1000 /to 3000 -built complete -Available flags: -> `-name PC_NAME` -> -> `-price /from PC_START_PRICE /to PC_END_PRICE` -> -> `-built PC_ISCOMPLETE` -> -> `-clear` - -Functionality: -The following explains the functionality of filtering by each flag: - - `-name PC_NAME` will filter the PC List by the given name - - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range - - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete - - `-clear` will clear all filters that were applied previously - -Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build ->input: filter -name intermediate -price /from 1000 /to 3000 -built complete +output: -``` =================================================== PC viewer Here is the list of PC Builds: @@ -302,17 +119,12 @@ What would you like to do? =================================================== Filter completed ``` -Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. - ---- -### PCBuilder Mode Commands -PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode -#### **List command** -Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` -Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. +### In PCBuilder Mode +#### `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` +**Functionality:** Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. -Example: +**Example:** ``` input: list cpu -name intel -price /from 1 /to 100 @@ -334,17 +146,15 @@ SOCKET: LGA1200 ================ ``` -Notes: Arguments with missing flags will be ignored. +#### `select COMPONENT_TYPE INDEX` +**Functionality:** Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build ---- -#### **Select command** -Usage: `select COMPONENT_TYPE COMPONENT_INDEX` +**Example:** add component of type `GPU` with index `4` to the current PC Build. +``` +input: select gpu 4 -Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build +output: -Example: add component of type `GPU` with index `4` to the current PC Build. ->input: select gpu 4 -``` =================================================== PC builder Custom-PC: [pc] - $934.06/infinite - Incomplete @@ -358,23 +168,32 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - -What would you like to do? -=================================================== -gpu added! : MSI GAMING Z TRIO RTX3080 - ``` -Notes: you can select any component at any time and do not need to list components before selecting as long as you know which index you want to add. ---- -#### **Unselect command** -Usage: `unselect COMPONENT_TYPE` +#### `unselect COMPONENT_TYPE` +**Functionality:** Removes the component of type `COMPONENT_TYPE` from your PC Build. -Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. +**Example:** remove compoennt of type `GPU` from the current PC Build. +``` +Previous PC compoenent list: +=================================================== +PC builder +Custom-PC: [pc] - $934.06/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - +``` +``` +input: unselect gpu -Example: remove component of type `GPU` from the current PC Build. +output: ->input: unselect gpu -``` =================================================== PC builder Custom-PC: [pc] - $0.0/infinite - Incomplete @@ -388,20 +207,16 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - -What would you like to do? -=================================================== -gpu removed! ``` ---- -#### **Compare command** -Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` - -Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format +#### `compare COMPONENT_TYPE INDEX_1 & INDEX_2` +**Functionality:** Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format -Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. ->input: compare cpu 1 & 2 +**Example:** Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. ``` +input: compare cpu 1 & 2 + +output: ________________________________________________________________________________________________ |NAME |Intel core i3-10100 |Intel core i5-10600k | |------------|----------------------------------------|----------------------------------------| @@ -416,15 +231,16 @@ ________________________________________________________________________________ ``` ---- -#### **Budget command** -Usage: `budget POSITIVE_INTEGER` -Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` -Example Set `BUDGET` of the PC you are currently editing to be $1000 ->input: budget 1000 +#### `budget INTEGER` +**Functionality:** Sets the budget of the current PC build to `INTEGER` + +**Example** Set budget of Prebuilt-PC [Beginner] to be $1000 ``` +input: budget 1000 + +output: =================================================== PC builder Custom-PC: [beginner (copy)] - $813.29/$1000.00 - Complete @@ -444,15 +260,14 @@ Current build budget is now: $1000.00 ``` ---- -#### **Name command** -Usage: `name PC_NAME` +#### `name NEW_NAME` +**Functionality:** Sets the name of the current PC build to `NEW_NAME` -Functionality: Sets the name of the current PC build to `PC_NAME` - -Example Set the name of PC to be MyPC ->input: name MyPC +**Example** Set the name of Prebuilt-PC [Beginner] to be MyPC ``` +input: name MyPC + +output: =================================================== PC builder Custom-PC: [MyPc] - $813.29/$1000.00 - Complete @@ -471,13 +286,13 @@ What would you like to do? Current build name is now: MyPc ``` ---- -#### **Custom command** -Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` - -Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build ->input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 +#### `custom COMPONENT_TYPE SPEC_1,SPEC_2, ...` +**Functionality:** Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the +current PC build ``` +input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + +output: =================================================== PC builder Custom-PC: [pc-1] - $99.5/infinite - Incomplete @@ -495,126 +310,25 @@ What would you like to do? =================================================== CPU added: Intel-new-cpu ``` -Notes: Please see the glossary for the `SPEC` definitions for each component - ---- -#### **Back Command** -Usage: `back` -Functionality: Goes back to PCViewer menu +#### `back` +**Functionality:** Goes back to PCViewer menu ---- +#### `bye` +**Functionality:** Exits the application ## Additional Features ### Compatibility Check -BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. - -1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. -2. Total power consumption of all `COMPONENT_TYPE` components in your build apart from `PSU` must be below 80% of the power supplied by the `PSU` selected to ensure there is enough power in your build, this check is ignored if your psu is not added. -3. Your `BUDGET` always needs to be larger than the total price of your entire build, this check is ignored if your budget is infinite. -4. Your `CPU` and `MOTHERBOARD` needs to have the same `SOCKET`. - -Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. - -Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. ->input: custom motherboard newmobo|AMD|10|atx|AM5|10 -``` -=================================================== -PC builder -Custom-PC: [pc] - $224.48/infinite - Incomplete -Components: -CPU : Intel core i3-10100 -CPU Cooler : - Not Selected - -GPU : - Not Selected - -Motherboard: - Not Selected - -RAM : - Not Selected - -Storage : - Not Selected - -PSU : - Not Selected - -Chassis : Fractal Design Pop XL Air - -What would you like to do? -=================================================== -Motherboard socket is not compatible with current cpu socket -Please choose another motherboard or change your cpu -``` +BigPP will check if your components that you added are compatible with each other. +If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you. +If your total items have power that exceeds 80% of your power supply rated power, it will result in incompatibility errors. -## Glossary - -### Parameters Glossary -| Parameter | Explanation | Type | Example | -| -------------- |:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| PC_NAME | Name of the PC Build | String | "The Beast" | -| PC_INDEX | Index number of the PC | Positive Integer | 1 | -| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | -| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | -| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | -| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | -| NAME | Name of the component | String | "Intel core i3-10100" | -| PRICE | Price of the component | Positive Float | 100.00 | -| BRAND | Name of the manufacturer of the compoenent | String | "msi" | -| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | -| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | -| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | -| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | -| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | -| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | -| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | -| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | -| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | -| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | -| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | -| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | -| TYPE | Type of storage device | String | "ssd" | -| EFFICIENCY | The power efficiency of power supply | String | gold | -| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | | | -| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | -| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | -| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | -| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | -| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | -| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | - -### Command glossary - - -| Viewer Menu Commands | Format | Flags | -|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| -| Add PC | `add PC_NAME` | nil | -| View PC | `view PC_INDEX` | nil | -| Edit PC | `edit PC_INDEX` | nil | -| Delete PC | `delete PC_INDEX` | nil | -| Filter PCs | `filter FILTER_FLAGS` | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | -| **Builder Menu Commands** | **Format** | **Flags** | -| List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | -| List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | -| List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | -| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | -| List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | -| List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | -| List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | -| List Chasis | `list chasis [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price` and `-formfactor` | -| Select Component | `select COMPONENT_TYPE COMPONENT_INDEX` | nil | -| Unselect Component | `unselect COMPONENT_TYPE COMPONENT_INDEX` | nil | -| Compare Components | `compare COMPONENT_TYPE INDEX_1 & INDEX_2` | nil | -| Budget | `budget POSITIVE_INTEGER` | nil | -| Name PC | `name PC_NAME` | nil | -| Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#Acceptable-Custom-Component-Commands) | -| Back | `back` | nil | - -#### Acceptable Custom Component Commands -The acceptable formats for custom component creation are as shown below - -1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` -2. `custom gpu NAME|BRAND|PRICE|POWER|FORMFACTOR` -3. `custom cpu-cooler NAME|BRAND|PRICE|RPM|NOISE|POWER` -4. `custom motherboard NAME|BRAND|PRICE|FORMFACTOR|SOCKET|POWER` -5. `custom ram NAME|BRAND|PRICE|MEMORY|STICKS|SPEED|POWER` -6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` -7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` -8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` +if your the item you want to add exceeds your total budget, it will not allow you to add the component. +If your CPU has a different socket than your Motherboard or vice versa, it will not allow you to add it. +### Glossary From 5f0879c75a0ad84d12c33476668902face6d9421 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:17:13 +0800 Subject: [PATCH 265/420] Remove random ' from storage toString method --- src/main/java/seedu/bigpp/component/storage/Storage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/bigpp/component/storage/Storage.java b/src/main/java/seedu/bigpp/component/storage/Storage.java index 2532f69661..8a4513a8f8 100644 --- a/src/main/java/seedu/bigpp/component/storage/Storage.java +++ b/src/main/java/seedu/bigpp/component/storage/Storage.java @@ -49,7 +49,7 @@ public String toString(Boolean getDetails) { return "NAME: " + super.getName() + "\nBRAND: " + super.getBrand() + "\nPRICE: " + super.getPrice() + - "\nTYPE: " + type + '\'' + + "\nTYPE: " + type + "\nSIZE: " + size + "\nPOWER: " + power; } else { From 660b066f7322dd512f78ae205da6a2fc4ef58b69 Mon Sep 17 00:00:00 2001 From: HackMD <37423+hackmd-hub[bot]@users.noreply.github.com> Date: Sat, 1 Apr 2023 20:35:07 +0000 Subject: [PATCH 266/420] last changed at Apr 2, 2023 4:31 AM, pushed by Magmanat --- docs/UserGuide.md | 396 +++++++++++++++++++++++++++++++++------------- 1 file changed, 285 insertions(+), 111 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 2c072c4fb0..b57064cef0 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -2,27 +2,33 @@ # User Guide ## Table of contents -- [Introduction](#introduction) -- [Getting Started](#getting-started) -- [Commands](#commands) - - [In PCViewer Mode](#in-pcviewer-mode) - - [`add PC_NAME`](#add-pc_name) - - [`view PC_INDEX`](#view-pc_index) - - [`edit PC_INDEX`](#edit-pc_index) - - [`delete PC_INDEX`](#delete-pc_index) - - [`filter -name PC_NAME -price /from PC_START_COST /to PC_END_COST -built PC_isComplete`](#filter--name-pc_name--cost-from-pc_start_cost-to-pc_end_cost--built-pc_iscomplete) - - [In PCBuilder Mode](#in-pcbuilder-mode) - - [`list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]`](#list-component_type--component_flag-flag) - - [`select COMPONENT_TYPE INDEX`](#select-component_type-index) - - [`unselect COMPONENT_TYPE`](#unselect-component_type) - - [`compare COMPONENT_TYPE INDEX_1 & INDEX_2`](#compare-component_type-index_1--index_2) - - [`budget INTEGER`](#budget-integer) - - [`name NEW_NAME`](#name-new_name) - - [`custom COMPONENT_TYPE SPEC_1,SPEC_2, ...`](#custom-component_type-spec_1spec_2-) - - [`back`](#back) -- [Additional Features](#additional-features) - - [Compatibility Check](#compatibility-check) - - [Glossary](#glossary) +- [Introduction](#Introduction) +- [Getting Started](#Getting-Started) +- [Commands](#Commands) + - [Common Commands](#Common-Commands) + - [**Bye Command**](#Bye-Command) + - [**Help Command**](#Help-Command) + - [PCViewer Mode Commands](#PCViewer-Mode-Commands) + - [**Add Command**](#Add-Command) + - [**View Command**](#View-Command) + - [**Edit Command**](#Edit-Command) + - [**Delete Command**](#Delete-Command) + - [**Filter Command**](#Filter-Command) + - [PCBuilder Mode Commands](#PCBuilder-Mode-Commands) + - [**List Command**](#List-Command) + - [**Select Command**](#Select-Command) + - [**Unselect Command**](#Unselect-Command) + - [**Compare Command**](#Compare-Command) + - [**Budget Command**](#Budget-Command) + - [**Name Command**](#Name-Command) + - [**Custom Command**](#Custom-Command) + - [**Back Command**](#Back-Command) +- [Additional Features](#Additional-Features) + - [Compatibility Check](#Compatibility-Check) +- [Glossary](#Glossary) + - [Parameters Glossary](#Parameters-Glossary) + - [Command Glossary](#Command-Glossary) + - [Acceptable Custom Component Commands](#Acceptable-Custom-Component-Commands) ## Introduction @@ -33,8 +39,8 @@ BigPP is a command-line application designed for PC enthusiasts and professional - verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. -If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions, or consult a search engine or even ask ChatGPT. -Text formatted like `this` represents commands that can be entered into the command line or output displayed in the terminal. +If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. + ## Getting Started @@ -88,7 +94,7 @@ What would you like to do? If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands -Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. For reference, - PCViewer looks like this: @@ -124,17 +130,17 @@ What would you like to do? ### Common Commands Common commands will be the commands that the user will be able to use in both the modes -#### **Bye command** +#### **Bye Command** Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application **IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! -#### **Help command** +#### **Help Command** Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - - Entering the help command in the PCViewer mode will show the following output: + - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: ``` Here are the list of valid commands: Add - Add a new PC of a given name @@ -143,7 +149,7 @@ Edit - Edit the PC of a given index View - Display all the components of the PC of a given index ``` - - Entering the help command in the PCBuilder mode will show the following output: + - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: ``` Here are the list of valid commands: list - List all components of a certain type @@ -161,10 +167,14 @@ Notes: Entering the help command in either PCViewer mode or PCBuilder mode will ### PCViewer Mode Commands PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode -#### **Add command** + +#### **Add Command** Usage: `add PC_NAME` + Functionality: Adds a PC with the name `PC_NAME` to your PC list + Example: +>input: add NEWPC ``` =================================================== PC viewer @@ -179,37 +189,111 @@ Custom PC: [ NEWPC ] has been created ``` Notes: newly added PCs will always begin with infinite budget -#### View command +--- +#### **View Command** Usage: `view PC_INDEX` + Functionality: Views the PC with index `PC_INDEX` + Example: +>input: view 3 +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +4.Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +What would you like to do? +=================================================== +Prebuilt-PC: [expert] - $2339.74/infinite - Complete +Components: +CPU : AMD Ryzen 9 7950X +CPU Cooler : Cooler Master MASTERLIQUID ML120L RGB V2 +GPU : MSI GAMING Z TRIO RTX3080 +Motherboard: Gigabyte B650I AORUS ULTRA +RAM : Corsair Vengeance RGB Pro 32 GB +Storage : Samsung 980 Pro +PSU : SeaSonic FOCUS PLUS 850 Gold +Chassis : Corsair iCUE 4000X RGB +``` -#### Edit command +--- +#### **Edit Command** Usage: `edit PC_INDEX` -Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. If the PC that the user has selected to edit is a **prebuilt PC**, the application would create a copy of it and mark it as a **custom PC**. This is we provide the prebuilts as a reference for the user. -#### Delete command +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. + +Example: +>input: edit 4 +``` +=================================================== +PC builder +Custom-PC: [NEWPC] - $0.0/infinite - Incomplete +Components: +CPU : - Not Selected - +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : - Not Selected - + +What would you like to do? +=================================================== +Currently editing PC: NEWPC +``` + +Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the application would create a copy of it and mark it as a `CUSTOM_PC`. This is because we provide the prebuilts as a reference for the user, and not for editing. + +--- +#### **Delete Command** Usage: `delete PC_INDEX` + Functionality: Deletes the PC with index `PC_INDEX` -#### Filter command -Usage: `filter FLAGS` +Example: +>input: delete 4 +``` +=================================================== +PC viewer +Here is the list of PC Builds: +1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete +2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete +3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete +What would you like to do? +=================================================== +Custom PC: [ NEWPC ] has been deleted +``` + +--- +#### **Filter Command** +Usage: `filter FILTER_FLAGS` -Available flags: - - `-name PC_NAME` - - `-price /from PC_START_COST /to PC_END_COST` - - `-built PC_ISCOMPLETE` - - `-clear` -Functionality: - - Filter u `-name PC_NAME` to filter the PC List by the given name -Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build -``` -input: filter -name intermediate -price /from 1000 /to 3000 -built complete +Available flags: +> `-name PC_NAME` +> +> `-price /from PC_START_PRICE /to PC_END_PRICE` +> +> `-built PC_ISCOMPLETE` +> +> `-clear` + +Functionality: +The following explains the functionality of filtering by each flag: + - `-name PC_NAME` will filter the PC List by the given name + - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range + - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete + - `-clear` will clear all filters that were applied previously -output: +Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build +>input: filter -name intermediate -price /from 1000 /to 3000 -built complete +``` =================================================== PC viewer Here is the list of PC Builds: @@ -218,18 +302,15 @@ What would you like to do? =================================================== Filter completed ``` -Notes: -#### `filter -clear` -Functionality: Clears all filters and shows all PCs currently in the list -Example: +Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- ### PCBuilder Mode Commands PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode -#### List command -Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG FLAG]` -Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. +#### **List Command** +Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` +Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. Example: ``` @@ -255,16 +336,15 @@ SOCKET: LGA1200 Notes: Arguments with missing flags will be ignored. -#### Select command -Usage: `select COMPONENT_TYPE INDEX` +--- +#### **Select Command** +Usage: `select COMPONENT_TYPE COMPONENT_INDEX` + Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build Example: add component of type `GPU` with index `4` to the current PC Build. +>input: select gpu 4 ``` -input: select gpu 4 - -output: - =================================================== PC builder Custom-PC: [pc] - $934.06/infinite - Incomplete @@ -278,33 +358,23 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - +What would you like to do? +=================================================== +gpu added! : MSI GAMING Z TRIO RTX3080 + ``` +Notes: you can select any component at any time and do not need to list components before selecting as long as you know which index you want to add. -#### Unselect command +--- +#### **Unselect Command** Usage: `unselect COMPONENT_TYPE` -Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. -Example: remove compoennt of type `GPU` from the current PC Build. -``` -Previous PC compoenent list: -=================================================== -PC builder -Custom-PC: [pc] - $934.06/infinite - Incomplete -Components: -CPU : - Not Selected - -CPU Cooler : - Not Selected - -GPU : MSI GAMING Z TRIO RTX3080 -Motherboard: - Not Selected - -RAM : - Not Selected - -Storage : - Not Selected - -PSU : - Not Selected - -Chassis : - Not Selected - -``` -``` -input: unselect gpu +Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. -output: +Example: remove component of type `GPU` from the current PC Build. +>input: unselect gpu +``` =================================================== PC builder Custom-PC: [pc] - $0.0/infinite - Incomplete @@ -318,17 +388,20 @@ Storage : - Not Selected - PSU : - Not Selected - Chassis : - Not Selected - +What would you like to do? +=================================================== +gpu removed! ``` -#### Compare command +--- +#### **Compare Command** Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` + Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. +>input: compare cpu 1 & 2 ``` -input: compare cpu 1 & 2 - -output: ________________________________________________________________________________________________ |NAME |Intel core i3-10100 |Intel core i5-10600k | |------------|----------------------------------------|----------------------------------------| @@ -343,17 +416,15 @@ ________________________________________________________________________________ ``` +--- +#### **Budget Command** +Usage: `budget POSITIVE_INTEGER` +Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` -#### Budget command -Usage: `budget INTEGER` -Functionality: Sets the budget of the current PC build to `INTEGER` - -Example Set budget of Prebuilt-PC [Beginner] to be $1000 +Example Set `BUDGET` of the PC you are currently editing to be $1000 +>input: budget 1000 ``` -input: budget 1000 - -output: =================================================== PC builder Custom-PC: [beginner (copy)] - $813.29/$1000.00 - Complete @@ -373,15 +444,15 @@ Current build budget is now: $1000.00 ``` -#### Name command -Usage: `name NEW_NAME` -Functionality: Sets the name of the current PC build to `NEW_NAME` +--- +#### **Name Command** +Usage: `name PC_NAME` -Example Set the name of Prebuilt-PC [Beginner] to be MyPC -``` -input: name MyPC +Functionality: Sets the name of the current PC build to `PC_NAME` -output: +Example Set the name of PC to be MyPC +>input: name MyPC +``` =================================================== PC builder Custom-PC: [MyPc] - $813.29/$1000.00 - Complete @@ -400,13 +471,13 @@ What would you like to do? Current build name is now: MyPc ``` -#### Custom command +--- +#### **Custom Command** Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` -Functionality: Adds a custom component of type COMPONENT_TYPE with the specs SPEC_1, SPEC_2, ... to the current PC build -``` -input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 -output: +Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build +>input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 +``` =================================================== PC builder Custom-PC: [pc-1] - $99.5/infinite - Incomplete @@ -424,23 +495,126 @@ What would you like to do? =================================================== CPU added: Intel-new-cpu ``` +Notes: Please see the glossary for the `SPEC` definitions for each component + +--- +#### **Back Command** +Usage: `back` -#### `back` Functionality: Goes back to PCViewer menu +--- ## Additional Features ### Compatibility Check -BigPP will check if your components that you added are compatible with each other. +BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. + +1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. +2. Total power consumption of all `COMPONENT_TYPE` components in your build apart from `PSU` must be below 80% of the power supplied by the `PSU` selected to ensure there is enough power in your build, this check is ignored if your psu is not added. +3. Your `BUDGET` always needs to be larger than the total price of your entire build, this check is ignored if your budget is infinite. +4. Your `CPU` and `MOTHERBOARD` needs to have the same `SOCKET`. + +Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. + +Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. +>input: custom motherboard newmobo|AMD|10|atx|AM5|10 +``` +=================================================== +PC builder +Custom-PC: [pc] - $224.48/infinite - Incomplete +Components: +CPU : Intel core i3-10100 +CPU Cooler : - Not Selected - +GPU : - Not Selected - +Motherboard: - Not Selected - +RAM : - Not Selected - +Storage : - Not Selected - +PSU : - Not Selected - +Chassis : Fractal Design Pop XL Air + +What would you like to do? +=================================================== +Motherboard socket is not compatible with current cpu socket +Please choose another motherboard or change your cpu +``` -If your chassis is mini size but you want to use an atx size gpu, it will result in an incompatibility error and suggest changes to you. -If your total items have power that exceeds 80% of your power supply rated power, it will result in incompatibility errors. -if your the item you want to add exceeds your total budget, it will not allow you to add the component. +## Glossary + +### Parameters Glossary +| Parameter | Explanation | Type | Example | +| ---------------- |:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| EFFICIENCY | The power efficiency of power supply | String | "gold" | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | +| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | +| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | +| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | +| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | +| TYPE | Type of storage device | String | "ssd"/"hdd" | +| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | +| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | + +### Command Glossary + + +| Viewer Menu Commands | Format | Flags | +|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| +| Add PC | `add PC_NAME` | nil | +| View PC | `view PC_INDEX` | nil | +| Edit PC | `edit PC_INDEX` | nil | +| Delete PC | `delete PC_INDEX` | nil | +| Filter PCs | `filter FILTER_FLAGS` | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| **Builder Menu Commands** | **Format** | **Flags** | +| List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | +| List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | +| List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | +| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | +| List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | +| List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | +| List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | +| List Chasis | `list chasis [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price` and `-formfactor` | +| Select Component | `select COMPONENT_TYPE COMPONENT_INDEX` | nil | +| Unselect Component | `unselect COMPONENT_TYPE COMPONENT_INDEX` | nil | +| Compare Components | `compare COMPONENT_TYPE INDEX_1 & INDEX_2` | nil | +| Budget | `budget POSITIVE_INTEGER` | nil | +| Name PC | `name PC_NAME` | nil | +| Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#Acceptable-Custom-Component-Commands) | +| Back | `back` | nil | + +#### Acceptable Custom Component Commands +The acceptable formats for custom component creation are as shown below + +1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` +2. `custom gpu NAME|BRAND|PRICE|POWER|FORMFACTOR` +3. `custom cpu-cooler NAME|BRAND|PRICE|RPM|NOISE|POWER` +4. `custom motherboard NAME|BRAND|PRICE|FORMFACTOR|SOCKET|POWER` +5. `custom ram NAME|BRAND|PRICE|MEMORY|STICKS|SPEED|POWER` +6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` +7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` +8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` -If your CPU has a different socket than your Motherboard or vice versa, it will not allow you to add it. -### Glossary From 2575772a665b6c18aeb1d050c9147fa4cadc7ea2 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:39:28 +0800 Subject: [PATCH 267/420] Fix Junit test to actual output --- .../BuilderListComponentCommandTest.java | 43 +++++++------------ 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java index c87870efbd..6da74a27dc 100644 --- a/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java +++ b/src/test/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommandTest.java @@ -15,34 +15,20 @@ public class BuilderListComponentCommandTest { */ private static final String MISSING_NAME_EXCEPTION_MESSAGE = "Please enter a name after the flag"; - private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + "1.\n" - + "NAME: Intel core i3-10100\n" + "BRAND: Intel\n" + "PRICE: 99.5\n" + "CORES: 4\n" + "THREADS: 8\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.3\n" + "POWER: 65.0\n" + "SOCKET: LGA1200\n" + "================\n" - + "2.\n" + "NAME: Intel core i5-10600k\n" + "BRAND: Intel\n" + "PRICE: 182.47\n" + "CORES: 6\n" - + "THREADS: 12\n" + "BASECLOCK: 4.1\n" + "BOOSTCLOCK: 4.8\n" + "POWER: 125.0\n" + "SOCKET: LGA1200\n" - + "================\n" + "3.\n" + "NAME: Intel core i7-10700k\n" + "BRAND: Intel\n" + "PRICE: 269.95\n" - + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 5.1\n" + "POWER: 125.0\n" - + "SOCKET: LGA1200\n" + "================\n" + "4.\n" + "NAME: Intel core i3-12100f\n" + "BRAND: Intel\n" - + "PRICE: 106.93\n" + "CORES: 4\n" + "THREADS: 8\n" + "BASECLOCK: 3.3\n" + "BOOSTCLOCK: 4.3\n" - + "POWER: 58.0\n" + "SOCKET: LGA1700\n" + "================\n" + "5.\n" + "NAME: Intel core i5-12600k\n" - + "BRAND: Intel\n" + "PRICE: 213.82\n" + "CORES: 10\n" + "THREADS: 20\n" + "BASECLOCK: 3.7\n" - + "BOOSTCLOCK: 4.9\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" + "6.\n" - + "NAME: Intel core i7-12700k\n" + "BRAND: Intel\n" + "PRICE: 312.88\n" + "CORES: 12\n" + "THREADS: 24\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 5.0\n" + "POWER: 125.0\n" + "SOCKET: LGA1700\n" + "================\n" - + "7.\n" + "NAME: AMD Ryzen 3 3200G\n" + "BRAND: AMD\n" + "PRICE: 97.5\n" + "CORES: 4\n" + "THREADS: 4\n" - + "BASECLOCK: 3.6\n" + "BOOSTCLOCK: 4.0\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" - + "8.\n" + "NAME: AMD Ryzen 5 5600X\n" + "BRAND: AMD\n" + "PRICE: 156.64\n" + "CORES: 6\n" + "THREADS: 12\n" - + "BASECLOCK: 3.7\n" + "BOOSTCLOCK: 4.6\n" + "POWER: 65.0\n" + "SOCKET: AM4\n" + "================\n" - + "9.\n" + "NAME: AMD Ryzen 7 5800X\n" + "BRAND: AMD\n" + "PRICE: 211.33\n" + "CORES: 8\n" + "THREADS: 16\n" - + "BASECLOCK: 3.8\n" + "BOOSTCLOCK: 4.7\n" + "POWER: 105.0\n" + "SOCKET: AM4\n" + "================\n" - + "10.\n" + "NAME: AMD Ryzen 5 7600X\n" + "BRAND: AMD\n" + "PRICE: 240.86\n" + "CORES: 6\n" - + "THREADS: 12\n" + "BASECLOCK: 4.7\n" + "BOOSTCLOCK: 5.3\n" + "POWER: 105.0\n" + "SOCKET: AM5\n" - + "================\n" + "11.\n" + "NAME: AMD Ryzen 7 7700X\n" + "BRAND: AMD\n" + "PRICE: 341.29\n" - + "CORES: 8\n" + "THREADS: 16\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.4\n" + "POWER: 105.0\n" - + "SOCKET: AM5\n" + "================\n" + "12.\n" + "NAME: AMD Ryzen 9 7950X\n" + "BRAND: AMD\n" - + "PRICE: 589.0\n" + "CORES: 16\n" + "THREADS: 32\n" + "BASECLOCK: 4.5\n" + "BOOSTCLOCK: 5.7\n" - + "POWER: 170.0\n" + "SOCKET: AM5\n" + "================\n"; - + private static final String EXPECTED_OUTPUT = "Here are all available components of type 'cpu': \n" + + "1.\nIntel core i3-10100\n================\n" + + "2.\nIntel core i5-10600k\n================\n" + + "3.\nIntel core i7-10700k\n================\n" + + "4.\nIntel core i3-12100f\n================\n" + + "5.\nIntel core i5-12600k\n================\n" + + "6.\nIntel core i7-12700k\n================\n" + + "7.\nAMD Ryzen 3 3200G\n================\n" + + "8.\nAMD Ryzen 5 5600X\n================\n" + + "9.\nAMD Ryzen 7 5800X\n================\n" + + "10.\nAMD Ryzen 5 7600X\n================\n" + + "11.\nAMD Ryzen 7 7700X\n================\n" + + "12.\nAMD Ryzen 9 7950X\n================\n"; + private DataStorage dataStorage = new DataStorage(); @Test @@ -54,6 +40,7 @@ public void executeCommand_listCpu_success() throws PPException { UI.setPCBuilderMode(0); String listComponentCommandResult = new BuilderListComponentCommand(CPU_TYPE).executeCommand(dataStorage); + assertEquals(EXPECTED_OUTPUT, listComponentCommandResult); } From 8efffa2fdfb2631d5d392f5bda47967cd0547f12 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:52:46 +0800 Subject: [PATCH 268/420] Disable shadowjar --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f83d0f4674..35b1f264df 100644 --- a/build.gradle +++ b/build.gradle @@ -33,10 +33,10 @@ application { mainClass = "seedu.bigpp.BigPP" } -shadowJar { - archiveBaseName = "bigpp" - archiveClassifier = null -} +// shadowJar { +// archiveBaseName = "bigpp" +// archiveClassifier = null +// } checkstyle { toolVersion = '10.2' From 891e2f17b079dafb3f5d7184fad2494122612246 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:54:36 +0800 Subject: [PATCH 269/420] Enable shadowjar --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 35b1f264df..f83d0f4674 100644 --- a/build.gradle +++ b/build.gradle @@ -33,10 +33,10 @@ application { mainClass = "seedu.bigpp.BigPP" } -// shadowJar { -// archiveBaseName = "bigpp" -// archiveClassifier = null -// } +shadowJar { + archiveBaseName = "bigpp" + archiveClassifier = null +} checkstyle { toolVersion = '10.2' From cf5629a3db0800e970c7921257def48c5adaffbe Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:58:57 +0800 Subject: [PATCH 270/420] Edit EXPECTED.TXT to fit the new changes --- text-ui-test/EXPECTED.TXT | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 453ca4f64a..3db26d1cd0 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -32,8 +32,7 @@ Here is the list of PC Builds: 3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete What would you like to do? =================================================== - -=================================================== + =================================================== PC viewer Here is the list of PC Builds: 1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete @@ -43,8 +42,7 @@ Here is the list of PC Builds: What would you like to do? =================================================== Custom PC: [ newpc1 ] has been created - -=================================================== + =================================================== PC viewer Here is the list of PC Builds: 1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete @@ -55,8 +53,7 @@ Here is the list of PC Builds: What would you like to do? =================================================== Custom PC: [ newpc2 ] has been created - -=================================================== + =================================================== PC viewer Here is the list of PC Builds: 1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete From 85e4f37eddcf0e8c12c27e8e8d6a64b7c4f2b11f Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 13:20:20 +0800 Subject: [PATCH 271/420] Add psu filter --- .../BuilderListComponentCommand.java | 123 ++++++++++-------- .../seedu/bigpp/component/ComponentList.java | 29 +++++ 2 files changed, 98 insertions(+), 54 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index abbf9432dd..9705f59503 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -15,6 +15,7 @@ import static seedu.bigpp.component.ComponentType.MOTHERBOARD_TYPE; import static seedu.bigpp.component.ComponentType.CHASSIS_TYPE; import static seedu.bigpp.component.ComponentType.CPU_COOLER_TYPE; +import static seedu.bigpp.component.ComponentType.PSU_TYPE; import java.util.ArrayList; import java.util.Arrays; @@ -91,8 +92,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { switch (componentType) { case CHASSIS_TYPE: if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlagChassis(componentList, flagsArray, flagAndDescriptionArray, - componentIndexes); + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentIndexes, componentType); } break; case CPU_TYPE: @@ -143,8 +144,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { case GPU_TYPE: // handle power and size flag if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlagGpu(componentList, flagsArray, flagAndDescriptionArray, - componentIndexes); + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentIndexes, componentType); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { componentList = handlePowerFlag(userInputString, componentList, flagsArray, @@ -154,9 +155,9 @@ public String executeCommand(DataStorage dataStorage) throws PPException { case MOTHERBOARD_TYPE: // handle formfactor, socket and power flag if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlagMotherboard(userInputString, componentList, flagsArray, + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, - componentIndexes); + componentIndexes, componentType); } if (containsFlag(flagAndDescriptionArray, SOCKET_FLAG)) { componentList = handleSocketFlag(userInputString, componentList, flagsArray, @@ -201,6 +202,21 @@ public String executeCommand(DataStorage dataStorage) throws PPException { flagAndDescriptionArray, componentIndexes, componentType); } break; + case PSU_TYPE: + // handle power, formfactor and efficiency flag + if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { + componentList = handlePowerFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); + } + if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, + componentIndexes, componentType); + } + if (containsFlag(flagAndDescriptionArray, EFFICIENCY_FLAG)) { + componentList = handleEfficiencyFlag(componentList, flagsArray, flagAndDescriptionArray, + componentIndexes); + } default: break; } @@ -229,6 +245,34 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } + //handle efficiency flag, can be bronze, silver or gold + private ComponentList handleEfficiencyFlag(ComponentList componentList, ArrayList flagsArray, + String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + int efficiencyIndex = indexOfFlag(flagAndDescriptionArray, EFFICIENCY_FLAG); + if (efficiencyIndex == flagAndDescriptionArray.length - 1) { + throw new PPException("Please enter a description after the flag"); + } + + String efficiencyDescription = flagAndDescriptionArray[efficiencyIndex + 1].trim().toLowerCase(); + + String[] efficiencyDescriptionArray = Arrays.copyOfRange(efficiencyDescription.split(" "), 0, 1); + if (hasFlag(efficiencyDescriptionArray)) { + throw new PPException("Flag detected in efficiency description"); + } + + String efficiency = efficiencyDescriptionArray[0]; + if (!efficiency.equals("bronze") && !efficiency.equals("silver") && !efficiency.equals("gold")) { + throw new PPException("Please enter a valid efficiency description (bronze, silver or gold)"); + } + + flagsArray.add("Efficiency: " + efficiency); + + componentList = ComponentList.filterByEfficiencyPsu(componentList, efficiency, componentIndexes); + + + return componentList; + } + // handle size flag, size can be 512, 1024, 2048, 4096 private ComponentList handleSizeFlag(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { @@ -374,9 +418,6 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< } String memoryDescription = userInputString.split(MEMORY_FLAG)[1].trim().toLowerCase(); - if (memoryDescription.split("\\s+").length < 1) { - throw new PPException("Please enter a full memory description"); - } String[] memoryDescriptionArray = Arrays.copyOfRange(memoryDescription.split(" "), 0, 1); if (hasFlag(memoryDescriptionArray)) { @@ -400,9 +441,9 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< } // handle formfactor flag, formfactor could be string ATX, Micro or Mini - private ComponentList handleFormFactorFlagMotherboard(String userInputString, ComponentList componentList, + private ComponentList handleFormFactorFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) throws PPException { int formFactorIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); if (formFactorIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); @@ -425,7 +466,19 @@ private ComponentList handleFormFactorFlagMotherboard(String userInputString, flagsArray.add("Form Factor: " + formFactor); - componentList = ComponentList.filterByFormFactorMotherboard(componentList, formFactor, componentIndexes); + switch(componentType) { + case MOTHERBOARD_TYPE: + componentList = ComponentList.filterByFormFactorMotherboard(componentList, formFactor, componentIndexes); + break; + case CHASSIS_TYPE: + componentList = ComponentList.filterByFormFactorChassis(componentList, formFactor, componentIndexes); + break; + case GPU_TYPE: + componentList = ComponentList.filterByFormFactorGpu(componentList, formFactor, componentIndexes); + break; + default: + break; + } return componentList; } @@ -674,6 +727,10 @@ private ComponentList handlePowerFlag(String userInputString, ComponentList handlePowerFlag(String userInputString, ComponentList handleFormFactorFlagGpu(ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int formFactorFlagIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); - if (formFactorFlagIndex == flagAndDescriptionArray.length - 1) { - throw new PPException("Please enter a size after the flag"); - } - - String formFactor = flagAndDescriptionArray[formFactorFlagIndex + 1].trim().toLowerCase(); - - if (isFlag(formFactor)) { - throw new PPException("Flag detected in size description. Please enter a valid size"); - } - - if (!formFactor.equals("micro") && !formFactor.equals("mini") && !formFactor.equals("atx")) { - throw new PPException("Please enter a valid size (atx, mini or micro)"); - } - flagsArray.add("size: " + formFactor); - componentList = ComponentList.filterByFormFactorGpu(componentList, formFactor, componentIndexes); - return componentList; - } - // handle boost clock flag, boost clock is a float and has a /from and /to flag private ComponentList handleBoostClockFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, @@ -892,27 +928,6 @@ private ComponentList handleCoreFlag(ComponentList componentList, ArrayLis return componentList; } - private ComponentList handleFormFactorFlagChassis(ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { - int formFactorFlagIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); - if (formFactorFlagIndex == flagAndDescriptionArray.length - 1) { - throw new PPException("Please enter a size after the flag"); - } - - String formFactor = flagAndDescriptionArray[formFactorFlagIndex + 1].trim().toLowerCase(); - - if (isFlag(formFactor)) { - throw new PPException("Flag detected in size description. Please enter a valid size"); - } - - if (!formFactor.equals("micro") && !formFactor.equals("mini") && !formFactor.equals("atx")) { - throw new PPException("Please enter a valid formfactor (micro, mini or atx)"); - } - flagsArray.add("size: " + formFactor); - componentList = ComponentList.filterByFormFactorChassis(componentList, formFactor, componentIndexes); - return componentList; - } - private ComponentList handlePriceFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { diff --git a/src/main/java/seedu/bigpp/component/ComponentList.java b/src/main/java/seedu/bigpp/component/ComponentList.java index a93beba7ef..a560c75a4c 100644 --- a/src/main/java/seedu/bigpp/component/ComponentList.java +++ b/src/main/java/seedu/bigpp/component/ComponentList.java @@ -7,6 +7,7 @@ import seedu.bigpp.component.motherboard.Motherboard; import seedu.bigpp.component.ram.RAM; import seedu.bigpp.component.storage.Storage; +import seedu.bigpp.component.psu.PSU; import java.util.ArrayList; @@ -35,6 +36,34 @@ public String getListString(ArrayList componentIndexes) { return outputString; } + //filter psu by efficiency. efficiency can be bronze, silver or gold + public static ComponentList filterByEfficiencyPsu(ComponentList componentList, String efficiency, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + PSU psu = (PSU) componentList.get(i); + if (psu.getEfficiency().toLowerCase().contains(efficiency)) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + + // filter psu by power + public static ComponentList filterByPowerPsu(ComponentList componentList, int from, int to, + ArrayList componentIndexes) { + ComponentList filteredComponentList = new ComponentList<>(); + for (int i = 0; i <= componentList.size() - 1; i++) { + PSU psu = (PSU) componentList.get(i); + if (psu.getPower() >= from && psu.getPower() <= to) { + filteredComponentList.add(componentList.get(i)); + componentIndexes.add(i + 1); + } + } + return filteredComponentList; + } + // filter storage by power public static ComponentList filterByPowerStorage(ComponentList componentList, int from, int to, ArrayList componentIndexes) { From 5c3c6a431c175cdb9418997980e9f7e9ae5e878a Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 13:21:25 +0800 Subject: [PATCH 272/420] Fix checkstyle --- .../BuilderListComponentCommand.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java index 9705f59503..c4534e1674 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderListComponentCommand.java @@ -92,7 +92,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { switch (componentType) { case CHASSIS_TYPE: if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); } break; @@ -144,7 +145,8 @@ public String executeCommand(DataStorage dataStorage) throws PPException { case GPU_TYPE: // handle power and size flag if (containsFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG)) { - componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, flagAndDescriptionArray, + componentList = handleFormFactorFlag(userInputString, componentList, flagsArray, + flagAndDescriptionArray, componentIndexes, componentType); } if (containsFlag(flagAndDescriptionArray, POWER_FLAG)) { @@ -217,6 +219,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { componentList = handleEfficiencyFlag(componentList, flagsArray, flagAndDescriptionArray, componentIndexes); } + break; default: break; } @@ -245,7 +248,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return outputString + componentList.getListString(componentIndexes); } - //handle efficiency flag, can be bronze, silver or gold + // handle efficiency flag, can be bronze, silver or gold private ComponentList handleEfficiencyFlag(ComponentList componentList, ArrayList flagsArray, String[] flagAndDescriptionArray, ArrayList componentIndexes) throws PPException { int efficiencyIndex = indexOfFlag(flagAndDescriptionArray, EFFICIENCY_FLAG); @@ -269,7 +272,6 @@ private ComponentList handleEfficiencyFlag(ComponentList componentList, Ar componentList = ComponentList.filterByEfficiencyPsu(componentList, efficiency, componentIndexes); - return componentList; } @@ -443,7 +445,8 @@ private ComponentList handleMemoryFlag(String userInputString, ComponentList< // handle formfactor flag, formfactor could be string ATX, Micro or Mini private ComponentList handleFormFactorFlag(String userInputString, ComponentList componentList, ArrayList flagsArray, - String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) throws PPException { + String[] flagAndDescriptionArray, ArrayList componentIndexes, String componentType) + throws PPException { int formFactorIndex = indexOfFlag(flagAndDescriptionArray, FORM_FACTOR_FLAG); if (formFactorIndex == flagAndDescriptionArray.length - 1) { throw new PPException("Please enter a description after the flag"); @@ -466,7 +469,7 @@ private ComponentList handleFormFactorFlag(String userInputString, ComponentL flagsArray.add("Form Factor: " + formFactor); - switch(componentType) { + switch (componentType) { case MOTHERBOARD_TYPE: componentList = ComponentList.filterByFormFactorMotherboard(componentList, formFactor, componentIndexes); break; From c59a3fc4b8169ff5096611856e3e9559ad2197a2 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 13:36:33 +0800 Subject: [PATCH 273/420] Rearrange tests --- .github/workflows/gradle.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index fd8c44d086..918b5cc128 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -33,18 +33,19 @@ jobs: - name: Build and check with Gradle run: ./gradlew check - - name: Perform IO redirection test (*NIX) - if: runner.os == 'Linux' + + - name: Perform IO redirection test (Windows) + if: always() && runner.os == 'Windows' working-directory: ${{ github.workspace }}/text-ui-test - run: ./runtest.sh + shell: cmd + run: runtest.bat - name: Perform IO redirection test (MacOS) if: always() && runner.os == 'macOS' working-directory: ${{ github.workspace }}/text-ui-test run: ./runtest.sh - - name: Perform IO redirection test (Windows) - if: always() && runner.os == 'Windows' + - name: Perform IO redirection test (*NIX) + if: runner.os == 'Linux' working-directory: ${{ github.workspace }}/text-ui-test - shell: cmd - run: runtest.bat \ No newline at end of file + run: ./runtest.sh From 9232286f975c7aae0420bbe3d5316e1146f3a364 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sun, 2 Apr 2023 14:00:25 +0800 Subject: [PATCH 274/420] Fix viewer filter to desplay accurate error message --- .../viewercommand/ViewerFilterCommand.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 0fd6bc10ae..403191e0d0 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -33,18 +33,31 @@ public String executeCommand(DataStorage dataStorage) throws PPException { String[] userInputStringArray = userInputString.split(" "); if (userInputString.equals("")) { - throw new PPException("Please enter a valid filter"); + throw new PPException("Please enter a valid flag"); } if (containsFlag(userInputStringArray, CLEAR_FLAG)) { handleClearFlag(userInputStringArray); return "Filter cleared"; } if (userInputStringArray.length <= 1) { - throw new PPException("Please enter a valid flag and description"); + if (hasFlag(userInputStringArray)){ + if (containsFlag(userInputStringArray, NAME_FLAG)) { + handleNameFlag(userInputStringArray); + } + if (containsFlag(userInputStringArray, BUILT_FLAG)) { + handleBuiltFlag(userInputStringArray); + } + if (containsFlag(userInputStringArray, PRICE_FLAG)) { + handlePriceFlag(userInputString, userInputStringArray); + } + return ""; + } + else { + throw new PPException("Please enter a valid flag and description"); + } } if (userInputStringArray.length > 1) { if (hasFlag(userInputStringArray)) { - PCList.setFilterTrue(); if (containsFlag(userInputStringArray, NAME_FLAG)) { handleNameFlag(userInputStringArray); } @@ -54,6 +67,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { if (containsFlag(userInputStringArray, PRICE_FLAG)) { handlePriceFlag(userInputString, userInputStringArray); } + PCList.setFilterTrue(); } else { throw new PPException("Please enter a valid flag"); } From 73e28dd12a450705c110090345a56ba003dda339 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 14:31:53 +0800 Subject: [PATCH 275/420] Remove commands from input.txt --- text-ui-test/EXPECTED.TXT | 32 -------------------------------- text-ui-test/input.txt | 3 --- 2 files changed, 35 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 3db26d1cd0..88d90aaa18 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -32,35 +32,3 @@ Here is the list of PC Builds: 3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete What would you like to do? =================================================== - =================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete -What would you like to do? -=================================================== -Custom PC: [ newpc1 ] has been created - =================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete -5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete -What would you like to do? -=================================================== -Custom PC: [ newpc2 ] has been created - =================================================== -PC viewer -Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete -4.Custom-PC: [newpc1] - $0.0/infinite - Incomplete -5.Custom-PC: [newpc2] - $0.0/infinite - Incomplete -What would you like to do? -=================================================== -Unable to delete Prebuilt PC diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 9e55af1f6d..e69de29bb2 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,3 +0,0 @@ -add newpc1 -add newpc2 -delete 1 \ No newline at end of file From 6a1b9f9aac0811d1dd324fda7d616d313d7a6093 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 14:36:48 +0800 Subject: [PATCH 276/420] Update README.md --- docs/README.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index bbcc99c1e7..b5c416dc65 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,29 @@ -# Duke +# BigPP -{Give product intro here} +``` + _____ _____ _____ _____ _____ + /\ \ /\ \ /\ \ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ +/:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | +\:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ + \::::::/ / \:::\ \ \::::::/ / + \::::/ / \:::\____\ \::::/ / + \::/____/ \::/ / \::/____/ + ~~ \/____/ + +``` Useful links: * [User Guide](UserGuide.md) From 5cedb7ed33cf2ac839f32a7e8001205a6f5a168b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 14:58:15 +0800 Subject: [PATCH 277/420] Update UserGuide.md --- docs/UserGuide.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b57064cef0..00954daf24 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -134,7 +134,10 @@ Common commands will be the commands that the user will be able to use in both t Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application -**IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +```diff +- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, +- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +``` #### **Help Command** Usage: `help` From 94076d9b206c70f2efc0ece2fe8bc2c6ff3da3c8 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 16:14:53 +0800 Subject: [PATCH 278/420] Add appropriate nextlines --- docs/UserGuide.md | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 00954daf24..955f9aea54 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -54,6 +54,7 @@ If you encounter unfamiliar terminology in this guide, please refer to the [Glos Upon successful initialization of the program for the first time, you would be greeted by the following, assuming you do not currently have a user.json file in your _home folder_ + ``` User file does not exist. Creating new user file. User PCs found, loading... @@ -91,6 +92,7 @@ What would you like to do? =================================================== ``` + If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands @@ -98,6 +100,7 @@ Our commands are split up for two modes, PCViewer and PCBuilder. The commands fo For reference, - PCViewer looks like this: + ``` =================================================== PC viewer @@ -108,7 +111,9 @@ Here is the list of PC Builds: What would you like to do? =================================================== ``` + - PCBuilder looks like this + ``` =================================================== PC builder @@ -126,7 +131,9 @@ Chassis : Corsair iCUE 4000X RGB What would you like to do? =================================================== ``` + --- + ### Common Commands Common commands will be the commands that the user will be able to use in both the modes @@ -144,6 +151,7 @@ Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: + ``` Here are the list of valid commands: Add - Add a new PC of a given name @@ -153,6 +161,7 @@ View - Display all the components of the PC of a given index ``` - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: + ``` Here are the list of valid commands: list - List all components of a certain type @@ -164,13 +173,14 @@ unselect - Remove the component of type from t custom - Creates a custom component of type with all the and adds it to the list of components of that type compare & Compares all the specifications between the components oftype with indices and ``` + Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands --- + ### PCViewer Mode Commands PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode - #### **Add Command** Usage: `add PC_NAME` @@ -178,6 +188,7 @@ Functionality: Adds a PC with the name `PC_NAME` to your PC list Example: >input: add NEWPC + ``` =================================================== PC viewer @@ -190,9 +201,11 @@ What would you like to do? =================================================== Custom PC: [ NEWPC ] has been created ``` + Notes: newly added PCs will always begin with infinite budget --- + #### **View Command** Usage: `view PC_INDEX` @@ -200,6 +213,7 @@ Functionality: Views the PC with index `PC_INDEX` Example: >input: view 3 + ``` =================================================== PC viewer @@ -223,6 +237,7 @@ Chassis : Corsair iCUE 4000X RGB ``` --- + #### **Edit Command** Usage: `edit PC_INDEX` @@ -230,6 +245,7 @@ Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. Example: >input: edit 4 + ``` =================================================== PC builder @@ -252,6 +268,7 @@ Currently editing PC: NEWPC Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the application would create a copy of it and mark it as a `CUSTOM_PC`. This is because we provide the prebuilts as a reference for the user, and not for editing. --- + #### **Delete Command** Usage: `delete PC_INDEX` @@ -259,6 +276,7 @@ Functionality: Deletes the PC with index `PC_INDEX` Example: >input: delete 4 + ``` =================================================== PC viewer @@ -272,11 +290,10 @@ Custom PC: [ NEWPC ] has been deleted ``` --- + #### **Filter Command** Usage: `filter FILTER_FLAGS` - - Available flags: > `-name PC_NAME` > @@ -305,9 +322,11 @@ What would you like to do? =================================================== Filter completed ``` + Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- + ### PCBuilder Mode Commands PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode @@ -316,6 +335,7 @@ Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. Example: + ``` input: list cpu -name intel -price /from 1 /to 100 @@ -340,6 +360,7 @@ SOCKET: LGA1200 Notes: Arguments with missing flags will be ignored. --- + #### **Select Command** Usage: `select COMPONENT_TYPE COMPONENT_INDEX` @@ -347,6 +368,7 @@ Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to Example: add component of type `GPU` with index `4` to the current PC Build. >input: select gpu 4 + ``` =================================================== PC builder @@ -366,9 +388,11 @@ What would you like to do? gpu added! : MSI GAMING Z TRIO RTX3080 ``` + Notes: you can select any component at any time and do not need to list components before selecting as long as you know which index you want to add. --- + #### **Unselect Command** Usage: `unselect COMPONENT_TYPE` @@ -377,6 +401,7 @@ Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build Example: remove component of type `GPU` from the current PC Build. >input: unselect gpu + ``` =================================================== PC builder @@ -397,6 +422,7 @@ gpu removed! ``` --- + #### **Compare Command** Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` @@ -404,6 +430,7 @@ Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_ Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. >input: compare cpu 1 & 2 + ``` ________________________________________________________________________________________________ |NAME |Intel core i3-10100 |Intel core i5-10600k | @@ -420,6 +447,7 @@ ________________________________________________________________________________ ``` --- + #### **Budget Command** Usage: `budget POSITIVE_INTEGER` @@ -427,6 +455,7 @@ Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` Example Set `BUDGET` of the PC you are currently editing to be $1000 >input: budget 1000 + ``` =================================================== PC builder @@ -448,6 +477,7 @@ Current build budget is now: $1000.00 ``` --- + #### **Name Command** Usage: `name PC_NAME` @@ -455,6 +485,7 @@ Functionality: Sets the name of the current PC build to `PC_NAME` Example Set the name of PC to be MyPC >input: name MyPC + ``` =================================================== PC builder @@ -475,11 +506,13 @@ Current build name is now: MyPc ``` --- + #### **Custom Command** Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build >input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + ``` =================================================== PC builder @@ -498,9 +531,11 @@ What would you like to do? =================================================== CPU added: Intel-new-cpu ``` + Notes: Please see the glossary for the `SPEC` definitions for each component --- + #### **Back Command** Usage: `back` @@ -522,6 +557,7 @@ Based on the rules stated above, the compatibility checker will throw the user e Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. >input: custom motherboard newmobo|AMD|10|atx|AM5|10 + ``` =================================================== PC builder @@ -542,8 +578,6 @@ Motherboard socket is not compatible with current cpu socket Please choose another motherboard or change your cpu ``` - - ## Glossary ### Parameters Glossary @@ -582,7 +616,6 @@ Please choose another motherboard or change your cpu ### Command Glossary - | Viewer Menu Commands | Format | Flags | |:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| | Add PC | `add PC_NAME` | nil | From 2b4db1da6015b6f9e55b63c675766c244ee10ebf Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:21:00 +0800 Subject: [PATCH 279/420] Update UserGuide.md --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 955f9aea54..e14f915b62 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -582,7 +582,7 @@ Please choose another motherboard or change your cpu ### Parameters Glossary | Parameter | Explanation | Type | Example | -| ---------------- |:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +|:----------------:|:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | PC_NAME | Name of the PC Build | String | "The Beast" | | PC_INDEX | Index number of the PC | Positive Integer | 1 | | PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | From a7fb910ccd17d2097db2dcb60c42e7675374ab06 Mon Sep 17 00:00:00 2001 From: HackMD <37423+hackmd-hub[bot]@users.noreply.github.com> Date: Sun, 2 Apr 2023 11:19:10 +0000 Subject: [PATCH 280/420] Update User Guide Glossary Bug --- docs/UserGuide.md | 114 ++++++++++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 39 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b57064cef0..e4065f7cb8 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -91,6 +91,7 @@ What would you like to do? =================================================== ``` + If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands @@ -98,6 +99,7 @@ Our commands are split up for two modes, PCViewer and PCBuilder. The commands fo For reference, - PCViewer looks like this: + ``` =================================================== PC viewer @@ -108,7 +110,9 @@ Here is the list of PC Builds: What would you like to do? =================================================== ``` + - PCBuilder looks like this + ``` =================================================== PC builder @@ -126,7 +130,9 @@ Chassis : Corsair iCUE 4000X RGB What would you like to do? =================================================== ``` + --- + ### Common Commands Common commands will be the commands that the user will be able to use in both the modes @@ -134,13 +140,17 @@ Common commands will be the commands that the user will be able to use in both t Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application -**IMPORTANT:** the user MUST execute this command to save the data that has been edited, if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +```diff +- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, +- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +``` #### **Help Command** Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: + ``` Here are the list of valid commands: Add - Add a new PC of a given name @@ -150,6 +160,7 @@ View - Display all the components of the PC of a given index ``` - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: + ``` Here are the list of valid commands: list - List all components of a certain type @@ -161,13 +172,14 @@ unselect - Remove the component of type from t custom - Creates a custom component of type with all the and adds it to the list of components of that type compare & Compares all the specifications between the components oftype with indices and ``` + Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands --- + ### PCViewer Mode Commands PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode - #### **Add Command** Usage: `add PC_NAME` @@ -175,6 +187,7 @@ Functionality: Adds a PC with the name `PC_NAME` to your PC list Example: >input: add NEWPC + ``` =================================================== PC viewer @@ -187,9 +200,11 @@ What would you like to do? =================================================== Custom PC: [ NEWPC ] has been created ``` + Notes: newly added PCs will always begin with infinite budget --- + #### **View Command** Usage: `view PC_INDEX` @@ -197,6 +212,7 @@ Functionality: Views the PC with index `PC_INDEX` Example: >input: view 3 + ``` =================================================== PC viewer @@ -220,6 +236,7 @@ Chassis : Corsair iCUE 4000X RGB ``` --- + #### **Edit Command** Usage: `edit PC_INDEX` @@ -227,6 +244,7 @@ Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. Example: >input: edit 4 + ``` =================================================== PC builder @@ -249,6 +267,7 @@ Currently editing PC: NEWPC Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the application would create a copy of it and mark it as a `CUSTOM_PC`. This is because we provide the prebuilts as a reference for the user, and not for editing. --- + #### **Delete Command** Usage: `delete PC_INDEX` @@ -256,6 +275,7 @@ Functionality: Deletes the PC with index `PC_INDEX` Example: >input: delete 4 + ``` =================================================== PC viewer @@ -269,11 +289,10 @@ Custom PC: [ NEWPC ] has been deleted ``` --- + #### **Filter Command** Usage: `filter FILTER_FLAGS` - - Available flags: > `-name PC_NAME` > @@ -302,9 +321,11 @@ What would you like to do? =================================================== Filter completed ``` + Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- + ### PCBuilder Mode Commands PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode @@ -313,6 +334,7 @@ Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. Example: + ``` input: list cpu -name intel -price /from 1 /to 100 @@ -337,6 +359,7 @@ SOCKET: LGA1200 Notes: Arguments with missing flags will be ignored. --- + #### **Select Command** Usage: `select COMPONENT_TYPE COMPONENT_INDEX` @@ -344,6 +367,7 @@ Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to Example: add component of type `GPU` with index `4` to the current PC Build. >input: select gpu 4 + ``` =================================================== PC builder @@ -363,9 +387,11 @@ What would you like to do? gpu added! : MSI GAMING Z TRIO RTX3080 ``` + Notes: you can select any component at any time and do not need to list components before selecting as long as you know which index you want to add. --- + #### **Unselect Command** Usage: `unselect COMPONENT_TYPE` @@ -374,6 +400,7 @@ Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build Example: remove component of type `GPU` from the current PC Build. >input: unselect gpu + ``` =================================================== PC builder @@ -394,6 +421,7 @@ gpu removed! ``` --- + #### **Compare Command** Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` @@ -401,6 +429,7 @@ Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_ Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. >input: compare cpu 1 & 2 + ``` ________________________________________________________________________________________________ |NAME |Intel core i3-10100 |Intel core i5-10600k | @@ -417,6 +446,7 @@ ________________________________________________________________________________ ``` --- + #### **Budget Command** Usage: `budget POSITIVE_INTEGER` @@ -424,6 +454,7 @@ Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` Example Set `BUDGET` of the PC you are currently editing to be $1000 >input: budget 1000 + ``` =================================================== PC builder @@ -445,6 +476,7 @@ Current build budget is now: $1000.00 ``` --- + #### **Name Command** Usage: `name PC_NAME` @@ -452,6 +484,7 @@ Functionality: Sets the name of the current PC build to `PC_NAME` Example Set the name of PC to be MyPC >input: name MyPC + ``` =================================================== PC builder @@ -472,11 +505,13 @@ Current build name is now: MyPc ``` --- + #### **Custom Command** Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build >input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + ``` =================================================== PC builder @@ -495,9 +530,11 @@ What would you like to do? =================================================== CPU added: Intel-new-cpu ``` + Notes: Please see the glossary for the `SPEC` definitions for each component --- + #### **Back Command** Usage: `back` @@ -519,6 +556,7 @@ Based on the rules stated above, the compatibility checker will throw the user e Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. >input: custom motherboard newmobo|AMD|10|atx|AM5|10 + ``` =================================================== PC builder @@ -539,46 +577,44 @@ Motherboard socket is not compatible with current cpu socket Please choose another motherboard or change your cpu ``` - - ## Glossary ### Parameters Glossary -| Parameter | Explanation | Type | Example | -| ---------------- |:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| PC_NAME | Name of the PC Build | String | "The Beast" | -| PC_INDEX | Index number of the PC | Positive Integer | 1 | -| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | -| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | -| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | -| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | -| NAME | Name of the component | String | "Intel core i3-10100" | -| PRICE | Price of the component | Positive Float | 100.00 | -| BRAND | Name of the manufacturer of the compoenent | String | "msi" | -| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | -| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | -| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | -| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | -| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | -| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | -| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | -| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | -| EFFICIENCY | The power efficiency of power supply | String | "gold" | -| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | -| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | -| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | -| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | -| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | -| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | -| TYPE | Type of storage device | String | "ssd"/"hdd" | -| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | -| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | -| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | -| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | -| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | -### Command Glossary +| Parameter | Explanation | Type | Example | +|:----------------:|:---------------------------------------------------------------:|:----------------:|:-----------------------------------------------------------------------------------------------:| +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where matching CPU is placed in | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| EFFICIENCY | The power efficiency of power supply | String | "gold" | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | +| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | +| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | +| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | +| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | +| TYPE | Type of storage device | String | "ssd"/"hdd" | +| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| LIST_FLAGS | Attributes of the component | String | [Specific to Each Component Type](#Command-Glossary) | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | +| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | +### Command Glossary | Viewer Menu Commands | Format | Flags | |:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| From 109e031c1e9a295506d0316f726f726f4eb0a97c Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 20:42:33 +0800 Subject: [PATCH 281/420] Update list component userguide --- docs/UserGuide.md | 102 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 31 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c3dfc598ca..cfcf44cdc3 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -2,33 +2,34 @@ # User Guide ## Table of contents -- [Introduction](#Introduction) -- [Getting Started](#Getting-Started) -- [Commands](#Commands) - - [Common Commands](#Common-Commands) - - [**Bye Command**](#Bye-Command) - - [**Help Command**](#Help-Command) - - [PCViewer Mode Commands](#PCViewer-Mode-Commands) - - [**Add Command**](#Add-Command) - - [**View Command**](#View-Command) - - [**Edit Command**](#Edit-Command) - - [**Delete Command**](#Delete-Command) - - [**Filter Command**](#Filter-Command) - - [PCBuilder Mode Commands](#PCBuilder-Mode-Commands) - - [**List Command**](#List-Command) - - [**Select Command**](#Select-Command) - - [**Unselect Command**](#Unselect-Command) - - [**Compare Command**](#Compare-Command) - - [**Budget Command**](#Budget-Command) - - [**Name Command**](#Name-Command) - - [**Custom Command**](#Custom-Command) - - [**Back Command**](#Back-Command) -- [Additional Features](#Additional-Features) - - [Compatibility Check](#Compatibility-Check) -- [Glossary](#Glossary) - - [Parameters Glossary](#Parameters-Glossary) - - [Command Glossary](#Command-Glossary) - - [Acceptable Custom Component Commands](#Acceptable-Custom-Component-Commands) +- [Introduction](#introduction) +- [Getting Started](#getting-started) +- [Commands](#commands) + - [Common Commands](#common-commands) + - [**Bye Command**](#bye-command) + - [**Help Command**](#help-command) + - [PCViewer Mode Commands](#pcviewer-mode-commands) + - [**Add Command**](#add-command) + - [**View Command**](#view-command) + - [**Edit Command**](#edit-command) + - [**Delete Command**](#delete-command) + - [**Filter Command**](#filter-command) + - [PCBuilder Mode Commands](#pcbuilder-mode-commands) + - [**List Command**](#list-command) +- [Notes: Arguments with missing flags will be ignored. Flags that are not relevant to the component will also be ignored.](#notes-arguments-with-missing-flags-will-be-ignored-flags-that-are-not-relevant-to-the-component-will-also-be-ignored) + - [**Select Command**](#select-command) + - [**Unselect Command**](#unselect-command) + - [**Compare Command**](#compare-command) + - [**Budget Command**](#budget-command) + - [**Name Command**](#name-command) + - [**Custom Command**](#custom-command) + - [**Back Command**](#back-command) +- [Additional Features](#additional-features) + - [Compatibility Check](#compatibility-check) +- [Glossary](#glossary) + - [Parameters Glossary](#parameters-glossary) + - [Command Glossary](#command-glossary) + - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) ## Introduction @@ -332,12 +333,52 @@ PCBuilder Mode commands will be the commands that the user will be able to use i #### **List Command** Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` -Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. These are the following common flags `-name`, `-brand` and `-price` for all components. Flags that are unique to each components can be used too, such as `-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed`, `-type` and `-efficiency`. Noise, power, rpm, price, boostclock and baseclock requires an input range by using /from and /to flags. Multiple flags can be used together. + +Available flags: +> `-details` +> +> `-name COMPONENT_NAME` +> +> `-brand COMPONENT_BRAND` +> +> `-price /from COMPONENT_START_PRICE /to COMPONENT_END_PRICE` +> +> `-power /from COMPONENT_START_POWER /to COMPONENT_END_POWER` +> +> `-formfactor COMPONENT_FORMFACTOR` +> +> `-socket COMPONENT_SOCKET` +> +> `-core /from COMPONENT_START_CORE /to COMPONENT_END_CORE` +> +> `-thread /from COMPONENT_START_THREAD /to COMPONENT_END_THREAD` +> +> `-baseclock /from COMPONENT_START_BASECLOCK /to COMPONENT_END_BASECLOCK` +> +> `-boostclock /from COMPONENT_START_BOOSTCLOCK /to COMPONENT_END_BOOSTCLOCK` +> +> `-size /from COMPONENT_START_SIZE /to COMPONENT_END_SIZE` +> +> `-rpm /from COMPONENT_START_RPM /to COMPONENT_END_RPM` +> +> `-noise /from COMPONENT_START_NOISE /to COMPONENT_END_NOISE` +> +> `-memory COMPONENT_MEMORY` +> +> `-sticks /from COMPONENT_START_STICKS /to COMPONENT_END_STICKS` +> +> `-speed /from COMPONENT_START_SPEED /to COMPONENT_END_SPEED` +> +> `-type COMPONENT_TYPE` +> +> `-efficiency COMPONENT_EFFICIENCY` + +Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. List command shows only the names of components for readability. For detailed information, use the `-details` flag. Multiple flags can be used together. Example: ``` -input: list cpu -name intel -price /from 1 /to 100 +input: list cpu -name intel -price /from 1 /to 100 -details output: Here are all available components of type 'cpu': @@ -357,8 +398,7 @@ SOCKET: LGA1200 ================ ``` -Notes: Arguments with missing flags will be ignored. - +Notes: Arguments with missing flags will be ignored. Flags that are not relevant to the component will also be ignored. --- #### **Select Command** From 2f4b4cbd9f7c2ef626fd118e7ae983710cc3cabc Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 21:11:59 +0800 Subject: [PATCH 282/420] Add spacing --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index cfcf44cdc3..adafc356d1 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -16,7 +16,6 @@ - [**Filter Command**](#filter-command) - [PCBuilder Mode Commands](#pcbuilder-mode-commands) - [**List Command**](#list-command) -- [Notes: Arguments with missing flags will be ignored. Flags that are not relevant to the component will also be ignored.](#notes-arguments-with-missing-flags-will-be-ignored-flags-that-are-not-relevant-to-the-component-will-also-be-ignored) - [**Select Command**](#select-command) - [**Unselect Command**](#unselect-command) - [**Compare Command**](#compare-command) @@ -399,6 +398,7 @@ SOCKET: LGA1200 ``` Notes: Arguments with missing flags will be ignored. Flags that are not relevant to the component will also be ignored. + --- #### **Select Command** From 83fc0e1a554b18be9fd49b7b9fc54c74404fe8af Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 21:13:44 +0800 Subject: [PATCH 283/420] Add input formatting --- docs/UserGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index adafc356d1..76c0ae861c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -311,6 +311,7 @@ The following explains the functionality of filtering by each flag: - `-clear` will clear all filters that were applied previously Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build + >input: filter -name intermediate -price /from 1000 /to 3000 -built complete ``` @@ -376,10 +377,9 @@ Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags Example: -``` -input: list cpu -name intel -price /from 1 /to 100 -details +> input: list cpu -name intel -price /from 1 /to 100 -details -output: +``` Here are all available components of type 'cpu': meeting the following criteria: name: intel From 9d2b21c5bb8923545623266cbb13b56c87a52d19 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 21:16:00 +0800 Subject: [PATCH 284/420] Add Prince PSU component --- src/main/resources/psu.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/psu.json b/src/main/resources/psu.json index 099c4b6b1f..2048f75d65 100644 --- a/src/main/resources/psu.json +++ b/src/main/resources/psu.json @@ -5,5 +5,13 @@ "formfactor": "atx", "power": 850, "price": 159.94 + }, + + "Prince of Pereira": { + "brand": "Matthew", + "efficiency": "Gold", + "formfactor": "atx", + "power": 9000, + "price": 9000 } } From ede36ffd5e2b8997a7b2c1f1e1a173bb967a9dc7 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sun, 2 Apr 2023 21:29:37 +0800 Subject: [PATCH 285/420] Remove Prince of Pereira --- src/main/resources/psu.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/resources/psu.json b/src/main/resources/psu.json index 2048f75d65..099c4b6b1f 100644 --- a/src/main/resources/psu.json +++ b/src/main/resources/psu.json @@ -5,13 +5,5 @@ "formfactor": "atx", "power": 850, "price": 159.94 - }, - - "Prince of Pereira": { - "brand": "Matthew", - "efficiency": "Gold", - "formfactor": "atx", - "power": 9000, - "price": 9000 } } From eae67940a4f80c70c7e154b1c6dd9d3959be3346 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 4 Apr 2023 02:00:18 +0800 Subject: [PATCH 286/420] Update user guide with @@author --- docs/UserGuide.md | 276 +++++++++++++++++++++++++++++----------------- 1 file changed, 176 insertions(+), 100 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 76c0ae861c..63e4a473c8 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,7 +1,11 @@ - + + # User Guide - + ## Table of contents + - [Introduction](#introduction) - [Getting Started](#getting-started) - [Commands](#commands) @@ -35,24 +39,22 @@ Welcome to Big PC Part-Picker (BigPP) BigPP is a command-line application designed for PC enthusiasts and professional PC builders who aim to: - - streamline the [process](#commands) of managing computer builds - - verify the [compatibility](#compatibility-check) of selected components. +- streamline the [process](#commands) of managing computer builds +- verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. - ## Getting Started 1. Install [Java 11](https://www.oracle.com/java/technologies/downloads/#java11) for your operating system. If you are unsure about how to do this, you can refer to the [Java installation guide](https://docs.oracle.com/en/java/javase/11/install/overview-jdk-installation.html) or consult a search engine. -2. Download the latest version of `BigPP` from -[the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). +2. Download the latest version of `BigPP` from + [the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). 3. Copy the file to an empty folder you want to use as the _home folder_ This will be the folder in which BigPP will store all of its user data. 4. Right click inside the _home folder_ and open a terminal at that location 5. Run the command `java -jar BigPP.jar` to start the app. 6. Refer to the [Commands](#Commands) below to try out the application! - Upon successful initialization of the program for the first time, you would be greeted by the following, assuming you do not currently have a user.json file in your _home folder_ ``` @@ -60,20 +62,20 @@ User file does not exist. Creating new user file. User PCs found, loading... _____ _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /\ \ - /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ - /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ - /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ - /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ - /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ - /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ - /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ - /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ /:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | \:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| - \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / - \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / - \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / - \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ \::::::/ / \:::\ \ \::::::/ / \::::/ / \:::\____\ \::::/ / @@ -96,11 +98,13 @@ What would you like to do? If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands -Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. + +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. For reference, - - PCViewer looks like this: - + +- PCViewer looks like this: + ``` =================================================== PC viewer @@ -112,7 +116,7 @@ What would you like to do? =================================================== ``` - - PCBuilder looks like this +- PCBuilder looks like this ``` =================================================== @@ -135,39 +139,47 @@ What would you like to do? --- ### Common Commands + Common commands will be the commands that the user will be able to use in both the modes #### **Bye Command** + Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application ```diff -- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, -- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, +- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! ``` + + #### **Help Command** + Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: + +- Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: -Add - Add a new PC of a given name -Delete - Delete the PC of a given index -Edit - Edit the PC of a given index -View - Display all the components of the PC of a given index +Here are the list of valid commands: +Add - Add a new PC of a given name +Delete - Delete the PC of a given index +Edit - Edit the PC of a given index +View - Display all the components of the PC of a given index ``` - - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: +- Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: +Here are the list of valid commands: list - List all components of a certain type name - Change the name of the PC currently being edited to -budget - Change the budget of the PC currently being edited to -select - Add the component of type with index to the PC currently being edited +budget - Change the budget of the PC currently being edited to +select - Add the component of type with index to the PC currently being edited info - View all the specifications of the component of type currently selected for the build unselect - Remove the component of type from the PC currently beingedited custom - Creates a custom component of type with all the and adds it to the list of components of that type @@ -178,16 +190,23 @@ Notes: Entering the help command in either PCViewer mode or PCBuilder mode will --- + + ### PCViewer Mode Commands + PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode #### **Add Command** + Usage: `add PC_NAME` Functionality: Adds a PC with the name `PC_NAME` to your PC list Example: ->input: add NEWPC + +> input: add NEWPC ``` =================================================== @@ -207,12 +226,14 @@ Notes: newly added PCs will always begin with infinite budget --- #### **View Command** + Usage: `view PC_INDEX` Functionality: Views the PC with index `PC_INDEX` Example: ->input: view 3 + +> input: view 3 ``` =================================================== @@ -238,13 +259,19 @@ Chassis : Corsair iCUE 4000X RGB --- + + #### **Edit Command** + Usage: `edit PC_INDEX` -Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. Example: ->input: edit 4 + +> input: edit 4 ``` =================================================== @@ -270,12 +297,14 @@ Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the appl --- #### **Delete Command** + Usage: `delete PC_INDEX` Functionality: Deletes the PC with index `PC_INDEX` Example: ->input: delete 4 + +> input: delete 4 ``` =================================================== @@ -291,28 +320,35 @@ Custom PC: [ NEWPC ] has been deleted --- + + #### **Filter Command** + Usage: `filter FILTER_FLAGS` Available flags: + > `-name PC_NAME` -> +> > `-price /from PC_START_PRICE /to PC_END_PRICE` -> +> > `-built PC_ISCOMPLETE` -> +> > `-clear` -Functionality: -The following explains the functionality of filtering by each flag: - - `-name PC_NAME` will filter the PC List by the given name - - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range - - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete - - `-clear` will clear all filters that were applied previously +Functionality: +The following explains the functionality of filtering by each flag: + +- `-name PC_NAME` will filter the PC List by the given name +- `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range +- `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete +- `-clear` will clear all filters that were applied previously Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build ->input: filter -name intermediate -price /from 1000 /to 3000 -built complete +> input: filter -name intermediate -price /from 1000 /to 3000 -built complete ``` =================================================== @@ -324,19 +360,26 @@ What would you like to do? Filter completed ``` -Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. +Notes: The flags can by strung together _in any order_ such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- + + ### PCBuilder Mode Commands + PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode #### **List Command** + Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` Available flags: + > `-details` -> +> > `-name COMPONENT_NAME` > > `-brand COMPONENT_BRAND` @@ -370,7 +413,7 @@ Available flags: > `-speed /from COMPONENT_START_SPEED /to COMPONENT_END_SPEED` > > `-type COMPONENT_TYPE` -> +> > `-efficiency COMPONENT_EFFICIENCY` Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. List command shows only the names of components for readability. For detailed information, use the `-details` flag. Multiple flags can be used together. @@ -401,13 +444,19 @@ Notes: Arguments with missing flags will be ignored. Flags that are not relevant --- + + #### **Select Command** + Usage: `select COMPONENT_TYPE COMPONENT_INDEX` Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build Example: add component of type `GPU` with index `4` to the current PC Build. ->input: select gpu 4 + +> input: select gpu 4 ``` =================================================== @@ -434,13 +483,14 @@ Notes: you can select any component at any time and do not need to list componen --- #### **Unselect Command** + Usage: `unselect COMPONENT_TYPE` Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. Example: remove component of type `GPU` from the current PC Build. ->input: unselect gpu +> input: unselect gpu ``` =================================================== @@ -464,12 +514,14 @@ gpu removed! --- #### **Compare Command** + Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. ->input: compare cpu 1 & 2 + +> input: compare cpu 1 & 2 ``` ________________________________________________________________________________________________ @@ -488,13 +540,19 @@ ________________________________________________________________________________ --- + + #### **Budget Command** + Usage: `budget POSITIVE_INTEGER` Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` Example Set `BUDGET` of the PC you are currently editing to be $1000 ->input: budget 1000 + +> input: budget 1000 ``` =================================================== @@ -519,12 +577,14 @@ Current build budget is now: $1000.00 --- #### **Name Command** + Usage: `name PC_NAME` Functionality: Sets the name of the current PC build to `PC_NAME` Example Set the name of PC to be MyPC ->input: name MyPC + +> input: name MyPC ``` =================================================== @@ -547,11 +607,17 @@ Current build name is now: MyPc --- + + #### **Custom Command** + Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build ->input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + +> input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 ``` =================================================== @@ -577,15 +643,21 @@ Notes: Please see the glossary for the `SPEC` definitions for each component --- #### **Back Command** + Usage: `back` Functionality: Goes back to PCViewer menu --- + + ## Additional Features ### Compatibility Check + BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. 1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. @@ -596,7 +668,8 @@ BigPP will check if your components that you added are compatible with each othe Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. ->input: custom motherboard newmobo|AMD|10|atx|AM5|10 + +> input: custom motherboard newmobo|AMD|10|atx|AM5|10 ``` =================================================== @@ -618,48 +691,53 @@ Motherboard socket is not compatible with current cpu socket Please choose another motherboard or change your cpu ``` + + ## Glossary ### Parameters Glossary -| Parameter | Explanation | Type | Example | -|:----------------:|:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| PC_NAME | Name of the PC Build | String | "The Beast" | -| PC_INDEX | Index number of the PC | Positive Integer | 1 | -| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | -| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | -| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | -| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | -| NAME | Name of the component | String | "Intel core i3-10100" | -| PRICE | Price of the component | Positive Float | 100.00 | -| BRAND | Name of the manufacturer of the compoenent | String | "msi" | -| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | -| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | -| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | -| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | -| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | -| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | -| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | -| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | -| EFFICIENCY | The power efficiency of power supply | String | "gold" | -| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | -| **Parameter** | **Explanation** | **Type** | **All Accepted Inputs** | -| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512 | -| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 16 | -| STICKS | Numper of physical RAM sticks | Positive Integer | 2 | -| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 2400 | -| TYPE | Type of storage device | String | "ssd"/"hdd" | -| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | -| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | -| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | -| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | -| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | - +| Parameter | Explanation | Type | Example | +| :--------------: | :-------------------------------------------------------------------------------: | :--------------: | :-------------------: | +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| EFFICIENCY | The power efficiency of power supply | String | "gold" | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | + +| **Parameter** | **Explanation** | **Type** | **All Acceptable Inputs** | +| -------------- | ---------------------------------------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512, 1024, 2048 and 4096 | +| MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 8, 16, 32 and 64 | +| STICKS | Numper of physical RAM sticks | Positive Integer | 1, 2 and 4 | +| SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 1600, 2000, 2666, 3200 and 3600 | +| TYPE | Type of storage device | String | "ssd"/"hdd" | +| FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | +| LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | +| FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | ### Command Glossary | Viewer Menu Commands | Format | Flags | -|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| +| :-----------------------: | :--------------------------------------------: | :-------------------------------------------------------------------------------------------------: | | Add PC | `add PC_NAME` | nil | | View PC | `view PC_INDEX` | nil | | Edit PC | `edit PC_INDEX` | nil | @@ -669,7 +747,7 @@ Please choose another motherboard or change your cpu | List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | | List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | | List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | -| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | +| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | | List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | | List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | | List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | @@ -679,10 +757,11 @@ Please choose another motherboard or change your cpu | Compare Components | `compare COMPONENT_TYPE INDEX_1 & INDEX_2` | nil | | Budget | `budget POSITIVE_INTEGER` | nil | | Name PC | `name PC_NAME` | nil | -| Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#Acceptable-Custom-Component-Commands) | +| Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#acceptable-custom-component-commands) | | Back | `back` | nil | #### Acceptable Custom Component Commands + The acceptable formats for custom component creation are as shown below 1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` @@ -693,6 +772,3 @@ The acceptable formats for custom component creation are as shown below 6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` 7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` 8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` - - - From dffd1e91cfd53093da2b819b78807cd837703055 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Tue, 4 Apr 2023 10:12:30 +0800 Subject: [PATCH 287/420] Edit author tags to appropriate format --- docs/UserGuide.md | 275 +++++++++++++++++++--------------------------- 1 file changed, 112 insertions(+), 163 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 63e4a473c8..089a436a1b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,11 +1,8 @@ - - + + # User Guide - + ## Table of contents - - [Introduction](#introduction) - [Getting Started](#getting-started) - [Commands](#commands) @@ -34,13 +31,14 @@ - [Command Glossary](#command-glossary) - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) + ## Introduction Welcome to Big PC Part-Picker (BigPP) BigPP is a command-line application designed for PC enthusiasts and professional PC builders who aim to: -- streamline the [process](#commands) of managing computer builds -- verify the [compatibility](#compatibility-check) of selected components. + - streamline the [process](#commands) of managing computer builds + - verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. @@ -48,13 +46,14 @@ If you encounter unfamiliar terminology in this guide, please refer to the [Glos ## Getting Started 1. Install [Java 11](https://www.oracle.com/java/technologies/downloads/#java11) for your operating system. If you are unsure about how to do this, you can refer to the [Java installation guide](https://docs.oracle.com/en/java/javase/11/install/overview-jdk-installation.html) or consult a search engine. -2. Download the latest version of `BigPP` from - [the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). +2. Download the latest version of `BigPP` from +[the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). 3. Copy the file to an empty folder you want to use as the _home folder_ This will be the folder in which BigPP will store all of its user data. 4. Right click inside the _home folder_ and open a terminal at that location 5. Run the command `java -jar BigPP.jar` to start the app. 6. Refer to the [Commands](#Commands) below to try out the application! + Upon successful initialization of the program for the first time, you would be greeted by the following, assuming you do not currently have a user.json file in your _home folder_ ``` @@ -62,20 +61,20 @@ User file does not exist. Creating new user file. User PCs found, loading... _____ _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /\ \ - /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ - /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ - /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ - /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ - /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ - /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ - /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ - /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ /:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | \:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| - \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / - \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / - \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / - \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ \::::::/ / \:::\ \ \::::::/ / \::::/ / \:::\____\ \::::/ / @@ -98,13 +97,11 @@ What would you like to do? If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands - -Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. For reference, - -- PCViewer looks like this: - + - PCViewer looks like this: + ``` =================================================== PC viewer @@ -116,7 +113,7 @@ What would you like to do? =================================================== ``` -- PCBuilder looks like this + - PCBuilder looks like this ``` =================================================== @@ -139,47 +136,43 @@ What would you like to do? --- ### Common Commands - Common commands will be the commands that the user will be able to use in both the modes -#### **Bye Command** + +#### **Bye Command** Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application ```diff -- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, -- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, +- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! ``` - + #### **Help Command** - Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - -- Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: + - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: -Add - Add a new PC of a given name -Delete - Delete the PC of a given index -Edit - Edit the PC of a given index -View - Display all the components of the PC of a given index +Here are the list of valid commands: +Add - Add a new PC of a given name +Delete - Delete the PC of a given index +Edit - Edit the PC of a given index +View - Display all the components of the PC of a given index ``` -- Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: + - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: +Here are the list of valid commands: list - List all components of a certain type name - Change the name of the PC currently being edited to -budget - Change the budget of the PC currently being edited to -select - Add the component of type with index to the PC currently being edited +budget - Change the budget of the PC currently being edited to +select - Add the component of type with index to the PC currently being edited info - View all the specifications of the component of type currently selected for the build unselect - Remove the component of type from the PC currently beingedited custom - Creates a custom component of type with all the and adds it to the list of components of that type @@ -188,25 +181,20 @@ compare & Compares all the specifications bet Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands ---- - +--- + ### PCViewer Mode Commands - PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode #### **Add Command** - Usage: `add PC_NAME` Functionality: Adds a PC with the name `PC_NAME` to your PC list Example: - -> input: add NEWPC +>input: add NEWPC ``` =================================================== @@ -226,14 +214,12 @@ Notes: newly added PCs will always begin with infinite budget --- #### **View Command** - Usage: `view PC_INDEX` Functionality: Views the PC with index `PC_INDEX` Example: - -> input: view 3 +>input: view 3 ``` =================================================== @@ -258,20 +244,15 @@ Chassis : Corsair iCUE 4000X RGB ``` --- - - + #### **Edit Command** - Usage: `edit PC_INDEX` -Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. Example: - -> input: edit 4 +>input: edit 4 ``` =================================================== @@ -297,14 +278,12 @@ Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the appl --- #### **Delete Command** - Usage: `delete PC_INDEX` Functionality: Deletes the PC with index `PC_INDEX` Example: - -> input: delete 4 +>input: delete 4 ``` =================================================== @@ -319,36 +298,29 @@ Custom PC: [ NEWPC ] has been deleted ``` --- - - - + #### **Filter Command** - Usage: `filter FILTER_FLAGS` Available flags: - > `-name PC_NAME` -> +> > `-price /from PC_START_PRICE /to PC_END_PRICE` -> +> > `-built PC_ISCOMPLETE` -> +> > `-clear` -Functionality: -The following explains the functionality of filtering by each flag: - -- `-name PC_NAME` will filter the PC List by the given name -- `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range -- `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete -- `-clear` will clear all filters that were applied previously +Functionality: +The following explains the functionality of filtering by each flag: + - `-name PC_NAME` will filter the PC List by the given name + - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range + - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete + - `-clear` will clear all filters that were applied previously Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build -> input: filter -name intermediate -price /from 1000 /to 3000 -built complete +>input: filter -name intermediate -price /from 1000 /to 3000 -built complete ``` =================================================== @@ -360,26 +332,21 @@ What would you like to do? Filter completed ``` -Notes: The flags can by strung together _in any order_ such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. +Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- - + ### PCBuilder Mode Commands - PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode #### **List Command** - Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` Available flags: - > `-details` -> +> > `-name COMPONENT_NAME` > > `-brand COMPONENT_BRAND` @@ -413,7 +380,7 @@ Available flags: > `-speed /from COMPONENT_START_SPEED /to COMPONENT_END_SPEED` > > `-type COMPONENT_TYPE` -> +> > `-efficiency COMPONENT_EFFICIENCY` Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. List command shows only the names of components for readability. For detailed information, use the `-details` flag. Multiple flags can be used together. @@ -444,19 +411,15 @@ Notes: Arguments with missing flags will be ignored. Flags that are not relevant --- - + #### **Select Command** - Usage: `select COMPONENT_TYPE COMPONENT_INDEX` Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build Example: add component of type `GPU` with index `4` to the current PC Build. - -> input: select gpu 4 +>input: select gpu 4 ``` =================================================== @@ -483,14 +446,13 @@ Notes: you can select any component at any time and do not need to list componen --- #### **Unselect Command** - Usage: `unselect COMPONENT_TYPE` Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. Example: remove component of type `GPU` from the current PC Build. -> input: unselect gpu +>input: unselect gpu ``` =================================================== @@ -514,14 +476,12 @@ gpu removed! --- #### **Compare Command** - Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. - -> input: compare cpu 1 & 2 +>input: compare cpu 1 & 2 ``` ________________________________________________________________________________________________ @@ -540,19 +500,15 @@ ________________________________________________________________________________ --- - + #### **Budget Command** - Usage: `budget POSITIVE_INTEGER` Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` Example Set `BUDGET` of the PC you are currently editing to be $1000 - -> input: budget 1000 +>input: budget 1000 ``` =================================================== @@ -577,14 +533,12 @@ Current build budget is now: $1000.00 --- #### **Name Command** - Usage: `name PC_NAME` Functionality: Sets the name of the current PC build to `PC_NAME` Example Set the name of PC to be MyPC - -> input: name MyPC +>input: name MyPC ``` =================================================== @@ -607,17 +561,13 @@ Current build name is now: MyPc --- - + #### **Custom Command** - Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build - -> input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 +>input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 ``` =================================================== @@ -643,21 +593,17 @@ Notes: Please see the glossary for the `SPEC` definitions for each component --- #### **Back Command** - Usage: `back` Functionality: Goes back to PCViewer menu --- - + ## Additional Features ### Compatibility Check - BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. 1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. @@ -668,8 +614,7 @@ BigPP will check if your components that you added are compatible with each othe Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. - -> input: custom motherboard newmobo|AMD|10|atx|AM5|10 +>input: custom motherboard newmobo|AMD|10|atx|AM5|10 ``` =================================================== @@ -691,53 +636,54 @@ Motherboard socket is not compatible with current cpu socket Please choose another motherboard or change your cpu ``` - - + ## Glossary ### Parameters Glossary -| Parameter | Explanation | Type | Example | -| :--------------: | :-------------------------------------------------------------------------------: | :--------------: | :-------------------: | -| PC_NAME | Name of the PC Build | String | "The Beast" | -| PC_INDEX | Index number of the PC | Positive Integer | 1 | -| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | -| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | -| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | -| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | -| NAME | Name of the component | String | "Intel core i3-10100" | -| PRICE | Price of the component | Positive Float | 100.00 | -| BRAND | Name of the manufacturer of the compoenent | String | "msi" | -| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | -| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | -| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | -| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | -| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | -| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | -| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | -| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | -| EFFICIENCY | The power efficiency of power supply | String | "gold" | -| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | - -| **Parameter** | **Explanation** | **Type** | **All Acceptable Inputs** | -| -------------- | ---------------------------------------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512, 1024, 2048 and 4096 | +| Parameter | Explanation | Type | Example | +|:----------------:|:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| EFFICIENCY | The power efficiency of power supply | String | "gold" | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | + + + + + + +| **Parameter** | **Explanation** | **Type** | **All Acceptable Inputs** | +| -------------- | ---------------------------------------------------- | ---------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512, 1024, 2048 and 4096 | | MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 8, 16, 32 and 64 | | STICKS | Numper of physical RAM sticks | Positive Integer | 1, 2 and 4 | | SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 1600, 2000, 2666, 3200 and 3600 | | TYPE | Type of storage device | String | "ssd"/"hdd" | | FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | | LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | -| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | | COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | | FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | - ### Command Glossary | Viewer Menu Commands | Format | Flags | -| :-----------------------: | :--------------------------------------------: | :-------------------------------------------------------------------------------------------------: | +|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| | Add PC | `add PC_NAME` | nil | | View PC | `view PC_INDEX` | nil | | Edit PC | `edit PC_INDEX` | nil | @@ -747,7 +693,7 @@ Please choose another motherboard or change your cpu | List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | | List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | | List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | -| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | +| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | | List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | | List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | | List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | @@ -760,8 +706,8 @@ Please choose another motherboard or change your cpu | Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#acceptable-custom-component-commands) | | Back | `back` | nil | -#### Acceptable Custom Component Commands +#### Acceptable Custom Component Commands The acceptable formats for custom component creation are as shown below 1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` @@ -772,3 +718,6 @@ The acceptable formats for custom component creation are as shown below 6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` 7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` 8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` + + + From 86face84459490ef05247e20f61b156abd9669e1 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Fri, 7 Apr 2023 01:34:56 +0800 Subject: [PATCH 288/420] Add Thomas project portfolio --- docs/team/superkaiba.md | 20 ++++++++++++++++++++ docs/team/thomasjiralerspong.md | 6 ------ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 docs/team/superkaiba.md delete mode 100644 docs/team/thomasjiralerspong.md diff --git a/docs/team/superkaiba.md b/docs/team/superkaiba.md new file mode 100644 index 0000000000..df3bfa7411 --- /dev/null +++ b/docs/team/superkaiba.md @@ -0,0 +1,20 @@ +# Thomas Jiralerspong - Project Portfolio Page + +## Overview: PC Part Picker +PC Part picker is a CLI application that allows users to design and save their own custom PC build. + +## Summary of Contributions +- [Code contributed](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=superkaiba&breakdown=true&sort=groupTitle%20dsc&sortWithin=title&since=2023-02-17&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) +- Enhancements implemented: + - `custom COMPONENT_TYPE SPEC_1,SPEC_2,...` command + - Required making separate code for each COMPONENT_TYPE + - `list COMPONENT_TYPE` command + - `help` command in builder mode +- Contributions to the UG: + - Section on `custom COMPONENT_TYPE SPEC_1,SPEC_2,...` command +- Contributions to the DG: + - Section on `list COMPONENT_TYPE` command +- Review/mentoring contributions: + - [PR1](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/72), + [PR2](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/47), + [PR3](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/25) diff --git a/docs/team/thomasjiralerspong.md b/docs/team/thomasjiralerspong.md deleted file mode 100644 index 736157107d..0000000000 --- a/docs/team/thomasjiralerspong.md +++ /dev/null @@ -1,6 +0,0 @@ -# Thomas Jiralerspong - Project Portfolio Page - -## Overview -Exchange student from McGill University - -### Summary of Contributions From 2ebe53692547de1cd4632c80513523a969a7239b Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Fri, 7 Apr 2023 01:44:16 +0800 Subject: [PATCH 289/420] Improve visibility of headings in DG --- docs/DeveloperGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5c5f768216..e5c3e4ff83 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -72,7 +72,7 @@ The `DataStorage` class serves as a centralized storage and management system fo In summary, the `DataStorage` class is responsible for managing lists of components and PC builds, providing methods to load all the data needed, and interact with this loaded data. -#### loadChassis() method +#### ===== loadChassis() method ===== This Sequential analysis will show how the loadChassis() method works, this will also serve as an example for all the other load methods that the DataStorage class has. The `loadChassis` method reads chassis information from a JSON file and populates a `ChassisList` with the data. @@ -102,7 +102,7 @@ From the diagram, Command class has a private attribute named arguments which st contains methods that help to set and retrieve the private attribute in the class. Overall, this class diagram provides an overview of the purpose of the Parser class. -#### ViewerAddCommand() method +#### ===== ViewerAddCommand() method ===== This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` @@ -128,7 +128,7 @@ The `PC` class has methods to set and get the components of a `PC` object, as we Overall, this class diagram provides a high-level overview of the components that make up a computer system and their relationships to each other. ### Command class -#### `list [COMPONENT]` Command (builder mode) +#### ===== `list [COMPONENT]` Command (builder mode) ===== The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. When the user inputs a command of the form `list [COMPONENT]` in builder mode, From 53ef756623f1e968a67bbe5d5e86a33ba85b485e Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Fri, 7 Apr 2023 02:14:44 +0800 Subject: [PATCH 290/420] Add color and indentation and bold/italics to PC viewer menu --- src/main/java/seedu/bigpp/menu/PCBuilderMenu.java | 4 ++-- src/main/java/seedu/bigpp/menu/PCViewerMenu.java | 4 ++-- src/main/java/seedu/bigpp/pc/PCList.java | 14 +++++++------- src/main/java/seedu/bigpp/ui/UI.java | 12 +++++++++--- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java index 6677ef28ee..f3312d20c5 100644 --- a/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCBuilderMenu.java @@ -17,8 +17,8 @@ public int getPCIndex() { } public void printMenu(DataStorage dataStorage) { - out.println("PC builder"); + out.println("\033[95;1mPC builder\033[0;0m"); out.println(dataStorage.pcList.get(pcIndex).viewComponents()); - out.println("What would you like to do?"); + out.println("\033[95;1mWhat would you like to do?\033[0;0m"); } } diff --git a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java index c8c4747f6d..6274bb5a43 100644 --- a/src/main/java/seedu/bigpp/menu/PCViewerMenu.java +++ b/src/main/java/seedu/bigpp/menu/PCViewerMenu.java @@ -6,8 +6,8 @@ public class PCViewerMenu extends Menu { public void printMenu(DataStorage dataStorage) { - out.println("PC viewer"); + out.println("\033[34;1m" +"PC VIEWER\033[34;0m"); dataStorage.pcList.printPcList(); - out.println("What would you like to do?"); + out.println("\033[34;1mWhat would you like to do?\033[34;0m"); } } diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 33d2c58215..42a53647ad 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -25,12 +25,12 @@ public void printPcList() { printAltPcList(); } else { if (this.size() > 0) { - out.println("Here is the list of PC Builds:"); + out.println("\033[96mHere is the list of PC Builds:\033[0m"); for (int i = 0; i < this.size(); i++) { - out.println((i + 1) + "." + this.get(i)); + out.println(" " + "\033[92;3m" + (i + 1) + "." + this.get(i) + "\033[0;0m"); } } else { - out.println("List currently empty!"); + out.println("\033[91mList currently empty!\033[0m"); } } } @@ -38,19 +38,19 @@ public void printPcList() { public void printAltPcList() { int pcCount = 0; if (this.size() > 0) { - out.println("Here is the filtered list of PC Builds:"); + out.println("\033[96mHere is the filtered list of PC Builds:\033[0m"); for (int i = 0; i < this.size(); i++) { if (filterByBuilt(this.get(i), getIsBuilt()) && filterByPrice(this.get(i), getPriceFrom(), getPriceTo()) && filterByName(this.get(i), getName())) { - out.println((i + 1) + "." + this.get(i)); + out.println(" " + (i + 1) + "." + this.get(i)); pcCount += 1; } } if (pcCount == 0) { - out.println("Filtered list is empty"); + out.println("\033[91mFiltered list is empty\033[0m"); } } else { - out.println("List currently empty!"); + out.println("\033[91mList currently empty!\033[0m"); } } diff --git a/src/main/java/seedu/bigpp/ui/UI.java b/src/main/java/seedu/bigpp/ui/UI.java index 571d31d40a..b342215480 100644 --- a/src/main/java/seedu/bigpp/ui/UI.java +++ b/src/main/java/seedu/bigpp/ui/UI.java @@ -61,7 +61,11 @@ public abstract class UI { + " \n" + " " + " \n"; - private static final String DIVIDER = "==================================================="; + private static final String PC_VIEWER_DIVIDER = + "\033[94m===================================================\033[0m"; + private static final String PC_BUILDER_DIVIDER = + "\033[95m===================================================\033[0m"; + private static UIState uiState = UIState.PCVIEWER; @@ -93,20 +97,22 @@ public static void updateUI(boolean isInitial, DataStorage dataStorage) { if (!isInitial) { clearTerminal(); } - out.println(DIVIDER); switch (uiState) { case PCVIEWER: + out.println(PC_VIEWER_DIVIDER); pcViewerMenu.printMenu(dataStorage); + out.println(PC_VIEWER_DIVIDER); break; case PCBUILDER: + out.println(PC_BUILDER_DIVIDER); pcBuilderMenu.printMenu(dataStorage); + out.println(PC_BUILDER_DIVIDER); break; default: break; } - out.println(DIVIDER); } public static void clearTerminal() { From 21364b04f45e74c39f0371ddb52ed9d246747b72 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Fri, 7 Apr 2023 16:26:02 +0800 Subject: [PATCH 291/420] Reformat help commands to be more readable --- .../buildercommand/BuilderHelpCommand.java | 50 +++++++++++++------ .../viewercommand/ViewerHelpCommand.java | 20 +++++--- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java index 370c945be6..1bd3092b4c 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java @@ -5,20 +5,42 @@ public class BuilderHelpCommand extends Command { private static final String HELP = "Here are the list of valid commands: \n" - + "list - List all components of a certain type\n" - + "name - Change the name of the PC currently being edited to \n" - + "budget - Change the budget of the PC currently being edited to \n" - + "select - Add the component of type with index " - + "to the PC currently being edited \n" - + "info - View all the specifications of the component of type " - + " currently selected for the build\n" - + "unselect - Remove the component of type from the PC currently being" - + "edited\n" - + "custom - Creates a custom component of type " - + " with all the and adds it to the list of components" - + " of that type\n" - + "compare & Compares all the specifications between the components of" - + "type with indices and \n"; + + String.format("%78s", "_".repeat(78)) + + String.format("%n|%-25s|%-50s|", " Command Type", " Command Usage") + + String.format("%n|%-25s|%-50s|", "-".repeat(25), "-".repeat(50)) + + String.format("%n|%-25s|%-50s|"," List Component", " list COMPONENT_TYPE [-COMPONENT_FLAG lIST_FLAG]") + + String.format("%n|%-25s|%-50s|"," Select Component", " select COMPONENT_TYPE COMPONENT_INDEX") + + String.format("%n|%-25s|%-50s|", " Unselect Component", " unselect COMPONENT_TYPE") + + String.format("%n|%-25s|%-50s|", " Compare Components", " compare COMPONENT_TYPE INDEX_1 & INDEX_2") + + String.format("%n|%-25s|%-50s|", " Change Budget", " budget POSITIVE_INTEGER") + + String.format("%n|%-25s|%-50s|", " Change PC Name", " name PC_NAME") + + String.format("%n|%-25s|%-50s|", " Create Custom Component", " custom COMPONENT_TYPE SPEC1|SPEC_2|...") + + String.format("%n|%-25s|%-50s|", " Back Command", " back") + + String.format("%n|%-25s|%-50s|", " Exit program", " bye") + + String.format("%n%78s", "-".repeat(78)) + + "\nFor more detailed documentation on commands, please refer to our user guide!\n"; +// + String.format("%n|%-25s|%-50s|"," select COMPONENT_TYPE COMPONENT_INDEX", " Adds the component of type COMPONENT_TYPE with index COMPONENT_INDEX to the PC") +// + String.format("%n|%-25s|%-50s|", " unselect COMPONENT_TYPE", " Removes the component of type COMPONENT_TYPE from the PC") +// + String.format("%n|%-25s|%-50s|", " compare COMPONENT_TYPE INDEX_1 & INDEX_2", " Compares all the specifications between the components of type COMPONENT_TYPE with indices INDEX_1 and INDEX_2") +// + String.format("%n|%-25s|%-50s|", " budget POSITIVE_INTEGER", " Changes the budget of the PC to POSITIVE_INTEGER") +// + String.format("%n|%-25s|%-50s|", " name PC_NAME", " Changes the name of the PC to PC_NAME") +// + String.format("%n|%-25s|%-50s|", " custom COMPONENT_TYPE SPEC1|SPEC_2|...", " Creates a custom component of type COMPONENT_TYPE with all the SPECs and adds it to the list of components of that type") +// + String.format("%n|%-25s|%-50s|", " back", " Exits Builder mode and returns to Viewer mode") + +// + "list - List all components of a certain type\n" +// + "name - Change the name of the PC currently being edited to \n" +// + "budget - Change the budget of the PC currently being edited to \n" +// + "select - Add the component of type with index " +// + "to the PC currently being edited \n" +// + "info - View all the specifications of the component of type " +// + " currently selected for the build\n" +// + "unselect - Remove the component of type from the PC currently being" +// + "edited\n" +// + "custom - Creates a custom component of type " +// + " with all the and adds it to the list of components" +// + " of that type\n" +// + "compare & Compares all the specifications between the components of" +// + "type with indices and \n"; /** diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java index e0e2559eda..5188aacb41 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -5,15 +5,19 @@ public class ViewerHelpCommand extends Command { private static final String HELP = "Here are the list of valid commands: \n" - + "add : Add a new PC of a given name \n" - + "delete : Delete the PC of a given index \n" - + "edit : Edit the PC of a given index \n" - + "view : Display all the components of the PC of a given index \n" - + "filter -name : Filter PC List by a given name\n" - + "filter -price /from /to : Filter PC List by a given price range\n" - + "filter -built : Filter PC List by a built of complete or incomplete\n" - + "filter -clear : Clear all filters that were applied previously\n"; + + String.format("%53s", "_".repeat(53)) + + String.format("%n|%-25s|%-25s|", " Command Type", " Command Usage") + + String.format("%n|%-25s|%-25s|", "-".repeat(25), "-".repeat(25)) + + String.format("%n|%-25s|%-25s|"," Add new PC", " add PC_NAME") + + String.format("%n|%-25s|%-25s|"," Edit PC", " edit PC_INDEX") + + String.format("%n|%-25s|%-25s|", " View PC Specs", " view PC_INDEX") + + String.format("%n|%-25s|%-25s|", " Delete PC", " delete PC_INDEX") + + String.format("%n|%-25s|%-25s|", " Filter PC List", " filter FILTER_FLAGS") + + String.format("%n|%-25s|%-25s|", " Exit program", " bye") + + String.format("%n%53s", "-".repeat(53)) + + "\nFor more detailed documentation on commands, please refer to our user guide!\n"; + /** * Help command to view the list of valid commands From 0a2292c2f5bf6f93ec3a917cae7ff5ca09d870ab Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Fri, 7 Apr 2023 16:35:01 +0800 Subject: [PATCH 292/420] Fix checkstyle error --- .../buildercommand/BuilderHelpCommand.java | 27 ++----------------- .../viewercommand/ViewerFilterCommand.java | 8 +++--- .../viewercommand/ViewerHelpCommand.java | 6 ++--- 3 files changed, 8 insertions(+), 33 deletions(-) diff --git a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java index 1bd3092b4c..a07f37776a 100644 --- a/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/buildercommand/BuilderHelpCommand.java @@ -8,8 +8,8 @@ public class BuilderHelpCommand extends Command { + String.format("%78s", "_".repeat(78)) + String.format("%n|%-25s|%-50s|", " Command Type", " Command Usage") + String.format("%n|%-25s|%-50s|", "-".repeat(25), "-".repeat(50)) - + String.format("%n|%-25s|%-50s|"," List Component", " list COMPONENT_TYPE [-COMPONENT_FLAG lIST_FLAG]") - + String.format("%n|%-25s|%-50s|"," Select Component", " select COMPONENT_TYPE COMPONENT_INDEX") + + String.format("%n|%-25s|%-50s|", " List Component", " list COMPONENT_TYPE [-COMPONENT_FLAG lIST_FLAG]") + + String.format("%n|%-25s|%-50s|", " Select Component", " select COMPONENT_TYPE COMPONENT_INDEX") + String.format("%n|%-25s|%-50s|", " Unselect Component", " unselect COMPONENT_TYPE") + String.format("%n|%-25s|%-50s|", " Compare Components", " compare COMPONENT_TYPE INDEX_1 & INDEX_2") + String.format("%n|%-25s|%-50s|", " Change Budget", " budget POSITIVE_INTEGER") @@ -19,29 +19,6 @@ public class BuilderHelpCommand extends Command { + String.format("%n|%-25s|%-50s|", " Exit program", " bye") + String.format("%n%78s", "-".repeat(78)) + "\nFor more detailed documentation on commands, please refer to our user guide!\n"; -// + String.format("%n|%-25s|%-50s|"," select COMPONENT_TYPE COMPONENT_INDEX", " Adds the component of type COMPONENT_TYPE with index COMPONENT_INDEX to the PC") -// + String.format("%n|%-25s|%-50s|", " unselect COMPONENT_TYPE", " Removes the component of type COMPONENT_TYPE from the PC") -// + String.format("%n|%-25s|%-50s|", " compare COMPONENT_TYPE INDEX_1 & INDEX_2", " Compares all the specifications between the components of type COMPONENT_TYPE with indices INDEX_1 and INDEX_2") -// + String.format("%n|%-25s|%-50s|", " budget POSITIVE_INTEGER", " Changes the budget of the PC to POSITIVE_INTEGER") -// + String.format("%n|%-25s|%-50s|", " name PC_NAME", " Changes the name of the PC to PC_NAME") -// + String.format("%n|%-25s|%-50s|", " custom COMPONENT_TYPE SPEC1|SPEC_2|...", " Creates a custom component of type COMPONENT_TYPE with all the SPECs and adds it to the list of components of that type") -// + String.format("%n|%-25s|%-50s|", " back", " Exits Builder mode and returns to Viewer mode") - -// + "list - List all components of a certain type\n" -// + "name - Change the name of the PC currently being edited to \n" -// + "budget - Change the budget of the PC currently being edited to \n" -// + "select - Add the component of type with index " -// + "to the PC currently being edited \n" -// + "info - View all the specifications of the component of type " -// + " currently selected for the build\n" -// + "unselect - Remove the component of type from the PC currently being" -// + "edited\n" -// + "custom - Creates a custom component of type " -// + " with all the and adds it to the list of components" -// + " of that type\n" -// + "compare & Compares all the specifications between the components of" -// + "type with indices and \n"; - /** * Help command to view the list of valid commands when in Builder mode diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java index 403191e0d0..c6f4a31252 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerFilterCommand.java @@ -6,6 +6,7 @@ import seedu.bigpp.pc.PCList; import seedu.bigpp.ui.UI; import seedu.bigpp.ui.UIState; + import java.util.Arrays; public class ViewerFilterCommand extends Command { @@ -40,7 +41,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return "Filter cleared"; } if (userInputStringArray.length <= 1) { - if (hasFlag(userInputStringArray)){ + if (hasFlag(userInputStringArray)) { if (containsFlag(userInputStringArray, NAME_FLAG)) { handleNameFlag(userInputStringArray); } @@ -51,8 +52,7 @@ public String executeCommand(DataStorage dataStorage) throws PPException { handlePriceFlag(userInputString, userInputStringArray); } return ""; - } - else { + } else { throw new PPException("Please enter a valid flag and description"); } } @@ -76,7 +76,6 @@ public String executeCommand(DataStorage dataStorage) throws PPException { return ""; } - private void handleClearFlag(String[] flagAndDescriptionArray) throws PPException { PCList.setFilterFalse(); PCList.setBuilt(""); @@ -84,6 +83,7 @@ private void handleClearFlag(String[] flagAndDescriptionArray) throws PPExceptio PCList.setName(""); PCList.setPriceTo(""); } + private void handlePriceFlag(String userInputString, String[] flagAndDescriptionArray) throws PPException { int priceFlagIndex = indexOfFlag(flagAndDescriptionArray, PRICE_FLAG); if (priceFlagIndex == flagAndDescriptionArray.length - 1) { diff --git a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java index 5188aacb41..c944e0b00e 100644 --- a/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java +++ b/src/main/java/seedu/bigpp/command/viewercommand/ViewerHelpCommand.java @@ -8,8 +8,8 @@ public class ViewerHelpCommand extends Command { + String.format("%53s", "_".repeat(53)) + String.format("%n|%-25s|%-25s|", " Command Type", " Command Usage") + String.format("%n|%-25s|%-25s|", "-".repeat(25), "-".repeat(25)) - + String.format("%n|%-25s|%-25s|"," Add new PC", " add PC_NAME") - + String.format("%n|%-25s|%-25s|"," Edit PC", " edit PC_INDEX") + + String.format("%n|%-25s|%-25s|", " Add new PC", " add PC_NAME") + + String.format("%n|%-25s|%-25s|", " Edit PC", " edit PC_INDEX") + String.format("%n|%-25s|%-25s|", " View PC Specs", " view PC_INDEX") + String.format("%n|%-25s|%-25s|", " Delete PC", " delete PC_INDEX") + String.format("%n|%-25s|%-25s|", " Filter PC List", " filter FILTER_FLAGS") @@ -17,8 +17,6 @@ public class ViewerHelpCommand extends Command { + String.format("%n%53s", "-".repeat(53)) + "\nFor more detailed documentation on commands, please refer to our user guide!\n"; - - /** * Help command to view the list of valid commands * @return the list of valid commands From 332c23e1547201a90ed027c71799cb811a814e51 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 02:08:08 +0800 Subject: [PATCH 293/420] Refactor guide to meet cs2113 standards --- docs/AboutUs.md | 2 +- docs/DeveloperGuide.md | 5 ++-- docs/team/KeaneChan.md | 2 +- .../profilePictures/cs2113ProfilePicture.jpg | Bin 0 -> 27927 bytes docs/uml-pictures/DataStorageClass.png | Bin 100282 -> 90919 bytes docs/uml-pictures/UIClassDiagram.png | Bin 23646 -> 21840 bytes docs/uml-source/DataStorageClass.puml | 25 ++++++++++-------- docs/uml-source/UIClassDiagram.puml | 12 +++++++-- 8 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 docs/team/profilePictures/cs2113ProfilePicture.jpg diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e6be10e8f5..2ff6264847 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ | ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](team/PrincePereira.md) | | ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | | ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](team/reynoldlam.md) | -| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | +| ![](/docs/team/profilePictures/cs2113ProfilePicture.jpg) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e5c3e4ff83..7b697a441c 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -7,11 +7,12 @@ - [Design \& implementation](#design--implementation) - [UI class](#ui-class) - [DataStorage class](#datastorage-class) - - [loadChassis() method](#loadchassis-method) + - [===== loadChassis() method =====](#-loadchassis-method-) - [Parser class](#parser-class) + - [===== ViewerAddCommand() method =====](#-vieweraddcommand-method-) - [PC Class Architecture](#pc-class-architecture) - [Command class](#command-class) - - [`list [COMPONENT]` Command (builder mode)](#list-component-command-builder-mode) + - [===== `list [COMPONENT]` Command (builder mode) =====](#-list-component-command-builder-mode-) - [Appendix: Requirements](#appendix-requirements) - [Product scope](#product-scope) - [Target user profile](#target-user-profile) diff --git a/docs/team/KeaneChan.md b/docs/team/KeaneChan.md index 75c44d8a60..e3ff624a54 100644 --- a/docs/team/KeaneChan.md +++ b/docs/team/KeaneChan.md @@ -1,4 +1,4 @@ -# Prince Pereira - Project Portfolio Page +# Keane Chan - Project Portfolio Page ## Overview diff --git a/docs/team/profilePictures/cs2113ProfilePicture.jpg b/docs/team/profilePictures/cs2113ProfilePicture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b872a0f01bf86ad3b8ecfa4bd3cc5e169f5c854 GIT binary patch literal 27927 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

    Sa=1t4Yc~uDzuGrPA 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 ZQC(5$+^<%@jOMJ&Z+znk?EN?Q{{VbDaQXlM literal 0 HcmV?d00001 diff --git a/docs/uml-pictures/DataStorageClass.png b/docs/uml-pictures/DataStorageClass.png index bf495ee11e91a3b85024237553bf0404a83c6369..9a8f6b3148bb56272c42b1a499e1f6136ba2a9cd 100644 GIT binary patch literal 90919 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

    Y)%6Xsf1h}W4CQb_xJ1K06`7}#nqhTWEd4+ zm=IMm2DTec9b)eIoi5MU!a!PoU*GL__PQM-=hb{&UQ|7Hv9cxn92)vU?Q2~8cg8U5f{Vp#r=js$V?&N!TV5h*}>t7{-qab0{ z1jcFUh~^;Ybs{?xX2GJq?@lXyrJ=W-S3^(eypdRZZ`%9qDM+yCsi{`Bwnz>VF7x-N zQ;;NgaB%1+7lM6U)jYAZSsMQR`<-qcz%5~6&)Og`s+449e*{x&I)p_>S5#L|!OVA@ z-y;`ycVReJcjkWG8E_8O6i zgcdj%26+n9=A<9ZTw3~TI1kB*kLwJqw0O39y4;*5%O4_*Y7;G9*8^|8VB{H@WF`DoZpcOtL>D3 z9QDt2reBcEp1b<`Q^2dp5yW6?l1Cfj8_joObl+&_AiQWCd~t2xy1BXPoBg=UXo zXZMuurk751!uT2=e=+GHgw*NNSx{&e47x{d2mcBD+|m2BkjB6x!n8z zm7*k6M#xAdQ7J^Bkjyf&iiWZxq%tzHl8A;vS=oD3wo*xv5m}K>R#{0lk^OsKIE{18 z_rAa1$M62*{^LIPsn2y?@9}y)*XzabJ2B)mSiBgIP1EI&I&NDeB6Z-->DGelR+k&4 z1@2}gnFccZ4ZwC@#_fi`(ZQ=IP_WDW*Bc^EP5(E+1}L*{uHt@ejHYCQnhSfnEDzN_;xWATs)UL&)6*B2ku?3B;c4BzeS1bo%T%Wb`r=!+Zh1Ay zD=D$<)Vu2ITLTFK>Z1?m_LCG_Y};0{7`GSSL7a}grDeMR%;kfmp>h$|{Amvwwn$SC zYGwhG>Wv?r8PyC>2mr?t%d<0Abk+QNXSbt70b^xYpoU|D$@%bKd7APRM+~0S8{F5`pKDWwC6dV`E>~ zSuzmQHHPYAlhS_E=#HYo!aEe7m~@WMl=|~ANZ10%Zl~W%b#JToe%8WZ`1dzD=%n;* z6hx4*h*`bl8lPz&mwhXL?xTU-iEiD>-cIgP?O(p!W)_r}I1(B9${r>s6LOs_tt5t7zlV}G3>|qF+9;Uu(Kh75@i6)1 z4m2NTUTW+{#}s&ueQnCU^knwQm(Vu0t)oYJc(Y}4S_%u@HEN=yRxnRZO@UEAKw+|9 zc#(IY2_FT`x?(fZP+>z7QRmiKq(#nbG^&r=1n?`I4Y@VunNNMoI8&{@)on8hLlRVL zh*ZncpS#~D;nt#ir<|HU&rDD1IS1zN2t4%U$rEIl3!ZtmPRLkQPcPC=B#nSexJ91EPmjwzK;@+cTj=t0R?!ns-Et|W{BhveM-C=g9 zO=}`^r2lyqOT~)r_TnwqJ7HR75%Ww8metwxY&&byX1{T4_jj6d(07k}cCsTV>}0eW zn;9I}JvhPWnV6iL9`%;EW;fe=lhTq5e3{ND+XX18$4~{3*c5n#6HYRHUn^JF(rQ5O zIRliCNS6cTjPThYJ3kT*0Q={mu}Wty5h-cEcRlRZrkBPyij5C3zuy?wwe!n-|Fh}D zfi=5rde&NI<@!c;!|vhJOVJheYwM}VT6bBAZm0D`AkAv(GT}$(%7X>a8_?zEUoS2# z72xM7-%H%yEB8!IKL#s`B{}(2*OafelKG( z|FNvHXUB5)FqC6gczSwHOxRbmYa9<^^6Lyek!y3EmV*^d4Hl3c{07J?i{B51Gp3Bl zMI2v4($sVE7G@SoMf`KnM)Uo~#yrE9Hb&Irmiq$RIL~r(2yNHhmrk3}vhjaCjj9!- zM0n85z~|Rfc2?fZ#?HmDZTd=mB7e1F(Z>olXBoa78yl0b?4(X-{-eHF(;{5gr(9iN z{E9xt#OLhYKfevGlBIf5CQT|a&5uvNzDC2QXoCv!&>`yDSeBczk3Jx-U})04;9PH~ zkcF&_3<{~6?0ZFb?ef37;`t2i@ah@^0fc*gMA=m$uFxqiM#@$6;riR6=KLed#ipAY$4IF zPz2V$P2OsB>K&}?j%}>u4GVY9~+#|%$U&+ghAFHe|Jx&^e;0Nv< z85K!MNqAqo7KLy4wSFCStaF|`iHVCt6e(g?P*5f7WGa%{Og8Z4PA=EF*WcD=iAZiE z-}$D^g=W#uCTzr{_71$@{r!(>&svL~u(i$k@zS0@Uy;hh8otjbJ=1(S3Z9Hh&~?UAU=vh|QV%kC7QK>IW!hH7f)cxKB*$l21pxi|t;PA&bADL2#sCN=kz0_~+|B z<0IBQyfV$G)Ny72-PTF5S*Tu|A*Mv2rtif{V6V7ZNcdYwP>`rz!LrSp<6vYS;HOC4eRI*`WRnZaFE6GtmO$%h>st_@9A}#8ch4y4 z!?!r)2c<#D60GOm#~=3k{6`rky>2gxbS!&PXF69$+d|8_k^cF!XI+wp66E67dny-o zZU6Od|L2Z1;T*C6Z+d%2-Sry>F+r39PKoawFJHE0N3RJ;en;@|z-MVA)ohcRSe#WU z-}&rbPNf}=C%1;K8=y>h{;9`v&w1j>#h4ty_krC#k&#?1ce;BJJ=J+%NxD&pwA!HZ z8g%69`wd@i?F9#E+%;D@3CMe(#Bv{1U3U(;&(o(*gWJ*Sk+|dMci>xxk|j~9$dwVL z3M##np|C}v$8EaEteAeTa`ab}3`Ljv8c*9G7%DFA%ZCRqT4CHGr=&5+0zQPD9N>uf zu~50BS}$k0Ba%(=rx=3w56o`3)!N#chQLL+wtEl6{R`t;M|r!E_MP7Yj6g?>_CkRP zPrFp^LAsKP3JyV|8?sR-ecoYW1K@^oX|D_>{*ywqcMcytYTOqlWKxX^IS?5RTVi?V zkW2>irOSComshw^(sm`!HQ4wfPyYNOO9H#so?6~{hRw{}9Ddh8r8hq7rGI2<@Bnj! zs!;8F*`)8&@GJhrCEqAv)m4eOB*BJt-EYETjFiqDTi4N56=i@f0W8 zojyvk0d5RXN(ai;w%)sj?u&`xaskxqxCSBCLjgy*k_Eog;wi5TU~+oCtgTKLC3+?D zcHX$h9sAT_>|s>Y1`8d7Qa^;KZZYuLA1rohyJe{pMS;{dc2TmXU;XA>s~%H4*Q&Qh z3w(I<<{Al2r0`m5oD;}gMp3}HqVn1`ioUQNr}tmDurr+*h>FGY?~Lh&QEz3}BdX{J zMuK=;z4{DOJhVdU_#P#}QSopC*9TsGfl`{RdJ8rI^R-Q0ZQwQhGJfr;({ zCi=|z7lfIE3>bUV5M@THt7ZX1?l>m=)QnzPO3Kwb?tA=v!%urh;WA zKTs~}SX5PCFMq`qWfI>o<W(Rp^O`%8kB!`d9rx#2TS~P$pH7scaXsB73^x zSKaV7Q6Kd}t8am9)SYqQ#jx0_tFK`gY$Y%F9V6(R0bUJ3qc9>uN^5Y!qL&9QIkUsf z%!}2Bb$^=_ zMaSk%HeahZeN4j2|CoVjmQ+>ZRcEBGTD3~ZxtcwLF_kq%h?CPr#IWGa8&IFu`PcbQ zQ)f8*xf62}r5Ew9Q{t}au1#WtcASk33S*ubHbC9S0247N`#(Httach-KtTg`RLv2j zL_Hg+J}CO&90X)2CJBKIZOK_<5)bO}c4i@CItM|2hPdws<0Vz(xTGwF1mA&iYHA3{R!#SQubF{lN1v-_#dbi)Do8^LZ?-UC4E zTOXg8=yl`9abz{Duol*o3*S|(=-(U~vAL7>rT#BiJ0nSyK9k!b=uj*)#PBPmXoo{Q#U`qM?(cUA`RX zqhZ!~vivxTN?ZmPXiLQT`T0d@NXv&drfnb(ANz&0S!r9Fk%A*4qMh9mA#m!R4IKPJBlxQe z>6oLX5l+8fjFSdt<c37Ut?O8yB~a1HZSW9q|orE{LS`O_H=Q*UhTLa+s z%;e4%^;qD3KB*{n&@T$a^(-mGUCvDQobu-tGzS~#_=+Hz*REXAT_9nx5lDrGQ#;^{ z>+I-&LF4Gw(^VN8LDSyXY=#&>M=Yq8yDb__!+*Bbv~FD#x*kS{cjB7b6kyt#ln<6Zlaz zn&0?Qb=OcB|AYOm8VRJ`L`&e5?QfQ-ah8@<_y+guhaGkWv1WQu>|wHk5Z_H%Y44ji zZnRfeSglW~M_49e^;sZ5O7XjEDUsqwbA^Cd+(F_ z+wHyf*X=F$>+(y~V7q$zb_EFVz?8+cpF2D6g@!i65`@}o)vDC9wY;5iyCy(Zd}MNQ zTJjSW4cDqgrwM@pwNa9!HA46y3pdTwd7#XMSTByFal7E;pCWGjU;M_B%tRV8N#|b# z#DBf7yUatxE-8QQrm^SQMyA5_bDx50iOLNvV;shfbJfEGh&)a|EOqo5UQKJ!^kigb z6Z0X)KbQnpM7!+~^B$M%y$GHF4~eeX%~{UY^os}Dy%R4kKS@eTl8xHAmKu6Ey#1{k zV>K&Dhj*tNl}GyXKELf@CLkcu_2t*=QaNFbiF^M8EfIOl^q9hfyLVsZX*XWxW-B9U zmrYPI*fLOeT^AVH^A|2eXg-^n z_?E%dy#6Qg5j0N?Pp$SsL3eBI&Q~QRCP<>5ipgdaIqO1Zdbg5AZT3V!A*?2~w>4COSpy9Gs z^ks}cKmuKk$C8Nq_nFL3ImDXL4@OD(U`mE@gF@|vGFoq_=KCs2cej4O?#tU3uKPNgo~#~93bIwdR`%OOH>%?^ zo-+T7Hh#qs&Rfb&@!}^^_1x{`KhJ;6u(${4!$BhiDv2Y8^x120@=tUxI55b-{}ymU zOG`FtfKINF$6Y);=$P5X1}+Te(tmTK%2>#*)7oVEEk0N3<(eBt3fcB|>h}srRo(vOa(Q)A0HN8kFZ{Mok4OtUTxpUz-K_gKeeN zZsa+)<3AMzUTYXV7{_i-e(m{j^K^#LPKJ^lz!sV_iWh`Y#BewC1%c^JP4}i>l5zg3 znW1KqJKQ@M`~3OdM=S{%n>1hc;LU=*#<_#}7$}~-WeiZrj;RFfh{(waAW>H{%ysrD z?}IjO!~73I%2e#}JtQsg?bKzOjcW_^9z+Fftep^7F+JwTw<)p7gd<>E1JBN2vthB~ z|3h`q+xO3P^SYu!<(c%gya3HdABI`=F)hq)7FHxLFDfHA7l+Q1tI_T zi|5+?nwP(~`|3a&e$egMgAJ8ndEvq!Y~N4vP<+A3r-Xuebvj~x;AbF_0wsJ-#nj=m zZPt7Z`*Cb4rV!ArTlefz|4GKQxnnJ?!c`Uma&?Fn{ojJu5-@4+?{`K5LUS|^LuJO< zr{^(gXsSFf?Pl7~B4XH3)k*C*I-kf*;47-Gfv&jWE{X??TY1CNGkn~4G(6L@$v6fw zt7ls_2n*M}d#8Lk_2@qiD*|HuR2Wubpo3^pgd0RfwP9LCVV*k(C)|>W(Fr;X-ZH$~ zzuWI!?gDVmYX*Kz!iO1Gvyx3zXye9q#29z1|CVV4e`{^u&mtmmZQ9+rBm4LeC;;Ob z9CbJgn<+Uihj+aUU%VGlU?N)-CwKg;FQVe#$4&{E+ia`YAZ!Tmxf;o7(hiYT#>PpY z-Nv__J|WL1jJyo6#Im>9l_n3BJPFfM41QxqO4e!ER~}vk{P{^-Q`0&B*_UK5e|4^) z?j>^#&YU6A8DmRJJFvVD91&%k-x54RkpoS3!*JlC4X`OyPZ!xsI!IBRBm$dz=2;s3cvuFdU!$*)>Vamy+~S^IgrC8?ia8)@LrQrfhI-k;A}?(ATBYn+_7c{m8$g2lyDV@ zC|9oBMH}eAtsG*DA#3aFmlue4Mjbta+9D(Aztk23yMMiALJ<*B@>56VFZ3GY;V`}^ zU>5KdI0jh1{zGvgXglx;P^4fmCi;#-4D3ttS}ycoV1c%)g{0qMfmLTr_ldd*M?+97 zg2e{1Cn+Waz@hzfr|$O&$t4r%pJi{d#H_t_G|%Zd*d`ATXsE>ss-*wYGw`YH!=i$X ztx;W9x4)x9W;2)AfzSgsXaA^&{{!ydvw-`1-TR6A^Ns-bFW?Gh=F(WHu4BX}s#BAg=f$h5Bt1| z%6aZJ1-PvY6KbPMhUw%&Quec}mTwb&Vtxm@0@U#UfA&~*VvJ`mR)Bc4{G6(Rju{wn z=ge=)hJPsnXp&F_XgYZU*?&*gwdvR5`giGE!aMZi2xN(A4IcY|hN^!a3V4zq+1=EKYSRj{BUGn_l5K4=_JfKoe{{Nj$JVRUI@N*M=S zO>J*h8o@+!y{U_{p8T5@r}gK)KII}r5}ODF2B_P3_Wt>nA{M}Vx8i@?=2JWWxXr_! z?>R!xZs6TtovHQ}f^^@rgK*o_oCiw2jD`lPRQ?s?^ML(W^hOQIno8h7*jF9>&Hm+e z&CM_3<2^Oo)7X5Z#sPPLnLOZ43_Q{Nc~hg_xcxs|)#m_2Hf|6ruu)m*a*`m1f61U< zepCKO$A1kSKQ~EIMx3Ek?}4Iq3dY0Q*uWQ-)OFCsH#eP;vODm{qr8? zi)n9E;fqN>m1U-tVjgBx*#!d}e)@r(*NHv0^4A^%bnWPlNwgR_-K?Sgt6_M z<>chV99&QGO5I;a$NNOlWgHw~2oD!Hwlwi|dHJ@zd!OSc$HsDVap}RCTc%<schYtnp_f&kg2M}HL)?VyXFkJ}hDC*W&b7uu6mIKHyV;=``QSMx{2n7SQzCWWAgJ8;nb!uVcFM z;L`=h7X;;g;iLI~V%+=xWZb>>{0GJzxg)0k6Zo#H!3IbOpz#?cy?L!)9VH9r%OLQQ ze*)`SkX65iTI>xm`_zP{Oko=3_=x>9&KvDv=&V6u0~ZO~>o7{p2^aB}&My5BFVA=E zB0`~IPEIFjVl`}#y>b5HMIA)NId6Jccvv*&{JwjOb>s=O9wN+dR!_AKnlMbhp1+k1 zUsNDk7rSC~U;yBy$8LLhdHHkawx^e$ktr=IFHb?-kOQO)VB?Ly83b4O7H2Vy@MW2i zBB$h5l7-LF^2}KJFuQEU&dP$IM)L@14j3r<$ zlTeQ7F1h4jGh-49gNflm#74yMj25fRwf^6u=Ue}j8(b$%FMJk&g7{~*pDNL)5@!kf zG!AmF*Hz8e+})dAI37z?;{rDcRJRj3G*?IOiNN3}Z<$pp61MriIe(W#F~Jhx2sW`gR}T?Fc-ft&Mtl+&b=24)ov9jRh(_ zZT-s)bhNnId3r$==>LSsCLPNzrBu@>(XjVYGCC9_^cB@XV}(FE%@p~{y0Wq|1L5yq zbiZ$7)j4oHiYvveE@i~wu$nu zM!CradE8nto2@0AgUVnP2*A^bKQVKV%DW<=q%2XkhWilb_ykgW#3yLk$-*s&C($*8 zfdo6}w)4~mQyXn-sMxQIyc`&Nc-QvR*mKX@XO{frBZ{8+VBW^Ou<%?ixplN+EbrB( zhfyz|%_26a!YoK!^JUq+mD`TZt;7Yefpr`uexOpiwWX!LjhyUGUC(+Uxwx7Oc9K4I z|4L1mbN-?xmU!);VKW^7`jon}x1 z+7lE-PWnRi^7=)zK|l-Wo|qW4rwsJ;o)tgt3Zjk|#gs_jmpk|kAW1Ba-A9#Y#tBLo z>K?6tQf^d^?=V~*6{~tSW;uX*k*abP33HwqhilO#@gDj;q<#308%n>eBhK5jdBc{i z$dLLXB}d~>R5w`ahE60NHtihhQVupYN9YiOG_|#vl`N2Vv-Lf`oiob)0|%CrhhAH76dB$v?>Ff zjY7xn;kVcBrBpo|$jmX|t;A7i%Q2*W_l`M$`{CRagD5M5&z*v&eTHsazrKEN6p#r$ z5DQZ@8QY^7f+2Up16JuYNj@UGx=1c60J% zz%YfJDqOoQT5kX=P~niCpy+MxqOKj(7#JMf14b=fGh7r$2mD8nNkeV~o=Gc3r*JAm zc7{cd%zklT_o*qw4#QC)cbi?40)GlYHBOKLQ-^L4=BKnFHKzDmar^%_Ku6_+qes{Z zfE9Ip8OZ!_a&q7`?c5`RPH{O|9v9|>A%3yI`%w4r>E8y132z9f15aWo9DFn@mM?#T z)Oi64vM$1WQR$G7m}n0Jv99CyTHIc|`bP6r8rxyE8^9SVii*D6&znLppi{yPOuXEQ ziflv;(FhW2Z@$r;o%m4dLO5R}TVi1Ni%&|LY#w_t7KLjRqO;PqWZ~KP0g{i}+AyOR z;VTogvjeo?OG^XR&Hqd4iEaJn{UehIS6J^5$3Yg(MEw8zBa@TOAVtLYN21al0VAkM zmj0&3l!!}Dbh`i#0Ui^nHraNn)CU%(%#PrYt;Wpnck zp1?@=w$i^sFohlKsx0SOp%wYcr(o$cA3mI{Z}{rp1eya@UxT_i4{_HZ)&VJ-jfsi8 zhSX%0!6>l9k4WZOC6vWb!HlNH{B7-XDeLo_HG5H@VRm5h6V!@9Cy@YJ+o!>NKvwpl zcKS8%Ke^cham z6Ns@o!2E3of#N**h2s3?1~k$7FCb2yOs&*BWOIY$_XHq}2L{hui?XGcd!Onfrlio& zFi!tb7tZo7_a0t{0yO#x6d`By^%qc};Sk*z=Ov`8zy|_cQ6I!iBvvLSIqPl1i1V_j zf9yJ?(Kq?yhi8ni;93nv^_aJ2kauD^m2R*(6~L6=m`)Hshuh;sbJ1#Ei(MdohUo=; zl{$(c9V^~v)kU{u5qp|E<>o`9f7fslHksD*KYcJ+dfzmhVOhKY!_^yvY-Z=loOO)fm=FF$g=8 zMg1qgW3)`|;Uh=n7zT(~Q$Yy{=dysEEH_bS?SZThav!07laoso zEtg(*A(YBaa#wbJdzOso?$c>d%NVnBMLm98*(hOB9gPZKP)txz{g9@r>ZxgNzK>L^ zHG0;tPn1OH^TK5E>p_|#Mc0m4o)cn$>C$fz*-LepO!O-N8MyXaNTZJ z5%`|5RpOJNGT19npcC~o*U;ZLCJ5@1zNMefkLR%nHf9cx^ zmnX6qLLtjSjq9IUBuRKqF3tl*B*jbt6N-P9c6tO*q%~f*hj64s>p}1b&P)7&urtfm zvyS^x>$0YfzftW~u0h|AZ}QT7*eKU?O`p6@pfhyU$E|_rT?hM+aT4Sefaf>2*bWX| z=eF#r-`VNMrknd^spO+b2TjUBuq6;B07hY=r{~cpbBS97utSADF_`cpBN#EhAx|y) zZQ>kbB;%3CtOdqM%<^xHQL&==DhNB1dh3Kuq`r%!LqCNn-*%pUYkyOcIRBv}IYTH( z_~w4F1Ty@vqRZZ4hHq}ws)5ZthVzV&+vtKxRP2RK#R`{`GTBKqZ%{(X+d{}~^&zg5 z%w;>V1$^DSI$_Cy^2P~Ferdfvc0j7>hwXzG45F%vr_j|SL>32Ac(~+cj01tM?){UT z99xLe)6|X`fZBn$ogi|OAV2RKBIKNvgoBJR@AA07N-H=nQ1svoNu#T!BBUh>JQ9$W z@N5xLEY^L?7aX_XU@3;Z@wDM9Lb3zps@#DCl~W21l{z4~s$E>jn*A^b*7VGoY-C*Y z-TCVacxX^cU3A1Xg`*eZrNby6ROoO`g)SlDDmA?ziAOf!O!N)wHH3@g*#wmMi0!jM z7O0ig@tpG!KZ#ew_%wuSh98E+_0)yW;4|&lNo8hW=xA>jvL7+l z*|O=2lg^e0@C~J(HJ=o6lZCkM3p;5r)8Qo92(P`e^^Vd07L}l>g6nHa$;dt_U>8W< zCL$OC8&4s7C$=TI^ypZXc5T&U$-8$n)YR=t{{C+n7#Lc=y_&bfUfoSL?H#Jcb^yd4 zc26FrI?hhF%xdBV?IkRB;0av7SIPxl=MK9c?7dkP^F)Za@z z|F5)bQo1?H(cQeoKSCBB2Tm)zAqW0uRaMnPhsrjGU5>o*T^vvA^5Sic8e0KcTwUxM zB0v_W9PxgeD2YG)CCa%cU`PQ2Lf2*3gKxNg&Lg}ai47B%sT~~4a(?anJxQ1O<{OEb z!P`VNM-(}qE}*~9Cq{%f^*dnztQNDwmASA3zKDWHZ`!C?goAQQk~LQ&VQ4S`!UU+)&A45~FBQQMqQAGW_ibMXl83kt#VN_hvdJJrghu>tTqpT3HljiyIrX}gkd2|XKIZ+CZM?b)xF%t7G|>pr*l zZ+8XwCmY2KxfB8#0>bE*mR$cUseut+z0?XO_U5g?xDNu%`GPP5;jtR`c|`C_DC7uo zGBSf#=VdzLihtAKeseEePD^*H{O=AO@h?Zda=4EEZ%H>n^TNMzZXebDEZd~-JlKG; zZ8w=cIf5*9G&@b2M^*g@Zkdv0CLrp~r!)xcC8g~GZ0Qa^X10T)W zQ2)$s7%}33$N;?WM^@Vi_!fk{#ybJ$ix-E`WfrSwzCd!s(bIx%mXM2TMF}?Bw%z=o z>-^vb3NkeeV6<8vGelT_6Pu98Zug3i>?UnkknB<>reh*Qpsw)g3wj1B!NRy3Obs|h ztvvn6{v_(YdbnOAMiZ>%a;rlK*gUG&OG@9ob!!hIExh(_1WRxH{F%wSyPFPn1=tFL zZl~8tnpy|6D}PZXYnNuCTMkY{M1%e4PI`1V^ays|iN#o(%9ax&CcNhnmIS8wpkdF~ zDwK2XyQZBCfBAK;6x7badqbc8g7;9G8;X`t++Fg_<(!Gh;J`q*eRgKA^zyWE^3^^2 zar8m$ct^^8(z0T2(R7MY_K`ahh&d%;Sc8x=d#mRftzvRv%3&WF%ug)3!Hm`#RZ}`9 z{EFJMt3@NDC(_Q7`Xi;~EMkft>gK)cLDc6?O$ac)2PYfz$*ZQS*s_b;N`BFV`I=Wk z4xXd)WFr*z!QGtu&|rhp2j?&mr+|~zibx|8T{OKKgQ=tL4x-`n6&TI9Gw(1aR6xI% zdNRUWJSrV zSo)1ByLa#Q3={T&G~^n|ujSplTOM1L16a#C&&sX3ds-k6PWP{kxYqX=SB4i99Oyg} zjmfpEgBw4IaZZ@f&SQGD*gJ^u01T!cdkBZddSdo8zMi2nX^)qij`-YKR>fL&o}I>V zL4rKCmpheVnyGZxcT2#m*}95!P?TnTK%p-D67Au$zkU*dTEf;%Yi zweGTmEG{iR8}=ElTDuk_aq@dYLe_aR*y!uG!F7rItT+gE;+{Phn| zQDSzyqL3#QZ6+*anN&=OT)v}JqU}35Js&$_))}`rNcPdAN4mK-2#DYre#?!HQ5Um0 zc`uTHe}wIbH~BpOMTzmkrQACaA~@h1Hq{<=d!O1Hd*-=nvFjhzqR2wE$RMs+qIXA8=C^9`6*qE3 zl+X5}oAi^rOyX<96#|D8bgomc7R@p-%$JNtf)eFt3|I;O%{e~O)r9x#!e;f* zypS@*Z`TWjiMz!zK|N%T0EEiB|H4`#cUy5zK2((dhkQuR=2kEJIRQTKpVB$F%!H+n<14Is3i>q!N0ejHp-gzwnlBciFb{fLH!XaC9-^TAK8 zWFspkyt+>j@k&l&1iVH7YZp;#J$^~_Xj4RPHIkMviqk)}*~?3l^7Der7&7I5x{V+Me|vOkxNc>(2IYmxQ6Th_4fvvtKL#T3F&-0|XGNTk>`<5egj@-$`nZFli z`yo}rc{sR*K2KmVXi_@I!`3?x9RpEDmPHFu?!6Sn?K$Nf6dVk*<u{ZW2oyEPR>)%!-qMJ1`5>W63V5^ zj*gFX^B(qnfn=&XRwaoBDMBxh-#d17`5HtL5_^nQl`T9^I*%7WgGjF$YjM_PMnF*C zrM#%Xbf(>-MhmR%?Mi9EIo9^X#MACmu(599;W37J2XCyTC5u(KfW zl1PaXb9T138 zAg2lo*3rkO7L`Z9j&k-J1lh&K#TdZFGa=5ffX~Hb>w60J_wa@eT>GsCoL*NOPxA(a z8kQ{<5S9pC+-TJYHjLUt!J#xbeh9X}!&`=8OANej-Le5MeKxZu zP6boWPtTzB!wis?zY@DbovsTwTUrid$PH2z6(Uf}4~tvbfq+fF4yWD&Ebl^ zt&{o5?jGxiTJr}Fn-jl41#^$0BdXaLC@v1SpGCK~hy119KAv=$Qr;60xjzNl1^m}>E)uZa^R$aRWj=)A)V)-L z^02n{c#4IiDaeZqQA27MCp11?mmr#*PdK~5yUj3}|FKC8_k_~ur+jkvJn%1nkBI^K ziyRr7#9+il5;0;M4V|jRkv7dKq1laS8S&fM*&-%;y32yNS}W5&$5#M|Ei2(pz0~`0 zR~jvw=mA9+kFC}DD-UlC@hIkG`&kH<*tq;I;@%NveUFNP8mjS$MY#=B@{iK+@5NmB~)eDFGMTtWT z?wY*55e5+bth>*1rsEC*?NZo-?7kuKf1zaq^S)O_7`{Fn2FP>h99L`C$mArb{<3#v zW$l3_&SQNijMfmmupoW*k;AhX#bb0Ix>f^Q&kZzjK9m}k-mp+dyRk+d-M!%AzTZoB z_z#?K^}~#D-1jM3wC>Dl(v;!3sxjTC;P^vuBGfzS{LSSnBt?MUPplv|JTide4h3F> zdI(>5VEjuMAd{`fa|Y&au#dlifA?B$|D_A(sfl%;H+n-F%X>5sAynnlDdv|{kU;mQ zu&^BC*pW{N%%hBd^v+5-NBWkFJgg5|7&VU_dpix2*k$V_DhHhgYbdA?GO=S4c{U)$ z#0@U&{!13#ReX)w*6MR>rI55`o*Ct`>JxL0uvHVfoWIAgrL3b8OkRg2e8r1s(3_7B zsmzY3jL`08Mh`qq5l>Ue&%@6jhSR|mfiIsuK$IIKN;@k5g~&~BlK%P$E7I_N z3UMBu-nATPxb8%pBr|!qGdTG76@UiBqN;3v44gI$zb&cgHbRj=Q_Wr)AbDTYBP=Y; z_R>n{grt*?zKGP)Gcpd%xVpLm$SHeQQu5h}zywc6rl#KM);IE&etS**kczN90xJ=F z74QHdFVoG90z(NnrdFlyum=yy&AO4T4ZYdi1Moz-Ej)lr_)SCF&@I z$b);25h;a}8W`XVVdaC>oY zFW^}vl(U#Oay?H0Th)R5U9$SBJF9ZMS^EldTD?3YUA8W6qw*XI^{`jZP6%Z;S{oY} zy01mzhenwC^9P9!_vJ<8K7EzAfs5ur9QZ_tM?y}8!L8S%yaeLqE#Q0 zeNON!CJRXbu5yB24=N|5G0@V`#NNBeDidF|Dmu;QI$#`w=g*%zjC7&UF|YIB+ixf zVBP)Rb?Z8T6XznAUpIkY3QnMB;E>N&l$WohqPjBj+^9V0)6$p&9ClZ(W)kC$zSU_i z@4uyBu&ak{@z6W5{)}@?2)tW8Ds$s834@Vdug||VG1|LA)VF@UR2aaT6HHm;#~iZh zA^Moe@UQI4k=wqJ{HogdZRC+1MsIJrBw8u+dT!gYg3Uj1B#-&=rDEH7nPAz&4PDFB zw2S4e>4YtsZ*YuAwo~94g@~cZ)Ln4<7_e2ZhZ!D}EF3SV*%o&tiXL(SN0TXd?gCtx zE?^H%2&GyDUUx}J=>?m!$7#tO>Wk`ZWXJP%6r;6EdarcQlQWhQf9U(-iVEC*=r)0~ zv48U=9PP+T(MCb>jZT(3F$!uU;(AA8jkq@nr)Obd9LLcJR}fA7H4GK5>Qy*GG+ z+5|{^q6RM!%RhlXP_oulKD4dqwsb6nbXP8Zxwq>gVlbAC1tV4^m8KW}nA7tBCXbi_ zY=xRq>|qJ*GUVV&L#5_aNxpNhsx{~8PUPL8Q^Au%@oeCz)`p^=k&$sioc&rNxfI>k z)^Fcd=zl`=RDFb!lcW&1k_PAq@SU;h)$r@NG{G&x(CV?0^&Vui6VY$*O+MK;U>00m z#EN)PYD%G%ris+l8QM$kaP7FlCT^>mpm7pbD7Gep5~NMhQxzhmuT+%oKpLKQV+pPu zv{k^Gi(trjye|Ph<9)lCra87%YFca5nJMqr%~Ur{Agi4r=IxxV3}4iBXh^~0#5gE& z`;o4Eoy;g`2QresDeS%c<2*FLC}kdLr^f~cl9IL4vBIu<=W0`&7~B69GrdB#nAXxp zxUEXtAitE;!nglp=G%`SMKPg+?UO+XBm$qj*f9+VHN#PkEAn(2Y@P)?yu4I2G@uxM zKzpMdwuA(=p1*%B%AunkeF2ZV!wri+-QRYs^YiCH-RwF^UQ2|<)FrYt>Q{b`M$X(a zB?5P&V+Ey+(;azX0vEnM-D2)yc~#Ib*@ZycSTF|q<5 zh*}>%ejNDV^=Wu#&`=QNWO>joP?@=gZyEKRVE_Tn+=8*Q=Vj#NOru0U9m0?n0^Mt9 zXy|XqzO5Co&(R)i%PDpI*Ol_>%y4BKQy}llnwG5>6immN6dmI4zYC!psr?uT@=epl!sV zeLw&qB)s%qIFldKm@HNZc5@?-c1ezk)HrI5eJ29Q@-QJkfIVZgO^n(T+d;jYK?y7^ zSW|p%teyl`4t#96O>xz>ty^=(cWzOQUs`QQM-Ids<*SgO;D$HIBf$1~r7U&m;nCE^ zrB>S@t*)QJHh;ppUeb$Nn|}+s97G$ewpu2?jE=n^-bNSC*!G4pYq{Mh7`;>cK4(C* z)8$rfvAn&g6bB=IMPxUJyYz{(J4Hm0=-|3Cji#A+PxO)=Q`2KDC~zB_qzd5o@DB+o z%UDdu&Q9~?Ak+AbwL2HH1Z{`BsG_AscT?k{25h<0mPPf2w1C)WD2^3ngG%atkDCf3V3q_d7;*e4@ zn=(QR-wEO0+XC9T@tK{kA9{kq^4kio`?o0t3AwI|Ojb9vu$V>5@>JfCJlPtc?%6Nr z7`Z4&kI{{2FX?#Mv{ev|bc?zp&#MI9q4cq|WHQm-21H;MgE`OE zB@-z@xF2w^_&g0LPuy$DLj=QGcy!@KUH1cTQ{JR;`SP<)k7Q1I&iGc+X$J3kw(Fl;S;_X}gp0pS+pcreWrKJV@JegK1nhb|~y=!zO#5YJ_ zL4HWGN)Vc`N6?)445!je)2Xr5zL)BW-VcdISB;Wt{E1xQ6HIFDAU9E86bGA3i&}R} zCMuSW^|!>?=!B~hx^+JWDw$KKI34dlMe<$9hD6!16&<+Z)VRH`VoQja)}cx`3RZKn{C2Mtf8)R+Z$C&9QBd}0cMX9QM>eDc<+2A=d zph-!`!a_B@rX{BHu8+?t3k!~Q>y87Y!+nz@RqMKT7m)WA(YJAW=(AO~<8+mhl0pEA zYli>#uQz?V!->Pk499Z$uJ!ru?V)}!6`nIPVq|8v1N9CJIWysmtSm+5hm>Pu$kB2w#^*%`!${1Epgp0|nHf4fiaYvwy? zm0JXdT<(o~cceMbI!!!cFc;=Cn8jQJ8BHQJH=8A7O9=l7jklmY_Du~)cX^!O0hDf& zY(%K)IpQJXHQ8PQgC*d1U_p;*n8`m+puvaQ#O}*GHe777)cD@=D3?nR6;~4_N9)V1 z3H$C|{4a~hDb{vf%B4!8L6_NQxywrQ1M0J?A`|5H9Q@WmBGN1G3<1iBKarpT^L~h* zD~g7}uwi6&$9>1uR^qmodVf(#9PVfh@qy2MNs!v%K6t-$6oz{rfpyZ}jN9b3yZoLM zg-?H86(nq~*x{O}al`c#ry=o}m;(IlVh7b0;$S|uQpfk%nUEfSbze=QCSPLX zRr|$FIjY2CE=#zDJM?Ao9)n`KDJ_xL*hUOgg_z^=MwG7LDDg2jpq}WijChTgai~*x zxVx5*?r>;m=(WkhhYLkH&CbR*o=s(CTX}hT1qIhsU+PPGeTsUaDuE4{G*vx@e5?{Aam#Spxda6z7&Fz;|ajdUB ztTy3``SBIVbRP`lx(4T`&9}OhSMcY7a zkJsi)s=t9_89W9c-N)EV#4LrGD=^NTj8kSarYXMgWD9q6G_F_E#+*Uiw@*fKSV*^? zgh3N=+!B!Fy=P})qGU}t97Pd$%4_ZEJd_vLZobELjzATp1990zhzHX~=aExT;}FSG zONi$8PHJM>*o9Xag}3whM)S6%=jul|xcA3VCkU@IXnJa0^3+PKQ6{3Tth{`w^^(&G z+UeX&%n_|J@+6JQ>|SnHfB)=!o4~SvC2O3`Zgpc-HAYch&9Baar}}Zx#xh2PhAUyo zgc_@|ZHkd-d`Ty2(^HRl(7MeQfc-(uHe*FY0Q`90lAQv$5M-CMpMk}pt0iw1PR^rY z26jl>N8lWm8096Ux+4kb1`GcxU_LmEvFqu;s! z8-&N}>jQ6ifZBE9$B#;;y3gw{*Ya@I_ABya<{Fd(sGm{8Rs;%qSaZg3j2uO-bK@c6 zsd0iXLrJc&6LUr;p3$$FwBr^OtO3~%2axqzY7Mq!SLB(tY04>lo%O*{w8weoa-FLm z;iZK}8rrC~w_~2E=wlKTZ?W$^YiO7WA>1l<$<@Blor;QyAt^PDM*7NJ(H{A{n+#`9 zPirgJ&|1FrATH6SHDQgRE5Y%miKZ+1tS!=Y@m|rLA&c;6Sb^(dXqKI@bdz7doNqk3 zqVbJpRhm=veg61ASV)=mDuCwTHDWG%WMBN)drUEJDUR%<6YcM3`=? z`tFmH%e{1BkGbCaVcTVu;TU&#D&=GTI@%)jeLjb8vWaCuSOU-qHCZqO5%E^7t>^AZ zeR!_=^in^~nNpqa(p{&n_IQRQfD^-<7tDvoXV=D0Z|BYI0oCAQt?U93IbcgEA4y?VnAb@oVbi;mi7X*CDx2@cx) zj~|1auBaZldP|O#Xa>xQ%qBWkA04HD9j9^E6vTXs%~3X27Qk8w63_{5t&qUXOv}@97e-=U?ak|fkJ%l?VWBfS%aSeo{EOt9w9;B=rOrY@tjH!7Z45r-vF1L1=;8NQ503g+Jt9*=@A67 zf4so~qgwKjN9@*6fTD{sLcRz0JtSL*m{czjCL+}9Ia4UStN<(Gly+&pNEC9Lmm1yK zqS5y9`|6w`j4S@VD<~kQ)#CnvU?~&XP@j#j4}um8_f^o=e2SvK*m-ucrT^J5jg^t8 zZpz1_gSRRDDvCIqj|20lufhX-6`mzsW)9zjbpI}{Xf2opG!q)Oiey=t8eHnno86Z# zMpi&D!vCB8KqyR=DUx+nx8Sn<36H^ozQv@W{r!e)%P4bffkmpLNMB1$EXc)p&D2PI zh*jl*7Ko|t^y;3LJdSg=ND)nzK91rSA=<2rjHB^>m=pw@V@W?re&D0H8Gna|z*_Y_W?Pjb@)B}U^7fj+1*_ok-j4wsM%qZ(Tq z9tP-w{hSxhEy~l9z0ohXp5@tLs7Y#DPEAdaLp@73E?GvaclG_ct8(Yg_2J;f+ z+m%bZeDY>z#E@c#T{FN&VadeWj5#G3hhR4Q^EWfn=>4k`W zZk+Uv8kCYx>u?($rF@0p4qM0pQ8VKnKkc|o&ldN@wGLc=AO>Me!A?Kr$eoYxM8o`L zu3_#%k0ohyP}de>4`p1CGsnJifHZ5i|F%sHF=kKfhPk((CqHQZChXol3Q`<;1M4d1 z<77yiB(mAPh59|tqWI@FjF-$y-DcI!LUkx`54$Q&BRMB%gC)_+^bOb_T`_<2=FMFJ zE0bkx)`xRa^=?tF-q6RjEve(jU>k@nDV%o>V|~w!t0HlcsWGK%pEG+Bu^X<07MlD# ztFNoKNM}3=_PTxh!;}xh)x}E~#%ZBerLpoy<)3ghmky;?m=v8?D4_v(q{@>xMakJl zxfm&HA}D#L!YR1~;zjAm7c(nB;0J(Zs+M@MliTKuwx@D^XJ3T0@;O)t4&s zY;9!4Zm9_D4yzNzR^*Epi;IhMPRD%z_CA4}dGnT*Jm;{FU*F&qZ^oWQ?SX(=^&>_` z+*`=ey+->ldMd|LLum_)gH_0QVa50exc)!hzC4`EcJ11fA#>&_LnRcM$1*EPLKH&g z43SK!%;T?=F%^+1g^)y{!B`o}RD={lrUs-!;#+smv){en_jvbleEa+3+kfr-?7jW& z`?{~|yv}o-YppYMXW5=*7exrNZdy%g9HF43EaYNJ{WU~gkcdWeE7;^HMQ=$}VrgO@ z9xUBQLcDPz&FAi4v*zL&FeIX&M5b*TCb&psWQ7nwkUHAs- z4;u!$Cjo|1Q&t{)eD;dJ8LM_tWW$X!eyqu7(`B`DeXwLyZ@A9**QBF%tqf((`jeKo4NzfDA%v-^s4Oin zZ=fGrmRBz7_B5TMs8)-LxD@S>KN2XvYMJs_cPU^_`eH?Q5nBOy+i?V%i(_(5K-OMQWx5~yOVdOHInt< z&NpZ+^Jw-e%i+dq$mNE~)A<~{#R=d|EALlwO;=_~m#l~X)QahA; zf8ne9ui7E{KBs|iwR9=UhjzFK&xh!n!`2bBK7-qUV5hLk0D(KBu^CC3k0vs+vY3-8 zMLLEyNy@u+4g+e~Oxf$b6SXJmfT)8*;9DUnQvC3XJ_5SoNG$T;cl$~^s zm5aWv*{Z!KU*h)(>QBGXHAcx5UBzee_83c)X>}3hA|ym`@x3^$(ftgruV?KRBd#eE zFf>2%?^d)DCP1Bl*AXcC!dNR%;I{5hU%>M5PHf%dXD&cegsVdxC~8va7Bv}{E;VJA zzv%7#fpEaD5kcCMf161NGraoyc{C2>Z1MiJQQEE!$;HLb8cU=W;w(}bWvZ@QGJsbI zBB(`Hp|P3S7?Kb;F;sjznKLcT0@Qn9Uj&eTs|we;RSiP_TUx+`$eSK&cU>~N{DNZ!&u$nTq>=t)!MLZNQ#Jv zzzrIB`ZNb8XSsSFxp{0joD-vqqc82(^#24f_t~?Xcsk@W-{9h zfb>MQ?Cei3dipq6`S#lTgjE3=BqaMY(q0g8gf36r5|oHUx(laz7c}XMbrfMQdo?W$ zs8@o2b1E{@d!m*UHWaGVe$2hX&cg<=Gr@o)ignoSzSjQ!!KaqN6O)^pi>o^L+e@Wv zO$)(X)?~6`K)t9t&A9P?huGQKA@xPEJ%_5dxMNJ;$mssPdqg~&No4eP{POBn2b!@j zRL7c7FyU`ES~)WmF!gReob8AtBCXPZzgZOHj2f)=Ct=_il2*8yytwX9$fq#k3GazH z7So!oTgAl-u|JUv`UDn#1GJC*3Ib@cjuGUe3EVOfm8}eL6T~F7yN7rpiy|om9Ff!) zn|}bjj`(&&RA&f@=m-TfEv=n^{%K8(G>yoD&<>F2i- znzETh9>CKmCy$lPqd|2AaUSxHUWs5N>S|tt%DwKn1!hIqm0*|MW74H>rr8DcDM~(c zd1w(SOb);tktpzuGME3PYv=h@e5f`*2hY?Z_61=w55cSD?Ul*y{I;W^zn@x-qmLkk zasY^)b4m9E>Q%t2mpZ;OB?xN71invwr{LuUNwoE7HSY_qp zGBY#BrIqr+s~|{?i)(u@6cU#evZr;OIgKfGs(}L9VNj8_O@!V=3Hbm_&6ZDETTwb` zo@ud^{ZDCHxT z%OKwem z)&6yze84&rN91Dh4iqE8w|`DCHUU3nUms1k%~yA;v43+C4uE)SD~gPk>CYpGsCa3@ zmlj2VQ*im_9Xpse?;#+M#BJ!7AkWA2PbUF=@dDM?6r+2QA>*uA#ug@Cx3jQj>*md6>M7K+k?7A{f=I2S-)Ii*!i9 z8oz()PpM32fp0oO%)3etu9-w~oFyP_=$PQ6e9@FfE6L1^eMZv>&r?mN#85Rr*x{-g zW+H(`q{WyK8?PO@@W8qS)&wqi%h(IV2EsJ-fDMe<(<~G<7ZFa})=inGbaX?kOD|%iC@;n6Cr6%DqFU%b@#1gWEE= zyVbjs`AoC>s$o=EQDajzh>L*4L9)$K4{lvH%!F|}@+3){noIu8*Dw?TGen0ImaT`S z3jPi=EKCKe@?@Jzz~Oc4=$QM|F9+{OUZKA*W!e z$u^TnSn5x{E_{Xdbc?D}N7c#EkkzGQz2`6CFuK4};`iqVL*<83D8FnMUE7{UO@wKr z&Y*zwhMTchdE=2GD6*h&IFDb^f}VZ))2E%D1M;U=Mf}HGInbfvZ&;+FqJq81-9!D~ zATLn#9BBTgV2PV3CkJ2sz3x7BDnF)s_O&OBqT7v%c^2`qn6gkTTM4IUu<+nk6?!Wbe00D6!3Cm$A{Ehx zuyGS8->Rkt7o%mAf5nvI;!yHvrWG+3sJ4zHMfcURQ4v@Oe5Os&ZFYv6d0)Np=Yo) zA=Yct+uOSlfG+K`w@0HC939meX%&!9nfvWgX(K~J(f?y^jz`9UDt==s{e>3LEBMrd zl%G_dNXB8`i30H4g$rg9saPO~;BtH1J}lt?`tCB_@VmLB9=tqUVj_wE4DF|=hu&)( zcRmbhMOSM*m}0s3Lzys%;=H}-eki*JWm@dB>|(9F`p0(7UlOe#de zODIm@PPsVMV*qCLF?5KL4`6zTb1+FB_sU*P7o?{k5g_kL{@!v97l4YI8rTb+o8jC#KbqcVSo#c<>#|V}v{yC!U6ZJ4{K1 z5iVA4gb^sm$ng01cTAPPdq@`*$iSut2M!orQ-`7O39P!q7!t%c%EKf z5TDVELIOh!aSdmJ?b&lxL-r~e3^*H}NDf141^OM-Lf2lZvM?pGVL12oN)cZC3>&JO@^p1C zJR`32`g$HD9O39RA<$dWnC^XqTM8p!P*R|#EoPSSGWO?I_$#Y*N9HlB^$Z&YH43-a zn6m!^Y9e}o&_rZ)OgFX@86_f632C>n|6~*73P_|ntoElP5kbA3RoR++=@L5-Cn9$W zH`^#3gMl^}f8%&aNEkn}18p%se}4?QJOSIdXUk48ND)t+q9Knt>d=iIwTJrB7@JCH ztsWnQk;Asp!FvzmXQ-@WI$t_{7tg_pSp8!&I#B`hOj0{Q}|jQ&EYG@Ge`&PSXbB5tW=mQhOc*e+sc5d(zr zY%p=L51t>zQUK+LEQxYPv(*$w2F9#G$yL@uf=Ems1Ix!h#{aX_x;6ynNVbPGuGF36K0ohJLYsh_eqp*Nu2RG*tSFCS;nSZhuej&NUL&JJ2>ng;TZDz{8yYCK zF3QS7yYdSk#Kzhh>HV{176O)GMayxWBbz$4LD-Qipy0I+<}>1;!Z-Sv8&zd}N5>9T z)%3sry5_NKm@Mz1;E&M*wTmCdRHPL)^cE*EC zVk;{m>4eJ+lmJBjAFQ7mQIscf8rK}8yLQ|Sf<@xl_1m{^_wHtvBvSf^epB=F3C)3_lR}$-ioJ3 z$<6nq5{$%-ec=={DchuXhm9q^ZM(uDx@(s}1CiF?uTwTSdwInV8I?*Gs7g@#sZ0iT z{Zjg7g!)7VdCY>&z2L5$jtZjc#k!+ZrgSn zJi_5eA1^_&g*j;$FLB*pXgcgVWwHWvvi?F8+tGIz8p^^qk1Wb-(0m^G<++t}9U>gU z?AQ;hebvCgK<5{SVAx-XdKk%%#_D1ocnM?N#muY%W&#di)!c?o7pNVq6U)_k*!cM9 zWf_JlUJ(P4kO;Au-~LfmQzMF6*#NwaPb@DTSHGN=&#GqKP-cEJ~Fxqoa|v$E1VSe*a|Q2`V$+isrc&UF>q;mZlnJe}xlng9p~5fnN~NKzG)luq;%ajeD;vLJXFfvU9&ByUX}yygyp_P!yH8Ct5&R;vSWR&;<05?W>x#pemI}95vos|>gpS4W9ElV*!W{a$I|lG9a*NASi1>lX%lS1-Pa>AA2lWm2 z(T%uHn{mawWx$oro}MpP5+9*n{gRu3&%GC=H8P~!+lIC3!tMg9l3Ef? zYiezM+{I8LBYfRVFHi*Si9&@~+}-k<>6nw4XgzD*N%rc{5HVEI6VBb^fZ(VPc$~iGVRJJ-wsH zrZZthI!9o8h%3YK<5VFs+lcM9;EOR`iGo)^mBZ8rq;_E9k%k7luA|G>pugv-r=8s} zklrKr*PAjS%NG7xX9y5UBes~?TjhbroA{eCX8vL8J`MjqVXn)C)MTVPM%&L%-tTa) zBr~o?s#7$wX~Gu*J0H$oQKN2F1%YW6w623~n0+DiU}CO_O5aBFD~4yhMw(=rjv=x4 z6cWz^^Ei^db~02c_+L3=%9Ug7P-D5dCud|p%3q69UT)5^zu4v>CxyPKX5_Ziq?Fw}m30WoK9I z+xdHO_1D)wMPSlA*7*n)G<2i1nSd2xc?et=w5^!!+7hp7L)XxiLsoXVM9c%_9QZT( z?!*rB@R)%B;$lgZYZFuyrZup#!H5nWvW`r(=e?S(dARyI=^)$(pU{rgf!5^r;%I`* ztwJ(n=P@~V&^;GY6e^nKYPGAMX!BoJBk0$Ff+0EX3_2=M=SC*hR8^Ik@4tkggsj8s z?fr`(f}Fcm_U&r}JsO}QEy0^?Ee&50M8@mAL#U%)`_eFV_)*VpV&nyq_@cxjN>k_6 zhkFZDD{|4z!nPM4i!cV*|3Etj1+L4smg``IJc6m8^mf}CzrBTKAGr2OK!@dt-^Wp4 zOjiWwkh^7pcd#&xg%NT=#T~)ov)4{Mnd;1;Y)St4slTyTr(zUwE>gX}#@~Y^ary(# z_TyW0>4hd@N@*=&8NbQTs478I|D57wW+2EQbYa{idy-&T9})#zx>{lgLXEw<4XWXB zJZOr#s_zkd@_C{3B?vzIwsW%zxURct18AiK>F3DqnGYW*qLJ1Z3oYgqT7hcNa@Ez| zKD^e-oXnUjF-enbq?F+|qnBi&rjD7$@?;+7T@Sy~vLYyG-OLbv4e!wX3gWTDHeoAY z&_4ldB_~oCQ_~-z>x#z*NwPz7mmC<+rxah}G>wa=5gpglQyo9hBa`lB-LD4B?7qZ2 zvy-e&_c1i)9}Ow)bsP-zvr(B?5@%j(f-0uCc1@V6v?LFs=BH# z{N+^gDunAHtg5^4K7ytJeLW__`=^D4xa`1>sU=se>3R zeC(>CXZm@iCCXezGzY_^2m1Pu@H+gw&5l!7I9(@by+BjrjC2z=GQu}tP+<4Yhw$bW zQf#I?j9SR~oxZqtSGa1lSl6%Z?B2U+UjF?k&!7it9`|%}qdS*fU9IBOjoSpikYZwD zb{=h4k)%Ix?V|WV=`adJOY^RY4Cu!=wYK^7IvcuAR3XeW|vUxKRDjM zVHG)#w&uj|w7i@TrNuF#c*2slF=} z+*B=YWWwLd%A`S`CJo7N$xoP!iis(Yb>J2XV`;(I%`&DE%uU(yZI`jmCYK-yYU_^( z1~Ik8jm?S1Z?(9hu7zZO~TD>z6JgF6~n;weqvoAt(KR{^rp zF4kuk0a&RU8d}4Hee%k0!A%1I-@?NZXNOZzu!Fimn%grFSjx5Q*W0aRlvR_{)6YQK z-|NoZbUZz|`+&l^ohQzq_v+ETZc-n@=G*chO-D5+71mu{ z!PY+J;!=L-B&+Z7Vog#NCa)f-II`PW*d@@pR25}&eR>f^V^KURqC<OWvp~Pcqrgt)y6?aW)gu7`hqpw_BmXj6wTW7})w3DCz#rH4JDt2`x zU5Z|ytUNJLF@-(>68-y+AOA+ThZJY(BG5IWq*TNdJo5atroPN0ZvH&Iiksp|b}qYF zBsEf8gD&tKR}>7UYHvsUV7MkS)Ny% zR-DG2riHv=lakUYG=yDTTrNCt|9|-Vr3@HmO3%pn9TP#~K=UG}|1L{AMdN;=`$h{I zyKSoL-fZCcH>*U|H7|GW+4HOQ_t~^7n)Oc^a(W)W!U@arKOdWuFM^hT=}@WCuhgXRbE>07_Lai3R189 zmJKgn(B_UG`!}EYwidO8l@+eFR1b2katvQI<+Muj&_EjqrzbNb10AZR_YzSn_1ZclcB!xU%6KkLY;~SH+wRAU zEl7)=?qmAf9>wTHGSJe}hS8^Zpl<-kaEo&e$I=f_S=`6Y-lhuijk~2PALDOPph8cVazCiJmKdD|X~MCA%QZ8huZD-hP@ zRi&%lucsq+K|3IVHRgdqC(9Q7t?IbSXJ==jCU#v$0SSumA_}smZ51Mw$Ys6YjE;+l zKw<|EoMVm21bA>#gU)oz?6o7Cd+bU5r0=&JemVDkz!I1l1g2T$F0p2FKH10Tw1NNS z+t(bc@$z{d!P@2u`_Fm1P$yH$^R47_a(e<+u0@VgZgCeYP!V2x*>x$+IA}N#SqBCq z9gt+9nhadgaUMP-_MqHl!P;h@Vfkm*w5b{>Mxt&rr*q6V!v+wRs)pBhrd2I&75TFO z)qBfK@EyMPv(24?tz-Gg2G1`sE3$=Bxl1)7W`2$;{pA}nlciY2Qfx;5Y?+Ije?nN!qO zqv_?UYi9LgH$&w7-wb&YZ?l3!Ev9rbs3vxV51zmTDl|1onHnm06O%SZy6lLIsl0mV zaA90wc<0tf)?BA9yM|B|M1K{r^EMmzlmmn)B$SP7DADv`RaKp9Zh!l`E{w3cChs;6 z%+4rXp6<)@3JTq-zhnR|)4n+YdG6`SnD+=ff!a#E6(4Uuh|MP6FEwd2nRSel?X=Z_6D z^#Pzowj+8>kCFcx-~8b|Zo|4F$>w)H+0`*GhK0_5!$;R>sYZ9_9ZEU3H~g(A7H$V# zHL@|Rb69hmcTRvK(+*;ny$vgh+*f^%_0&}NIP!p^&@+;Ex1}0z9~~Yzi(VC!J|o>C z0l5=bTh8_Hy6t)M$+^=_k_hkWBjW?r_jJE)(v%G1B9F|IIB^Yomyw?SteJtU>m)df z3U8-egh!B^ixYS3LrfPFd$k_YJ8xm&XonE)O|PK@o&e2gvGEs+6x^8r@-gW*`PkiaXDaB~*lgMnEuL(C|qJUVTXoW|P*0ugm ze~Xmkyd%&_73~ig)N}D#g;g4f`2j_Es7Uw43o$Zjp=Q9G&CV1W9JJLB$dPt#W!H}@ zd~9|4FjZ(9Rc7wy0pb)}1#HM^E3@iv+do+pMIQ>P18S5P&IR_~LhGnoqPbWZ5u?_c_z>TFkK8B@@NuZzT_gU|mOAs#iAB(|a&bBLaZi}lq7()79`pB# zBQaWnHy`~a29U=Bfu0E}qh_lnw4rY6migo?Z#YXm>zChRbqx7WuWAsN)~&??-4`A5 z&!4xpPNNnz4x@_jqdQYD{zJ_4kXnuVP(K7)`&*3#nPM(Q2fU0{bCtUm-82WlH&0sU(~C`& z;Agc+@BHyG7vo{7wIDiGy}h`rbx0MTHfvw8uPnd9$MwaWF0u~HW_=zh-x_DeNJ<5t zB2PybrwqKpE|a@3W& ztS#w+EC-J4M{oF)jro+u0;<;kCNu7;bQO5kaEkSUqAc$-CtiMv zu~xXZ`RTsHkYON2uFhhOgrK%67l0XwC!wlAyuhC6@yk( zqHME<`x|NHL<-8vePWMD%73DK&a2~1e#AfudxslN`_$Hlr%8nCa{+L%w0p!hc&d5!)rM+RY!|;~dZ$-f^i^IBjPC*0ryU*th1PBf(K~F? zJM`LHuakoEjjh)uT|PdAC{p;_y;Xa*`SHje+w5n)I&*X_w`h~3HniA|#w@)uI;`W;;Prl(gHPu2v&y&QcX zBqnhuuGo9apLo^Udj8kZ6RIb&6EinblF|TcCdqPr6pD^dJE0VFQ=GN^#rs1)6;*z| zqg>@Nk*|pFvn5nRric`pNH%a=>g z$=dui>DBtg)%&hp5vTL_PvUmm5q{zg%NC@ejKbZW|FSHqs;UvQo5sOPHF) z()_GQZv6?bB(qqfd#tbYj3>Z1mY&pP{`h42#-9N5^7iZwj);$yS1l8laEeknY^4B0 zMxWd&EKD9ja1DTgtzfK4)0PU(KQRYggQ^pY;_T~R2Ap9idkz2+DX*+r3e_ebTNTQB{kMW~w^sya#e zLE7a7_XpX0+Y)<2m-clLosf0UN094&1QmAT4EbaMiY*DrQj)>Bziu?Q$<2d#95oDS z%Ct7A-V?kUAv+l;vUdSDF0g5<4;QKaYt29myBXVwbG30oPcYL)m_B@lN{ZS2 zu$szUtGtiqMTL2T|FUo~U~x1in*ED%xjiac^V5xpjL5w1s+S;^{WlqOu7)UG|CEeo zG&o(6Vd31!jJZsA-K4M?Yb46N*H7+A+CJhgs#hLFVy}9!@bA4xws|jl0g;jr zGbSFn$P5WpvWJ>FXp;c(JN>~fqhp1zlH#WuXUbF$f|FNTnd5UNmIp9-?mWH7=8wtS zWZjk|J{yzC^I~k7p~HtdMGbNXxD&$WH2TINzI-4mQvLVZZe%F(BLDwVw#XN;z$KtC^IU0n(y>5i z`r2v}|4Dj{o7CFp{}jBr$XKc5W(_TuzO1;8ix^)D_6S%rvp{avkd@=V3IV1c_)t=k1Uulo<)+dxToIcy}A<3Ft3 zC}R#En!Wa)y^KQ)SM3{w3#91r@#XW01lP^BuKy3KW%9;t+ZJD5EYdkj zBpId*JE)(#vX;0RY`&Vts@vA_zd{fUcZ!GqLoDI{&&$-0HU9CLai9R6d+9%EQ2J`Ky6q51gWRzi4)9w^sEPWfgDr-UiP3r@DC(~`f0Vl zQ5U1X0zY08Xa~-K{XzJj;O=8#>4b~{eRAkZH;alUulL(zd<+N~Qc*8-B+yM*;yYaE z@t*|{?gN2o+j%&J-$LnZ4ItO)El|GKU#6z$2%|LLHxU&7rD-OSLzRBBSYrRA@Sd&X zn0f`AF@lM_kg_3?yGQhkM7+QcieIfSU%sn4nU|KvGrA5C;q#0@@Ibk%Ib+Zy0uI}) z$NdVpeh!exLCn$Fldl<#&U4Cozf;gbWP!h_`w>tf>Z|{!k2Y_<=lJpM;<)}B2M03- z&{TX`vYQ@Bh`GlEUpV0D=64V=wTOsifa_(vL(B6+>4!d)<`h=>#rIxV4L-k33;sa5 zV0pwcC@5Rk-V$V~o}wNg64?x_*(Y*9nWg!3!|)X5O!;EUg6VtMdk;iT{F`HK0b$5l z(HO0N1|5{I&Oaqtk-Ltcep@s@dkB){TQ_eetNyJY{toMn>f5g<%no`?@X`UxIRR%T z=*ZFCJa-$?2HeUOqTvsvxZD%YoeMA5&Y@*sxN+O}jeB1imXUc%glym@@NjGTEU;9h zj@)NhFXRSFCFw2>CF(O#XR$i+6xnw+fN(YQ6X!t_?b*1qwtCw^e{^W42@G3(e>x;3 zM7$kqpsx?-V?N6pqvcayXw~%T0pd2#r=(r9ql5$qUge+CxT(ee#u77{**Q40s9yp1 zM*E;_kKF=EMX`1E{uYa}ZNI;3(F(rl%5%j=`q#BcwpA^vQa z)IwFXLbO6!rX?ais+{~l#YfvHR6R?aPV6YCnY`H?4%{qHvi6ps{>jA^Obm&2{mlt- z?$CWtzOyXUF;D0%$iZrX*qA)?{4Tae<1KTn+F4aRl;%AFss5h4OeaO)Mc0DY2VT8X zMaA;GWBFCbO%+eUCfLk{i%aeihp_;7szT!^6e^LM53C*8t7${q-y`}V3LnrUNr$zl z<3VF{UO)m&ypZ(g#MMF1aZS;)wQ`o+zYFyq$pXn@0VnzhAJpyjCMNP9!ci>JB>EEU zfSWY*Q*#J&lLUU`?DXSWuCA_t2{C>?yS`78o0={fUTfP$ML&Y`jFkl)f{^eKFKvvM zjv@pxXuUWKsA{LjFlL3HyLiz#p)s*e|0f(w>p5CgD=1ZyX-(7On&((4M5s?jPTpmj zGT!2;gj~8xairBD;n`JbKPNQiF@Fh34*?5oPv#@;ZAcn~PKPyp0gmRB(5TBQ_h<`; zsX*dxXn{GJ>Oe=BWPh;Yp8okCMnrFj70J%d2F`?{6!s0aImRq`#=-71CFPK_H>)6t zH5@uR@r6~Y?vDbQ+@hkga@^{*EK*V=j35Xd+=m&IKRta`wHkUDgSj8E$m1VY(wy+_ z5mw56{vt!=)!-n2ft~PU@ZXf5SU89%4i7!(2k9YJf&T$L=k~yF9~ozKT4muWj&3Np zW1CoHNPHf8QQ}fkF~4Lk5d1C2U>^z}A$L5u2HwN;xyn0H(pGB>Zg^TN$ zy**0t){aoCtt?EWvik4_Uc? zgYVi~b<)u|)m$*c z9KK)&MXtAChN36$4aQ==LNkeMRf`m=zpYB&ICyvf)3YztGX!Bb5iNf7pu!ozLt8>y z*FwqE6sJoTUNazoKs8>buImB1wdOeX(JloA`~W}kWp$)I^r*rtw3;loiD<$pk5mED z0w+P*KaCMXgbkm{0thX}?>#=ExFW~^3wEG!gIIR#9f>^g7JNvqb#*Xl*SEG76(2Rj zlVpIedvf#{)KAc;>eN2iY62lIrBx7`+>3Ro>UEhLcc*~Tb&qLG5CKflZ_>E;JT2MX z2n0@Dfm&F43=ZJJg0`d)eL0Xlh}x3>nF8g&afoq2uL4mAS4Ae3h>6Q9b78IyL(}N!CgRD zkuN8PhV2tqRpniv)_+A%hP`xkofcVlJL-JiBW&VNq8jVPOwm-RwLpu-=C^q835?>0 zaBBklhv>;JC(Z}{URKzwlYM+{Z82!L<`)F^7SLFIpfmv&Iu;t#<{x@Y^9S6xvmD`M zBskCPeI%A@Uyktw0X5E0EjemjIgkVz2bu{>JIrdVKUbt<);wYLw!&?6Vj@-}O8ODZ zE=L-oVNsl@+4hZ`dRO>1{tcUg`qG8f)t}&mKubV27cO=eiawRvX7baNOXXA-UMS1t zv1H3&Bmvcf?*v;6d~>fG)1U-e!Qh1AhD4aI(VsUoBS%hv8#n5$1$uWNE=DEToP?BJ zNKnJ_Ns!9!-G?<>!4$xx&vGUn=v}Tsm_Xp&kbY=738^o>+gthP{VY#{IfL%_@OE?e zaF);5xuI*T2$Aqfs-v++#sV4~kM}hVpE1&vD_5Z6ff^0Ei9TLg*zTP(q@XTh7)t4- z(`QAxfj%C=e3^6OMhqK*^a|BEo~Qe@7_1`X(6Fw zn8XlLAY14Zv(BV!fkeU$uBE#pnVYCYDCg`2%3~ij3qMGjz*UbwumWxCY-pr=cp35W zq|$Kx5Ei@_h4fE@3&Dv{L=-3B4OtyIg29BeYlZuXz!n#`56Q`Fmv5#8TGZG(z@#l= zx2LHGt6Co_Hvge%C?s2K{=WH}UOb8cyhQ-qk5SzeANcVoXlb6HV}ezL9!+nl4FP7} zr;b>u{n5U&w8;JU+GLxtyl)sk--Q`-7pg8XnF;YW-G}YAv9GmXs??jl5bkWId(4y0 zcFx5>C5G*C`c1~05osS1v&AGnOer4t`E#i}q=a+kQ)LG^Q*3bi>Gz?tR=+GeY|oY) z+uzaHPiZf}?#~?$iGd6Jw2|2p?)yvq42$H1;Ro|O96KOvE&Wju$U$hRs2*V=u}{p* zNw}poeOqWTVzr=D%z5alYdxzKk4<)A<1SUqI)b%th})Gayc&81e>o4FfrFXKH6fCN zwn?nk5}0FfrhG&6&`Bg*t5*$0EgQctA_~COw->n*?z}FVTP0)Y{eV#elk!{7qhaUV z4<<&dDHnBb*nX!%`cZdgAEBmn(Cw}N%t2G~)Gf2RdFvK4hPw?7g@U`fAkG(2#(_7? zgy09>ibXJigm_^EV>QN(zahrUKn3px3qd0NP?z_BC@$f`1%5Pjv@KOSQVAlET*uB$ z`)s)Jo=N$o=lAVuo_lpbgTTq8zT-J3f0>9_NDc*kdx`!kvOc1zzhJ}^Q6|amuT0&? zUB*s0?}8?Nw9=j9_d_iU~bsxCOnBTM7~78$%hPNU;I?>xNjF=mTjJSXkYM0@5Wy;dI$UhW!_QxMH-@EsRt zTGtw>k-a{@KLF^Kt6J`16XY$dbJJiRX1ssZO(nN3yk@(jVAnZ^(A5n-9(}Lyo-zB$Ct9g|{G@<&w0zbmhuc4;CsD7vt9>44})`U37hQ zlkrgt(gY~(nt7#kaEhTegzDX3?O}JllPs<)!dg;l@#q>p41Bc(PmL>`$@yGH_DSei z6@%2g(4K&RALwqu848yi)8QlS0lN@uqe6cE{3!?*6>LVEZ$na4CQtC2W>;&xk^15=<)S$V5jhV+3hUze`1sxu?;b>R60Hzser2J3Hq;dYoQe5T zk=u4QpF})ImjEf&w zIpJJgiwP*!-Y@l1kX6Uo9K#II_FyHwb1F!Dai8FE#~CKZ!9c|Hyi+ejPv`cys%^*e zl7Xun&Zf~khnFim;N2N}fjCG=vc7*E8tUjc0Y?w4Pl^IdxEuzfRC-2 zfjk*I!kO{d1Ol<;T?ai(hX7YMD>Ze?v4^PPRB(K=cAhSuY0AGxpOh~Z=AlS1t@hl` z{I11h_!hiJ`(O-H@Tun$)nhSx{`6@*d*4@h+Dy4|Mo9Cr`&Y5xz&4y8MBnq)^)v3! zk(B<(pN7%mNl@=;9}{D7vz{l{*>Ni#=f3aGwPbwPW3_EaA#_X}Lup|Mcu>7L+;tjm zfu3EtPr=);S^9Q`^bj<~aNB3IA)x;Om>0rkwP(Pqsg#-EahauDuyN3b^hVFhvaxXK zYv|fTj50iKgn!)H(vpPmflca*Gl1~w*Sbb?Z8Rc5scM)~62}C|wCYeK|Li>+SM=Ye zTC?KdL^BUU9ri8}g_+eC!$JmyXe03fXMBLy!;3>>u89qlJn-1l_C3Bo=p_3RQ-a>S zQG!{})34!|?S4K%JUP_?gNYMX6;%GgnI-3RKuQxdO6I`VfiC1ik--$P45Iu0CnF41#Z^ z5j8l%D56^%PkZ$3;QI~v>Shfa#{w|~GxO7vO@0o@g{&TUJw~HKr9(k8to})L7w$SN z-NW`gSE>F3+Ic#vldz)PN@spKhPW6#`N@-P?oM zYN+C1VspeYQiyg>ST2+HM+kO-bpb9s4K3v1QtK&^9leg(^=fjE;s_h;@pwIpLf z0h+e*v^U_k%viOR4a1L>znl##^I!bJ_=;?~y$bX_n9ZxVs>3 zU;Ti1aYZg80+)(VvCo&#>|B4>Jl`QX!k!KOug~2!j)kRw)B1U0;wMx*4;yxvWngoE z!%@LNI&JKDu!VvlL;JJDF}X|)R;AX}5FW#dsu%oFA6V7Zjk@E72FQ z?L2WlVQGF)J#OWNT*oI^Bwki!brl#8+m}gu>`Wr%3~|#01qA`^nlVjC!~7p9>#8!a z41u0m-E+CP@2M5lh$?mxJ7JNAiB+Yzwt(gS22_>#t9_gDARsvcz{4tK{_1iMh5!b9 z_pZ_QpC?;zSAB;g5b=wduLk{`;NEs@BizQ&IaOYcL7C7!@*dFhIqZG=7ELDGlUT+bsH(WtD+1V?=h&lW#TY+Y^ z9v>Cx1LT;J6DqQ8P}+=-Zqepcx>vPPf; z*jna(g1H}FzcxF(n#H75#l-H2ar+A!U4>hH-sOav?s_R_2thVkG5S$219E}wWu_$+<+xZntFl9^WJGt4} zc960nR?smr!d?2-so@P#`w$uIdO zy-^v?Md=Arm*w~`Bg4g=6!i1mDW90gNX{G^*UXHOVdeTreq#3=Iq^99G%;!V@M48x zZWBs~i~K6dyF`g0zG~w-4pdr`I`~z`5STFF2kUk`|1v-5+o3YE?G%b$E(lz2*~8mj zYBByDI^&gI@6JF}8y_OKYXVs=vcc5t{@$G;71&bB@vA~Ky^XkrIj6>w^a#e`{B3=X%RVWxoqc>%1=D3WNuc;I`qL<2xWGrxlMZf&&Eml$giH zLp=cpD^9^<2Z=)U*`K8u6Jh*n0SqTE$^BmA@YIUylu~I-Iyp(BLIelol>pk|Hm361 z@s$N9N)Q-mC^a31n5K00ERz-sXHG$+m@mqy%U7@Vfj|ek8xhgkAN8&>J6X1*uNyH41RRUsgS)aRr zKcL+nAkw)Xm}np}K!OL?K)-{SR_yw)SeGU0HiDGB2ApqP+B10g`O%twfXW<*#M|H9dWxHZ(L! z5Jo>RWGH(zXpZ?*yTBSddUObF9zgLbZ+QqO?ZN7AAldORKmG+tAQ0;-`AoD{;rE+O zX_~YI#~>Fuf!jpQf4TyLUQ{~7?bddpnr)cg1xuxc1;5xhI=YB54dQ1H*xJ5_nsWGF zOjHz+BjPH)tiYdw!WHH*7?6=|Vicg3CQ7>r7snD18yQf|00L-hbPKsZP8@dR>3b*vT@iW3`mZZnXd6BvL~|!W z4nkC7*OzNC7Y*qJp&2NT$qT1-$HB#ahS$x@wziaenZ)=LL{mgNl}6S+$nQ}v>9ruB zVVDpAUI2?=-DUBy2c5q_`vI=s&jvA%uo zb@_SduWNAUAX@t?Z)M={>MtLM)-Lhc5Rgcbh;*eB*Wr8Ar9OYrmEVMBI)*p*`lI%O z+QziZQ48c0JSUtS>L-I9SrCz3qFXa=%7wJPk`De7^38w)#C6K>| z;|c%oT49l^B^ctc>&ycBT0}nfYNzuamMB)NmiJ~{>gAZvL?Y2vi6VhIHJR`#&G062 zKt~V3U1uupz2D4uf?#1Fg7ngrqI-fqBN`{;7v{-0jP~!xh5I=YnJrkj=ifVFsb9T% zweHyjK5|D;wtmI1P>Do}bsUTMeIkT|9$ z>e>uIXU|1mcp{`sTtDjtw(&C_4Js{VMq(NF?%w?jPhU27YO>QFNd}6Y6b1e$L>UV#7-xQ;fxqvA@@i-3UBnqIT`~36+i~Bn>XYsdMFbEjZFBlp;58 zKPqhp8KW4TiSO&9%Q-iLv?h=jWMgv_DOIbqM)DVI{V47-gT_FH=zC=}G`8J&6j4T~ zuiTi zyaqm1YLEj&P`<&l0wmg3{e!%;Y{4~36c-3`(98Mb>#5iNpeSqFL1KF2U*3}YZBym4 zfx0%jw>`OUhf}?$N8ziOZ&n(nG2fjT}O*wG`FA-@UMSArgF%iA%d?)zPlPEovEO%cU*aq+ecPjrm5X%EPuxt{)&s z<`s9XDVY7lYB(}~)iyj3#`Sx=^^*9`2ah(65o5Liauo-qPog!AFv7&Z06<6y#+F-E z-gedb?ZdR^3m1+F`x!Tx7A==zxBn93^1pDC$ z?p*YVV_%W|{D4s(TYhx;`SAI(XK*8-{qh=z ze{AQbaN9uSPmK)?gni(60S?H(^(6+>0^&?jP0G6Pw{_Rd+&HI|Nd{d zf$UjCWE2^nkWrC_Ss7*LgRE>7kyS=k#z#`wA|rcbH8c=un1xWOP()OeB#HZZsLr$R zd0zK*|L(_ieINbvEk5Ho-pBj>dXCrgHIa&O0>&1q%MQ|Es-VolYIo`<_K3=JCq(c$#8e;HH92r@D=Zb_#%9A5P!`fRXZp1yaV_a3-@MyxF%h& zGzkynzBT|qJcKW>nft79Yo+|?eu<@wr&CZ!$OiX$$bILQ!5q+EJ5br+06FmU=mki8 zc~pVz7ZpP6c|K%1c;NP-H^cU0dx^!Jn^4ovKi*-&sDzU-!Xh?js0nMf#G~^7;v-I8 zDY|Ga^*DaqfhiJ6YuMScKD%phuj96b{}xZaMB(RJoVGT(aGVJvuHxiE6IZc9K1=r{ z>?tlh2I>e#SIGqt7Zw_Nd-^$%wMZ}<0^`hBQblecaEK!m7$o=|8$ZA6(8&=PglD_W zT!|A6+>}xqk&t7@bZY|q3|f#^GT*~_-@+ddu`x793XBv@R-3vJh6qnL;`p1I|rbG3C)tg z?)qWK7n?ChM_SqqQsf+e`CK@2Da`^Mb3zmUMoZlzRO)~Q=Va#x@ic-49s25O|Fdqn zUifxCJ4yzH%?B053xF$ zwt1Hxvv_pMlScL2Ld{ZD>y7&UU*1B$YP`s!;J*Ik;X~j@rg{O%XoyP3Qvv;0V1i&1 z$C4-R3SgrqeZ-csPRe7|KxX2JTjJTMluhW= z`KTrXV}=pvRPKTKC#7cBV?OoKstZUJ{s{c^iW`%Ec|{~%-zICA-|}LT++$^xarW%l zVY6$*_E7(fXZwlc3N(Azad7h~9xt2miI!gwlQJ+2TA}z-*Odo3#Pwhi)#+wYz0Ge? zyu+KVGZt70DVw5eG9`^Pf!a!fxF-IHLzVIRHbKqjc z1psI5ZNlD4TY@gfxO+hUFvBvIFZ_yI z3Dj51u&Mq7C$NC>snA`HFmrJ(7yOyGZ2Xjc|0bJz5!fau=Re!MeR$5s-%9dE&&W~A z@WyS$fif!&u}|JN*uOnYPfw#(*2Ia`=X=t4MU_(BiC`mY7s~tlvc-Fl_&WNmG7ph2 z82Vulpcf}Vy8&!Oa4ZpC-rsVUTwqyS)5gcZc`&r%{#+!pN5AXc$>1xl^Yx-X4#_0H z!XR`opNf!Q@1B1z;(7W#(;lw|rHNh94)eZW-E9H)A})NlM%GKTaSdB;qP zFz}_F2(ku$_(*eey=Dl(vm=&@^J&vcm-%x+JoQ9hnUhmt&okWX)!b2vv?{6C{D^L; ziYigX>#Ds=TQ?}S5R)H??x`Ftt~W|zC$Uvwjo(3Sf&JzrPCI1S2)c;YOj|izu3H{} zBq?*f_|Iy$-$?A(vG$;OO?l2d*MS{B#$}^bMU}pG84%cs{Oxc#BgFnPcfZ$(U$-2| zQUH_!-|CKsC3M{`y%oxi4X=_Vv|4qy&yu@MzNm)NUMxfVmf3Na@fPAzICWgcN5VJ( zY;3O=a24;Fk2ZG?1+VtOiz+V^`FZ6+F90L5ATc*ZrFgwBTeI~_GZC9e`&3#P1$0Q+ zM(8g3q6|?ku{b`aD&*UU<-uu`=hL@k?j%caFP6QDt_nj2!ROa zXB9b1`IXemf?}5kt*B?A5~Nj6nuEJVO$zBD8`PhEU}8~%lA*U(;np0nN}r@gggq`9 zcD1UM9T7Rsxsb$|#c*$Rgj~P=y7y(Dzii!{X-ks~p4s=IVRu}=U0-r?a+!zk%cpyx zL-2^c7ocTod7bRSHhICqJ-r0I?9=PcDzUF#-3yq5lL?_Z0iXzqbe0KS`8rI!l~cSYH|uf=`t5i8vM{ z^~vCB5M)HtkFdiGrIZ~ffDb9##H7!T`+gDZUQx_$B0;KAH@yI(-EMXDNBY46Eg3J^ z&Y*Uq%3L~^2kqaM3)6T;*M$*!!h{~$(!Xd3!ubZcPV77J?g~ z-7}}v-@U$x`=QD-koD-@YDS+@0Kbrs2}uO=^Y}eYA7*hr#(Jjt<1U;1k^ve3+Oqfd_Udi>_Wc^KpI9;}}H@6SKh0 z1wqh5TmRJufEo2_FOphB!l-CyHcMS5z|Qlls>dg_1&LfMV%WpoklkD|IC4i+5KX!+ z(QyyPkx5dbo4^4)JMwLaSy2(Tc;rK4PQnRnA$Cr_6CGMonIX0XFE{O}h5X>~zQ8p* z>(o6*$K8C0>BfUB0whcPkrpRatyXZqY^Dc1nadH&Iuz^$2&?ze=+6(ZXZ?s$Mfe~h zT0;0bTp`e7bu9jJy&#(^1^X_}9r}5aHHml-7XO8peR6XleEAUWqWS;(SJ3JKwEbE2 zL}`N~Kn>FH@n`G$K5u|{m)^3>{ucbs>A&7)AhQu?JR-HtyDkYwgQi~m4c1WAde`g| zAFJPi7?U_rIb|091ZY!$w%&Rx_!yG7NRCtx{%`BVLj2*# zC+AUA3O8nXvx`yV=7`^YiCV z4t91JABa&)xL*L%R!HowNDmRvSULM7Eb4rkI8IDA}Eps;e=hRR0AU;eH!XZBY#~qhxvw<^ z%J2gdh}=@ak}Fag422JanvZd|-9d|^yL$z~Gvl=INvK9bITe@E=}8jHAyoFwz`!vC zEs$rqBKG!wteiq+xfY2>38!5G&>y>=*zKl3ZdYI204ap&G5YvT7;K{AW1^_2bLfv&U z(?XPT=W_z}um}PSIM|H}4XvGS3=g*Mo4d~T11TJ+VRmSl z8D#iGWYFeO$c*td_IB%AhCpF;kcj8xdq#dk*{>UL0mvMBI5>DDuLJN9{0$tis6Fkf zK^$=M&rg5*=HMRhAvOCE+*CUzm$kO0$vNrU+OEGqyu}Sv{#ZF#toOuWsZ-+BAH^5` ziEK+!nO-A{IdbPJ@p^M}a|jKcSGsAk47dG@vR=3~u&V&AgR1)jxT*1WABKjEV48x1 z1B&rvF*G1-D?M2JAcWBjZnHl&b>+F!NgB(RYQIzg%$s>>+`UqCtx6yuC2c6SG#t3s z!N2XL?-)R7pAmUlI#VI*GXnSF`w}-Qyk}u=XYtQB&+2t+PbYT9l`yAp63@Iq6w~6C zb05X)uiL3szW6!olXSbRP5!m*U8MSRM~E#g^un$`--p-~-PlFnFCyAsd)K~Y>U^iw zxjpfrhUI^4r@?Nl*vPc-OL`i7AO(Kyi>&uii2iz4;x`A@|DU}jakT&1y!R5fTQr+_ z)&lEu@uhb?{-zimE%QEh-R|F?NP6?Xt^u*LZwUIo`B8FsvtkG?D9gsij?TD{%~te< z4adpnmt#NIXG-iRc3wHWdxCp}qWFQ*mQFO0s_*=)<;M>kcP zB0!HGifz`H9pCwt_=fdDzu!{rdbX`(gpV<3sdufZ-pJhaQGz#QE$S+e6|GMX@4;b9 zgw~SZKa9)W9aZFN29j+v%x)Vl`RTWnu?f4R$vcp{%JX%-tbG3aEzYa)4NDT%b2OB^ zL{1B~xTtDu-)MkG!3W?)%!etMFlXNOwrO$yo;~@oI!`lR9QXi`fTTsb3kN0~w{!PE zsGjuoO)eUc+IIyTftp&V$qsfj^ZSluhKm~)M=<1EzC4j7x8^E5FuVEv{X%(q*Y;7{aG0ZM%jMNM;{MmOa_cM&BQFUd$G0YMAs}J1D{VuY z!C7Ll7ZdB&CM5q52wm0Fj2Ip+G*^v4s&vfjsDk%ms~d>*VCD{O$@Efpu^YS}X?btK zO9bubiD;=)e{3duz(_4gQ;ZnsL8hV>xr}}7)K|h23{A*=|t6Z zFO88mcV18UO?SpOxBf6yVnp6VnblHe>p7$`-*eAZS@;1I_D+~|@aD=p4Q)dzY?3|2 zmEXyvSFCsZC|;ZldSq>RO{3ZKVl6I>n9}?}H!+mmEByqqD_DaTU(LBjjSmYC(>rWO zakzape~6ZW8$8}k!e>MC)Nl0RgxzuCNsADHD2SQBcr5W__qV>d<$WcWrvrzVe7j0; zb^Uqsr=p|N;#71tYq%%w_kSq=*U_#a2#?3+Rr4yratq&Xn^m^eP8A@uN#y~ zwxom$jYQC|5*H|k9EKC;n1T?;^re6&GD7C1WQR#oyo2kLHXA{4N`Xd!re){K6nV_g ziET_R9#{Ic9{}A+lNuuw`>Lc@y>h(!iTWl&v^j!7Cq|^8J{TA(3ytF(aG${ZH0Rz)@-(_M7MNGd)aFss zl@AQwkwoyqkW>0YqR8lak0>!aeD&X}AU!rTrKzk1g(KPY_KLlpdc7+G2;9gfHA;N( zDEKw5IX{i!7dq2Pe%@MqrBQXs!fHKT9L5*zuh-8u6ykBTYMVr1r?(=Y)JG`1S$>R^ z9#%E8En4&)oz6B&SUxFNR#X1#%NFgsXs;N^TTZocL`KkZ&B=Y+iKC#51}B@=rYz=| zw=4QkK=o;1;to%HSZDF*;GVUSv0t`i@z(T1T!r-_Y_!;!uLv;0P#dzT5r4T17BlHgQNvFgCl~saEG6Z)eew$#xuU{t zx{m#v^`vlxNxi~!1XtHjC_Q8%7xxcw7?K8!q56R?gu203(k29Y zh|m*=4cJ#@GLK8{j!W$!w>+H_zH1wnre57-Q>a(i(Q`P)o@vu7=`QMx&2eA5Af*Y= zx)7&gufTgpq*UHIMvK;r$v(8p!Qe7i@{LPzE!_k20C3MbfsM`0lpmtG_3us%TrI0= z3zMU;vlyNEJT(Q|u#8qJ{im|QW6L%mc>K0tRIR!p@jbz9T013`VjMT=h)&R8rhEby zi&6Z5%48W7DtKH-cOU>$xXw^0W=M;f^9cx#*SxT9`l`s*wC%gwgxxBvB}X4EJ$>8+ zgSG?0u{l2Q`3Si`}{%+j$y{5=bF#d1@#bqgm=~xM$Bp+=ms!0lj_1hS?d5oNC-*&^qPlW4p<5>lh1Q!>&wnpQoo z6+J^Hua*ozFXGus#K$@=yUBPgc&bc>@fG?&Fc-xw z^0?&UN`Gz;>ieB^*Y-~m#(Zl}5TQw&)w_?jX zXXlia{u_-N413=|S|P;Cw*dQStSK_^Fc_$9KXwx-ZKa?+tBJ@=X0|hKk*S>8Z7b!* zNY4$ZrGhqGRxM|ZZ`6*$?wc4S$5u-jxE(w z!dq9^h7YQ6R&Lx}o~J`ESe!RSBjryQ3Y4?B$(R5)Z~xW@F2SZ_mdXUI;DUY?=awK~ zYvAwiC^Re1FX;mBw?5Lx(d^pMm(LO5j)F77|FTS)W?NZBB1H0Rh+C+v1_szxu8g~Q zk>s+Kd3w`xpfYIOo+#B$o;U%KdIqmqaXREw3h2lGES#B}JIX_9mLBAExt|_2`2Ix# zn7zzpiz?ya&_Yjf1yu(s_bDxD@_{|v7+QC7T(iQE!8Ay{cvL2j9CQ%82ys)HLwUhb z;6cfXZTI@=bcJpwwH;w%f<}lyH_<|Us*xW*exU9=7)Sekb1tOxIoY>uL5`*8liN}% z!Kysb0W}40QZ2f@aO==7SB8;N;Yh{H&)V23XEKu*Ah9B@ zANml*LQFp#oH{!azDbG>6$nrkqOB+g6mC>xT?fcp zEwhkRV+n0LY2}vGhFww-3tXpOhn&~3_i{5JQ5VjJfW&=@vlrwU`nC)YroFkxVQj#i zQH4@0+jiMhg>k_sMWjUUh(61bQ|F=;>oiA5I|_A7(B0MI?G!*3iP?SLyHc32T)e3-#!3~;05VYD(r z5s4--B)4BHa7(A~OPQgNIJI(q|wHr*?T&fg9g$I!xv?@%pZ@^*>p&qmx;>6O)th$Zr*o{;DW0 z-eeP0_6S~fI#sfPF9;YGO*e(M`f6#P-(*-(2z#|7x$o*FqNfW_ z1*znUQ%vEi&6fnkAODy*Aopp1EUBP+W&ZoKS}fc$ZxPTop#xr{MMr!9HzbF!agZ|e zGi`-hDfQ!+VS(k=*4i3&X~lv?j+1`0Ghe?!eX885`GwVOTM|>fZ~EjbsIBWdxs)r) zt=c}VwO!_tCFchcXI4d$^NqqOVS}WeD9l+tduK1Z=3{#E-~cYMR(kDT=u(W7gV{0Q z7LnN<@X*_T1Ub}k%`c<$GgYXkd++1CgnjkF)3PTIz|wAStdO6 zB()$`r}=iqfULs8jt@pAN7UtMIK7KgN&W-%VTk39&B5xA{0kB!o7J(9Rg7>29VK-- zlc}mPg6G<$tmLLjHS`Q)Wr}DmsN|g~wUVQp?1fDW&+#oxQqyysB;ooAZB7;t$DY`m zueT0h6aRi_CtP?^?dM5i8>y8t$$^G%AV8CtIGnC&-HY5%tjVo+kLZQ#SiO@|ihe)a zq+s8JU#KI-d6nA?w%>>8j~gs6e-GJy)E)~uYC^EEmMf`YD8-YrUB6ZA55zJznoY@l zTs#0-i1f-U9-}Gvsk0)K)=9|G!VmTLnNCa&JO|Nyeyz$<>eDONHtM#^HbXlsHFlOF>r)7ph zR5aerZ*A=QR%!*MX3e`@p5fz5O0v;Q**Y0&B-WsYRcP-txpw_ib!+~aK$MK3dHGig z6bg+F_uVK5DKW?Dbg`{t@j|9lop!9rxw9*H5wHy9CPkV*(6M$PN)*EeqnuCn_Vh7w zV*^*Rn?wDW9H}LhYh^WSmvMLzl$m~Xe#kl<>DEWC=}Sz`%Jt}`ExQZx>gCIqWS+5l z46`^l^77U<*n*N{$AHHb<>Xen&?f>ScfEMA4NMG3cv)G4O5+qKBcp+hlkqE&k)m@V zdM%W$v@xsdVv}+qEfkZpATZUn198SctYOL~|$e z&(6$DP$zQm@{;B&S}fc1d<8e1xrZIsgy#UxxL*`>e&KCR%Ssvc;m@GzoDwo@@M0#k zYII7GKpkaO@<+O~w_SK*cye{t(T~N_hAHBPC1u~K^ah58gf|ap3`hu>m{$5B-GI2l zfhiK`hVHw}zE8>8sL3sGtPEztHyaXod-}#Kibz-&_%HJIwS8$gM3Z(Pc zyZ@8)W!0ywS8s4dBsEjEas0+hSXKYRODAX$(Y|?A?Q8BF%OJXK=%}$4`;t$&uQpCB)ycc830V*e+nZnAb! zArCvddw<>1(uF38D`1+k=kO#?&k8Psl= zSGIMxs8PJG+2<`Ty5k$u$Y&3V$;lZeaE1}9?iPJojX?Ag@ZdS?^}<7)g>C2#`v6ZB zVaF+$xc?D!piNH5W%!E;8&%wQ!EBW} z?Cc32AFEsSLM|5DjZBS<#<{bO>6XKfXIP*wjKs&Cb}=5fb(Szi;yYs)WAj|AX`vi@ zzU`uT;Jz@MSN!J@ZrtJCsbUDf`p#%FetX)OwUs^T@kJyA!Sj;6Ka+dyTFKJq-Bo(B zABIJjW~Bh1SP)?_6>)F#BGsm?ZqpUJrQ8{FEn8o18wL&yyw6Xko>CL6*8z(M*=ZmrhBL&$O~LdFA3V)><*Hx!Rpn z;=x%`*Z9GkMk?HGPa3g_cd^c39 ziY|-CBmqWRtck|ESuwaw>S}5cTg;zb`UU5j^v!lPd(#PISIdB(Wu&9S0L+QcpJA6j zpFTr!aU73dr_sw0rNzy3V09b2Ehxd5fttxjJWifu$mVh9?Y`jFteT%&tHIM zJNC5b9ah?h58KgIf(uhd;&U+}b<3CAQx%Gq)*N|;Nvq-@nd}uBH1bXJ&dVOx5ZGNy zb-^<%jt!*ZgIDXdu4Z_e+)I(He5$D3`x~YI4d~o{7L@)MpbH&*pSZewBS@V$mfRl9 z_qyXVdbGRK;?0oE0nZn738Xn4f-#j)1JG7e{7wMh22EcGXq>}Q3<@Av4Q_5brm?bN z)0_u`Mkl7n69Q9@<*`?-RfXi35$0Epdih3nmcx??%vG>E0)yxXh7OI&dL8m zq-0+Ye{%OH242Z6SH8UNmfLpV;#s90o#x-#&DzqG*`w+@nX=y+8XAcCVjaUw){hl| zF0TJsi&{?E%%ib+tsDYkVoval_O3#6b`^5tE?4h^4{#vD4`!)BF%amjZEetF67hwP zh+lj$X!Z!Yj-plF5dl2(_NH_c#E^hNaYHr?lhVbCXqI&`Y8J;%f?Z@ajcgQV` zXOp6*=I6fzchQ@hCIuj6NSyg(Up^O?_b$`fREcj$7f<3Cd;8Yb)zww(zzXyTq498! zN>`}x@#iCo8i#&dbl&g+qm)5~kxeZ-dCi+&zg|FNQ=LiUR8V{CkliL7Lo3EQ%O|&Y zDp%wUS7a2@%(`I0AeWRyRRzyJr6Wd7h3Or)MO)UQu7Es((W*1P6Q6*&8+*H#?hwAc z*I;1b?0}y~wQrsoZ!%lLG&S8X6==A!B`d8_#qd{cXiNXa^w{8=H|45(Rp?B^wH|*G z${~l-Z6n0&a+fYlh)uX~p@HT5J{G=t*8^Un1jZ{?j=f@b9jAboIny@QA7^7UFWE&3 zQ=l_)q>z~8ujPGKO{mNL0S8$bF)pCm{N^3{vEp7yngq|{q<@1vy@zOn)CpU)D`nwR zC|8V{v$MF?IG421t>(@OQs#>%ZXI5n-DLcSFS&) z*}QDOqw#WoZ%hJ9(2(6|+z^>pqDg*gP)MmaQ1hexb_~z>Y)Z-@Giu%%*pMpnK22~r z&0C#KB@-7?@yD`XaJjM4P`3H63z;h>=i&pYfU<>*0BID+0q^46`9#JS3!c?_;ow~* z-{-SufXW%HCZr@qun6X7F4YIzLel-IKr8Xv+hGf%IXv_dV~uKSYio8ivun|~9V?5( z*V1v*xOsFhv7&1wLCfV9CxPRI)V&;;mTp5o7 zOD3t=ZF=fvG9AJ*@O`wskNq# z?H9_ErTi~Y9-k&qUiZKv%KLLL5-6|ZA1JTwGlBB9|3P_Im=tIAjnSwu!$gB)xU=}O zPsCU1oN@wK5pwSrxYS5T#BUpgNL{_y-)}X!#ctkahmJ?2(|QO34IR=4;9Vp?Pg&O3 zFlcJ_pFodUjn0nWy8a zZn;o5RM=eb7QKbG*8@+%$wqnVHt1BOZ~Qgxeb%q0rqlfGpUU)|-0zi_(Cu?*Kj%R= zrC_|(?uGiQceF769@jG^2WGwqddKLPDw%v7k>@u{5i zh^a&{N7*CmYBv6U1EVEP;CzD*#GN~bql-b31@=p~{v|zuL-7aBU$~$*4kR-3=|^u# zdYjB=9ym_F!1eG?7ZNkD~J3BTcWC&r# z3mzq+!7renzxbC+YpyN8<#~Rx*N*J+G;MaxmEM#~enk^0&eu{z z#2+iWoj|6X!A1A!aq`7&h;vEEIkcbhw9W+6D;Z~*+jwb08lAUJRvC#EozVP}HNrE} zCr0(u{#&ODgr-Ag9LKi@zF4us4(+F@UGfh38o7@;Y6R-RdtI~NVOmuwe=D6}4s%>a zTl~j$Fm4&P^(yAXjMqjZQ`CAEL}9MU?zt!5m_MOT91-k?FsH`p#pi;HjZhLqR$&fZ*&*w+q3ZJ~J`utd$gs%w zP*GWyc<4H-PG~cNO|s#f0jWDD<{{^W;5by%`4AvLc+b>cy;m>axhLbOCqraZ)ZjwQ z)!bc^k59N%hV~kS4ac#?6SCeK<3hv8J1lCIR3dU4Foy`G#)z2X>F{vM*j0k7xTO&G zWNKi@BqUcR6iUFZF?7~mb#a)N7Hu%@RI6mpt^eWGKiLp++}ryB8NT-+Z-Ws=L8J1) z0pvaq`QqrM-@0kjx!3k$qiz@7pKDeRho@}M@%=At@6e0B@sSgZ8^63uf&-(ULFho< zu*lbka-$y^gcfDI!>xXAg(pIfJGPcO=re-rIlhsvY>V~7@~Sp+6*JfM*W9;x>mL#q z{xGX&Z*p{WG|rz#`addAGa;vlECuk_**fjOn6YkQSrMK7v*IoOW`PZw04xmItu)5w5mx9$3 zP(niM$kN4E)fh*RFQ68x#^z=TadFKPgO$aZY$h?Q9W2YzWq3+^WkSMgvb!P*_{OOo?kEWUf`SCrx z-5A_rWd6|RTBFEx)n38SuW_&XbENJPE;7P11B_FP9#eD_Y1d1Te6nEt4-_+{r0#+e z1f1qKc#n>}_msqeeBGt9Xvf>KP%qk0a@n;Pxg7*Pv@KY-Zkp0WBH&>fKTdOCfF|18uFlY|)G560Ug&mTN+?XY0QdC#p0 z)r>Ln5~uzr65tFCB*5n@AOTkBe+>EkZD|!S{T2RpH9>xl*^vDl0rX9CXlH{NnU$4Q z*D!~6P*_?nkwj+a=Kk(|ZKGp%G55lWat{HX5-NY&ijT!8S<$@xKShpIS&rm}B_^G* zGFe!=U@$_C^>4SV@$*Gv=9~xbkV%nD*3?FKF^_op9P-lttsGb*B9;igBJyP817vFIzRKdibsAU0Zt#BiWZ#iiw+$kc0hg%i&(c z(1aBhdGs}P+~)n_Jknd4Ke+HfV7TLO%|0_y43o~Av6cDGVYxr$zb;%m@MP7le~E(2&x({#kRR%g7Icy~iX?Px7&@g?b#q=gv1Cc{hWzElp>2aMl)XirjScW$2x#7o z1kV9^8t&xmueYSbn_I``uFJQ!t?E%tAIr6K_@W}W(O#eBfDYjYd`v$1H>TWS5*#2k zv||rJ;~wb}1a>|x*E5QN)YtB#SKL%-2+j&@R_ILqjOK2g zuxy>V`6pc6bb1J<5wG!uKNfXQDrZr9!S0Gu@qFftigRF5h;AjvWm@q%-Dm4IPTq6-<%* z6`_Tn#r>Z++Q7*V<)?gNRjXmT@Zi8e(Asl3ftiaBPUBP5$Y~LmAYe(-Z%l90BR^{8 zyiniDSo+4e$}er-lTUW5khpfZEC1ZBTLjuKzdHW%R-(hGVF*BtBG*O?7hkW{@R_q{ zz&K%eDCvNz-TqZHn-cB67#%rQDYx11evg>$Q+k~rMN`6*$OkO&avN67530<=SC8O}1b>QVBH( zA6Wn2%|=7x?=CQK00RO0o|0Cjt$E6o+q_0!1-KRr@_mousQ>=y{GJFMj=(E#7hd(t zD=#}@I|}~p<;hQXNF@dWT_!1fzb^W36si__7cuyad}FRg)Yv{(U6EY8>O38T3w*+5 zNhf@L3lh3OF&j~D{k=_%m>>MT$O#}iqX;1Cb_%9`D(^Fo8a;BHCrDe=-_^_ZUl+Bi zF)Kc8MovjQWWf}_-BUWaS}yg9GbJ^rd>~i42J}LS?la4rc8>G92HYYyF^g7<@=c&X zlKw~CLJ`~=O6vYPtyk3>QM8y{b#7!icYl=h!M=NRP;ggtl&GkT40}+Knf1>vPj8j| zF;@=dny^&Iq}Km3m!2-teBIizlGo`&SZ$0X$7lHr|1v57jmclTkw(|ub2rHzv?&{w z*oO^kcZ;ziBnd)gTFxd#gzrQUd5@SI`!KZ7+CipyFdPTUg|&fO3W~!0Q`)UB4EBM@ z^Wf7qytk87;>5e@4At3lWh9$pwu^pBLNxjfSYdzu{|2nxa(@989eb8{(!Xn?!#LUbY*!foKbf;WQl7RM!iP@wxQz z@rEUxyuHRLd(@gLat#cfbTBwbt+`Ls?**0CSX}n|WdVp>((>B59HT)iP0q;3OFg*F zBYv__I^x$dEwr&Ikvro`SVo)X#r=)!Zs;n7HiWiPa=v|d;V}81!1t;;$Hlhvb??|` z5~UNTrkGU~iw*LaYgJJf9a6e(a;vQR_KmSjO|n7hFJDKFOL9+C$mD&C_Kf8pLUISc zZOgv5xC`gBWHX1pB(zQsA~_r$*n6)+2$6rs*m3&MVOS&@1K%N?7~t0n`+&L4j$nnt z^On9t@t`@2Ytg$lP|H?Sh*SVV=u9w9qr6n{3()%F?a(U6-g}X7e!fH-{iOH2DX~fj zNqC$qerYxD+J=9No9pcU7B|nnct+*C1!hWuz zcyy(aDMuCctr@hPMlHi#+=fqtQ5I#SH0Hr@aRr)pNM(Ag@3WySwb41Qz*k}TsqQm_ zFy)qdz^7QX8LV(cMhHLs6&t z1BQ|9olQ3)GehZMSYG@(teVh6i^DlT96ob4^B3=+=pyA8f_d0T|9HLvM63AmSrwwi zNdJ7ks){_n$+G67aGQdWa~8jS#|IrvNv^TS$GQ>z<8fYQr>$YW?p;i07hEC2(oW>o zoeT5S?Rw`#N1TJy)Bnc2dyg4?Ei;Xz(M#JFFgF8Z2@!IDcC5MA;wkspI`>#H6`Jia zG&KBZxxicn@T*JsYI>zwp0h7DN|lcp65#i&%HQC3_b>1p_D}Fzky@{bPiDw;*hPE2 zkR7>GEXC=maDT$xurRH+A3s{4XohL|^NZ!j?_Vx7nVk5C&-US`_i@M7te+((9tv=B z85gr*^(aVjE#H{p6#tLAAakmHMQZjOf@gjbwPRZC8gazW-%&VV(0SR!tfe)k^xN03 z@_{i58#b({5pef(J}N$^vn21Nk59j8*|nsiYKGK?x7x~!cjGoydMtCv*kU2UT$z}Isrg#$WHZ-~PxYJCcuI5D%gM=Y-+nORIduv(LI)SsNEqm!WBtKr z_%>RG=I+fIYpFFV47(Sh_Z1yVY~B?bh->$>FvhC5fT!*x2AMl)!Eq@z}c=~V@6mu^xfj1VnY)A z%iQejC~x4XShZ@E@b-Gg7)t8(8^aYFC6CU1&bjS1(4ni*u*xE6rd4g5YUM5@{4T=$ zUznLH6S1^^H>Is#zy4vsMr+16y%h_rBER~{lviJZI}kn@m1!5cLm7OY2yb>orSHBU znIQ!D4i!{>NI(hn(5V0ZkyFrlxBPM8vhC5-oP~4G?refIV-wLB_}iW<@-KYOs`hNL vzw*}$+AX$2{=)TfhA)d6aobV literal 100282 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 diff --git a/docs/uml-pictures/UIClassDiagram.png b/docs/uml-pictures/UIClassDiagram.png index 83607a4a6e4eac44d48b2ff78ca7dd02c9037ce3..f49d14d20ad0d6233c6f460775e2f80303f92cc3 100644 GIT binary patch literal 21840 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 G2~7aNqNgzc literal 23646 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 { + getListString(componentIndexes: ArrayList): String @@ -8,17 +20,6 @@ class ComponentList { + filterByPrice(componentList: ComponentList, priceFrom: String, priceTo: String, componentIndexes: ArrayList): ComponentList } - - -class ChassisList -class CPUList -class CPUCoolerList -class GPUList -class MotherboardList -class PSUList -class RAMList -class StorageList - ChassisList --|> ComponentList CPUList --|> ComponentList CPUCoolerList --|> ComponentList @@ -75,4 +76,6 @@ DataStorage --> RAMList DataStorage --> StorageList DataStorage --> PCList +hide class circle + @enduml \ No newline at end of file diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml index 92b05969ae..7ff7337c69 100644 --- a/docs/uml-source/UIClassDiagram.puml +++ b/docs/uml-source/UIClassDiagram.puml @@ -1,6 +1,12 @@ @startuml +skinparam classAttributeIconSize 0 -abstract class UI { +class ":UI" as UI +class ":PCBuilderMenu" as PCBuilderMenu +class ":PCViewerMenu" as PCViewerMenu +class ":UIState" as UIState + +class UI <> { -uiState: UIState -LOGO: String -DIVIDER: String @@ -27,7 +33,7 @@ class PCViewerMenu { +printMenu(): void } -enum UIState { +class UIState <> { PCViewer PCBuilder } @@ -36,4 +42,6 @@ UI --> "1" PCBuilderMenu UI --> "1" PCViewerMenu UI --> UIState +hide class circle + @enduml \ No newline at end of file From 25aa7f303176564f3f73300d28252da5aa9c8c84 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 02:14:41 +0800 Subject: [PATCH 294/420] Add to componentList and PCList methods --- docs/DeveloperGuide.md | 79 ++++++--- docs/UserGuide.md | 230 +++++++++++++++----------- docs/uml-source/DataStorageClass.puml | 57 ++++++- 3 files changed, 237 insertions(+), 129 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e5c3e4ff83..b5fe3391b7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,6 +1,9 @@ + # Developer Guide + + ## Table of contents - [General Overview](#general-overview) @@ -21,17 +24,22 @@ - [Glossary](#glossary) - [Instructions for manual testing](#instructions-for-manual-testing) +--- ## General Overview + below is the overall architecture diagram for how BigPP works. ![Architecture Diagram](uml-pictures/ArchitectureDiagram.png) The program will first load the `UserJson` and files in the `Resources` folder to populate its internal memory of `PCLists` and `ComponentLists`. This will be stored in its `DataStorage`. The `User`'s interaction with the `UI` will be `parsed` into a `command` which would update the `DataStorage` and eventually update the `Menu` which is displayed back to the `User`. This would continue until the `User` exits the program, which would result in the data stored in `DataStorage` being saved into the `UserJson`. +--- + ## Design & implementation ### UI class + Below is the Class diagram for the UI class ![UI Class Diagram](uml-pictures/UIClassDiagram.png) @@ -39,20 +47,23 @@ Below is the Class diagram for the UI class The `UI` Class serves as the interface between the user and BigPP. It is responsible for the following key actions 1. **Initialization**: Upon start up of BigPP, the instance of `DataStorage` is parsed into the `updateUI` method of `UI` to give it the ability to access resources for BigPP. `UIState` is set to be `PCViewer`. - 2. **Functionality** - - Shows welcome message to the user - - Gets input from the user - - Sets the `UIState` of BigPP depending on user command - - Updates the user interface to show the menu depending on the `UIState` - - Clears the terminal after every user command - - Shows feedback to the user after every user command + +- Shows welcome message to the user +- Gets input from the user +- Sets the `UIState` of BigPP depending on user command +- Updates the user interface to show the menu depending on the `UIState` +- Clears the terminal after every user command +- Shows feedback to the user after every user command 3. **Behavior**: The `UI` Class acts as the intermediary between the user and BigPP. `UIState` of `UI` can change between `PCViewer` and `PCBuilder` which would result in different commands available to the user. This makes the possible commands that can be given clear to the user. In summary, UI gives crucial feedback to the user such as the menu of possible commands based on the current menu and results of a given command. +--- + ### DataStorage class + Below is the Class diagram for the DataStorage class: ![DataStorage Class Diagram](uml-pictures/DataStorageClass.png) @@ -63,16 +74,19 @@ The `DataStorage` class serves as a centralized storage and management system fo 2. **Functionality**: The `DataStorage` class - - Loads the entire `user.json` file that is saved in the storage of the user's computer. This json file will contain all of the PC builds that the user has made in his prior usages of BigPP. - - Loads all of the pre-built PC builds that are in the `Resources` folder that have been pre-set by us for the user to view. - - Loads all of the data that is in the `Resources` folder which stores pre-loaded data of BigPP which includes all of the component data that is available in our database. - - Saves all the user data into `user.json` file that is saved in the storage of user's computer when the user inputs the "bye" command. + - Loads the entire `user.json` file that is saved in the storage of the user's computer. This json file will contain all of the PC builds that the user has made in his prior usages of BigPP. + - Loads all of the pre-built PC builds that are in the `Resources` folder that have been pre-set by us for the user to view. + - Loads all of the data that is in the `Resources` folder which stores pre-loaded data of BigPP which includes all of the component data that is available in our database. + - Saves all the user data into `user.json` file that is saved in the storage of user's computer when the user inputs the "bye" command. 3. **Behavior**: The `DataStorage` class acts as an intermediary between the application and the stored lists of components and PC builds. It helps to maintain a clean separation of concerns by providing a unified interface for handling data storage and retrieval. This allows the rest of the application to interact with the data easily. In summary, the `DataStorage` class is responsible for managing lists of components and PC builds, providing methods to load all the data needed, and interact with this loaded data. +--- + #### ===== loadChassis() method ===== + This Sequential analysis will show how the loadChassis() method works, this will also serve as an example for all the other load methods that the DataStorage class has. The `loadChassis` method reads chassis information from a JSON file and populates a `ChassisList` with the data. @@ -90,21 +104,27 @@ found below: ![load Chassis Sequential Diagram](uml-pictures/loadChassisSequential.png) +--- + ### Parser class + The UML class diagram shows the features of the Parser class: ![Parser Class Diagram](uml-pictures/ParserClass.png) The purpose of the Parser class is to parse the user input into commands for execution. With reference to the diagram, the Parser class does not have any attributes and only contains public methods for parsing of the user input. -The methods in the Parser class creates a subclass which inherits from the abstract superclass Command class. +The methods in the Parser class creates a subclass which inherits from the abstract superclass Command class. From the diagram, Command class has a private attribute named arguments which stores the user inputs as a String. The Command class -contains methods that help to set and retrieve the private attribute in the class. +contains methods that help to set and retrieve the private attribute in the class. Overall, this class diagram provides an overview of the purpose of the Parser class. +--- + #### ===== ViewerAddCommand() method ===== + This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. -During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with +During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` checks if the argument is empty and throws an `PPException` if it is empty. A `PC` object is created with the argument as an input. The `add` method is called by accessing the `dataStorage` and `pcList` classes to add the `PC` object to the list. @@ -113,6 +133,9 @@ Finally, a message is returned to inform the user that the `ViewerAddCommand` me A UML sequence diagram showing the interactions between the different objects involved in handling this method can be found below: ![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) + +--- + ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) @@ -127,8 +150,12 @@ The `PC` class has methods to set and get the components of a `PC` object, as we Overall, this class diagram provides a high-level overview of the components that make up a computer system and their relationships to each other. +--- + ### Command class + #### ===== `list [COMPONENT]` Command (builder mode) ===== + The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. When the user inputs a command of the form `list [COMPONENT]` in builder mode, @@ -140,6 +167,7 @@ The `BuilderListComponentCommand.executeCommand()` method is then executed as pa inside `BigPP.runLoopUntilExit()`. It first verifies: + - That the component argument is not empty. If it is then it throws a `BuilderMissingComponentException()` - That the component given by the user exists in the database. If it doesn't then it throws a `BuilderMissingComponentException()` @@ -167,35 +195,34 @@ found below: ![List Component Command](./uml-pictures/listComponentCommand.png) +--- ## Appendix: Requirements + ### Product scope + #### Target user profile People who want to build PC's and keep track of their builds. #### Value proposition - - Saves time and effort in selecting PC components - - Helps users avoid compatibility issues or mistakes - - Enables users to build cost-effective systems. - - Prebuilt PCs +- Saves time and effort in selecting PC components +- Helps users avoid compatibility issues or mistakes +- Enables users to build cost-effective systems. +- Prebuilt PCs ### User Stories -|Version| As a ... | I want to ... | So that I can ...| -|--------|----------|---------------|------------------| -|v1.0|new user|see usage instructions|refer to them when I forget how to use the application| -|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| +| Version | As a ... | I want to ... | So that I can ... | +| ------- | -------- | ------------------------- | ----------------------------------------------------------- | +| v1.0 | new user | see usage instructions | refer to them when I forget how to use the application | +| v2.0 | user | find a to-do item by name | locate a to-do without having to go through the entire list | ### Non-Functional Requirements {Give non-functional requirements} -### Glossary - -* *glossary item* - Definition - ### Instructions for manual testing {Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 089a436a1b..9bbabed534 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,8 +1,12 @@ + # User Guide + + ## Table of contents + - [Introduction](#introduction) - [Getting Started](#getting-started) - [Commands](#commands) @@ -31,14 +35,13 @@ - [Command Glossary](#command-glossary) - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) - ## Introduction Welcome to Big PC Part-Picker (BigPP) BigPP is a command-line application designed for PC enthusiasts and professional PC builders who aim to: - - streamline the [process](#commands) of managing computer builds - - verify the [compatibility](#compatibility-check) of selected components. +- streamline the [process](#commands) of managing computer builds +- verify the [compatibility](#compatibility-check) of selected components. This developer-oriented guide offers a comprehensive overview of the various commands and features available in BigPP. It is intended for users who are familiar with command-line interfaces. If you encounter unfamiliar terminology in this guide, please refer to the [Glossary](#glossary) for a list of terms and their definitions. @@ -46,14 +49,13 @@ If you encounter unfamiliar terminology in this guide, please refer to the [Glos ## Getting Started 1. Install [Java 11](https://www.oracle.com/java/technologies/downloads/#java11) for your operating system. If you are unsure about how to do this, you can refer to the [Java installation guide](https://docs.oracle.com/en/java/javase/11/install/overview-jdk-installation.html) or consult a search engine. -2. Download the latest version of `BigPP` from -[the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). +2. Download the latest version of `BigPP` from + [the releases page](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). 3. Copy the file to an empty folder you want to use as the _home folder_ This will be the folder in which BigPP will store all of its user data. 4. Right click inside the _home folder_ and open a terminal at that location 5. Run the command `java -jar BigPP.jar` to start the app. 6. Refer to the [Commands](#Commands) below to try out the application! - Upon successful initialization of the program for the first time, you would be greeted by the following, assuming you do not currently have a user.json file in your _home folder_ ``` @@ -61,20 +63,20 @@ User file does not exist. Creating new user file. User PCs found, loading... _____ _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /\ \ - /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ - /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ - /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ - /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ - /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ - /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ - /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ - /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ /:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | \:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| - \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / - \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / - \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / - \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ \::::::/ / \:::\ \ \::::::/ / \::::/ / \:::\____\ \::::/ / @@ -97,11 +99,13 @@ What would you like to do? If the ASCII art of BIG PP does not look correct, it is due to your terminal size being too small, if so you can disregard this issue. ## Commands -Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. + +Our commands are split up for two modes, PCViewer and PCBuilder. The commands for each mode will only be recognised for the specific mode that you are currently in. The modes will specifically be stated at the top of each printout in the terminal. Additional leading and trailing whitespaces from user input will be ignored. For reference, - - PCViewer looks like this: - + +- PCViewer looks like this: + ``` =================================================== PC viewer @@ -113,7 +117,7 @@ What would you like to do? =================================================== ``` - - PCBuilder looks like this +- PCBuilder looks like this ``` =================================================== @@ -136,43 +140,47 @@ What would you like to do? --- ### Common Commands + Common commands will be the commands that the user will be able to use in both the modes #### **Bye Command** + Usage: `bye` Functionality: Exits the application and saves all user data that has currently been changed since the opening of the application ```diff -- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, -- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! +- **IMPORTANT:** the user MUST execute this command to save the data that has been edited, +- if the user decides to end the program using ctrl+c or other methods, their edited data would be lost! ``` #### **Help Command** + Usage: `help` Functionality: Displays the valid commands in the respective modes Example: - - Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: + +- Entering the help command in the PCViewer mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: -Add - Add a new PC of a given name -Delete - Delete the PC of a given index -Edit - Edit the PC of a given index -View - Display all the components of the PC of a given index +Here are the list of valid commands: +Add - Add a new PC of a given name +Delete - Delete the PC of a given index +Edit - Edit the PC of a given index +View - Display all the components of the PC of a given index ``` - - Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: +- Entering the help command in the PCBuilder mode will produce the following output at the bottom of your terminal: ``` -Here are the list of valid commands: +Here are the list of valid commands: list - List all components of a certain type name - Change the name of the PC currently being edited to -budget - Change the budget of the PC currently being edited to -select - Add the component of type with index to the PC currently being edited +budget - Change the budget of the PC currently being edited to +select - Add the component of type with index to the PC currently being edited info - View all the specifications of the component of type currently selected for the build unselect - Remove the component of type from the PC currently beingedited custom - Creates a custom component of type with all the and adds it to the list of components of that type @@ -181,20 +189,23 @@ compare & Compares all the specifications bet Notes: Entering the help command in either PCViewer mode or PCBuilder mode will present different sets of valid commands - - --- + + ### PCViewer Mode Commands + PCViewer Mode commands will be the commands that the user will be able to use in the PCViewer Mode #### **Add Command** + Usage: `add PC_NAME` Functionality: Adds a PC with the name `PC_NAME` to your PC list Example: ->input: add NEWPC + +> input: add NEWPC ``` =================================================== @@ -214,12 +225,14 @@ Notes: newly added PCs will always begin with infinite budget --- #### **View Command** + Usage: `view PC_INDEX` Functionality: Views the PC with index `PC_INDEX` Example: ->input: view 3 + +> input: view 3 ``` =================================================== @@ -244,15 +257,18 @@ Chassis : Corsair iCUE 4000X RGB ``` --- + #### **Edit Command** + Usage: `edit PC_INDEX` -Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. +Functionality: Enters PCBuilder mode for the PC with index `PC_INDEX`. Example: ->input: edit 4 + +> input: edit 4 ``` =================================================== @@ -278,12 +294,14 @@ Notes: If the PC that the user has selected to edit is a `PREBUILT_PC`, the appl --- #### **Delete Command** + Usage: `delete PC_INDEX` Functionality: Deletes the PC with index `PC_INDEX` Example: ->input: delete 4 + +> input: delete 4 ``` =================================================== @@ -298,29 +316,34 @@ Custom PC: [ NEWPC ] has been deleted ``` --- + + #### **Filter Command** + Usage: `filter FILTER_FLAGS` Available flags: + > `-name PC_NAME` -> +> > `-price /from PC_START_PRICE /to PC_END_PRICE` -> +> > `-built PC_ISCOMPLETE` -> +> > `-clear` -Functionality: -The following explains the functionality of filtering by each flag: - - `-name PC_NAME` will filter the PC List by the given name - - `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range - - `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete - - `-clear` will clear all filters that were applied previously +Functionality: +The following explains the functionality of filtering by each flag: + +- `-name PC_NAME` will filter the PC List by the given name +- `price /from PC_START_PRICE /to PC_END_PRICE` will filter the PC List by a given price range +- `-built PC_ISCOMPLETE` will filter the PC List by built of either complete or incomplete +- `-clear` will clear all filters that were applied previously Example: filter the PC List by the name of intermediate, in the range of starting price from 1000 to 3000 and is a completed build ->input: filter -name intermediate -price /from 1000 /to 3000 -built complete +> input: filter -name intermediate -price /from 1000 /to 3000 -built complete ``` =================================================== @@ -332,21 +355,24 @@ What would you like to do? Filter completed ``` -Notes: The flags can by strung together *in any order* such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. +Notes: The flags can by strung together _in any order_ such as `filter -price /from 1000 /to 3000 -name intermediate -built complete`. However, if the `-clear` flag is detected, this will take **precedence** and remove all filters regardless of other flags. --- ### PCBuilder Mode Commands + PCBuilder Mode commands will be the commands that the user will be able to use in the PCBuilder Mode #### **List Command** + Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` Available flags: + > `-details` -> +> > `-name COMPONENT_NAME` > > `-brand COMPONENT_BRAND` @@ -380,7 +406,7 @@ Available flags: > `-speed /from COMPONENT_START_SPEED /to COMPONENT_END_SPEED` > > `-type COMPONENT_TYPE` -> +> > `-efficiency COMPONENT_EFFICIENCY` Functionality: Lists all components of type `COMPONENT_TYPE` with optional flags. List command shows only the names of components for readability. For detailed information, use the `-details` flag. Multiple flags can be used together. @@ -414,12 +440,14 @@ Notes: Arguments with missing flags will be ignored. Flags that are not relevant #### **Select Command** + Usage: `select COMPONENT_TYPE COMPONENT_INDEX` Functionality: Adds the component of type `COMPONENT_TYPE` with index `INDEX` to the current PC Build Example: add component of type `GPU` with index `4` to the current PC Build. ->input: select gpu 4 + +> input: select gpu 4 ``` =================================================== @@ -446,13 +474,14 @@ Notes: you can select any component at any time and do not need to list componen --- #### **Unselect Command** + Usage: `unselect COMPONENT_TYPE` Functionality: Removes the component of type `COMPONENT_TYPE` from your PC Build. Example: remove component of type `GPU` from the current PC Build. ->input: unselect gpu +> input: unselect gpu ``` =================================================== @@ -476,12 +505,14 @@ gpu removed! --- #### **Compare Command** + Usage: `compare COMPONENT_TYPE INDEX_1 & INDEX_2` Functionality: Compares 2 components,`INDEX_1` and `INDEX_2` of type `COMPONENT_TYPE` with one another. Compares each specification in a table format Example: Compare 2 components of type `CPU`. Comparison between indexes `1` and `2`. ->input: compare cpu 1 & 2 + +> input: compare cpu 1 & 2 ``` ________________________________________________________________________________________________ @@ -503,12 +534,14 @@ ________________________________________________________________________________ #### **Budget Command** + Usage: `budget POSITIVE_INTEGER` Functionality: Sets the `BUDGET` of the current PC build to `POSITIVE_INTEGER` Example Set `BUDGET` of the PC you are currently editing to be $1000 ->input: budget 1000 + +> input: budget 1000 ``` =================================================== @@ -533,12 +566,14 @@ Current build budget is now: $1000.00 --- #### **Name Command** + Usage: `name PC_NAME` Functionality: Sets the name of the current PC build to `PC_NAME` Example Set the name of PC to be MyPC ->input: name MyPC + +> input: name MyPC ``` =================================================== @@ -564,10 +599,12 @@ Current build name is now: MyPc #### **Custom Command** + Usage: `custom COMPONENT_TYPE SPEC_1|SPEC_2|...` Functionality: Adds a custom component of type COMPONENT_TYPE with the specs `SPEC_1`, `SPEC_2`...... to the current PC build ->input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 + +> input input: custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200 ``` =================================================== @@ -593,6 +630,7 @@ Notes: Please see the glossary for the `SPEC` definitions for each component --- #### **Back Command** + Usage: `back` Functionality: Goes back to PCViewer menu @@ -604,6 +642,7 @@ Functionality: Goes back to PCViewer menu ## Additional Features ### Compatibility Check + BigPP will check if your components that you added are compatible with each other. There are a few ways that BigPP will ensure your PC components are all compatible with each other. 1. `CHASSIS` must always be of a bigger or same `FORMFACTOR` than the inner components such as `GPU`, `PSU` etc, this check is ignored if your chassis is not added. @@ -614,7 +653,8 @@ BigPP will check if your components that you added are compatible with each othe Based on the rules stated above, the compatibility checker will throw the user error messages if he tries to add any component which breaks the rules, and suggest changes that the user can make to avoid adding incompatible components. Example: The `CPU` current added has a socket **LGA1200** and the new `MOTHERBOARD` that the user wants to add has a socket **AM5**. ->input: custom motherboard newmobo|AMD|10|atx|AM5|10 + +> input: custom motherboard newmobo|AMD|10|atx|AM5|10 ``` =================================================== @@ -637,53 +677,50 @@ Please choose another motherboard or change your cpu ``` + ## Glossary ### Parameters Glossary -| Parameter | Explanation | Type | Example | -|:----------------:|:---------------------------------------------------------------------------------:|:----------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| PC_NAME | Name of the PC Build | String | "The Beast" | -| PC_INDEX | Index number of the PC | Positive Integer | 1 | -| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | -| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | -| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | -| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | -| NAME | Name of the component | String | "Intel core i3-10100" | -| PRICE | Price of the component | Positive Float | 100.00 | -| BRAND | Name of the manufacturer of the compoenent | String | "msi" | -| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | -| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | -| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | -| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | -| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | -| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | -| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | -| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | -| EFFICIENCY | The power efficiency of power supply | String | "gold" | -| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | - - - - - - -| **Parameter** | **Explanation** | **Type** | **All Acceptable Inputs** | -| -------------- | ---------------------------------------------------- | ---------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512, 1024, 2048 and 4096 | +| Parameter | Explanation | Type | Example | +| :--------------: | :-------------------------------------------------------------------------------: | :--------------: | :-------------------: | +| PC_NAME | Name of the PC Build | String | "The Beast" | +| PC_INDEX | Index number of the PC | Positive Integer | 1 | +| PREBUILT_PC | PC with all its components pre selected | -nil- | -nil- | +| CUSTOM_PC | PC that can be fully customised by user | -nil- | -nil- | +| PC_START_COST | Initial cost of the PC (must be lesser than PC_END_COST) | Positive Float | 0.00 | +| PC_END_COST | Final cost of the PC (must be greater than PC_START_COST) | Positive Float | 1500.90 | +| NAME | Name of the component | String | "Intel core i3-10100" | +| PRICE | Price of the component | Positive Float | 100.00 | +| BRAND | Name of the manufacturer of the compoenent | String | "msi" | +| POWER | The power consumption of the component in Watts(W) | Positive Float | 150.0 | +| SOCKET | Physical socket where CPU is placed in(CPU must be seated in a compatible socket) | String | "LGA1200" | +| CORE | Number of physical cores avaiable for computation | Positive Integer | 4 | +| THREAD | Number of virtual cores avaiable for computation | Positive Integer | 8 | +| BASECLOCK | Baseline clockspeed of component in gigahertz (GHz) | Positive Integer | 3.2 | +| BOOSTCLOCK | Boosted clockspeed of component when under load gigahertz (GHz) | Positive Integer | 4.2 | +| RPM | Speed of rotation in revolutions per minute (RPM) | Positive Integer | 500 | +| NOISE | Measurement of sound component produces in decibels(dB) | Positive Integer | 43 | +| EFFICIENCY | The power efficiency of power supply | String | "gold" | +| POSITIVE_INTEGER | A positive integer between 0 - 65,535 | Positive Integer | 1 | + +| **Parameter** | **Explanation** | **Type** | **All Acceptable Inputs** | +| -------------- | ---------------------------------------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| SIZE | Size of storage components in gigabytes(GB) | Positive Integer | 512, 1024, 2048 and 4096 | | MEMORY | Amount of random access memory(RAM) in gigabytes(GB) | Positive Integer | 8, 16, 32 and 64 | | STICKS | Numper of physical RAM sticks | Positive Integer | 1, 2 and 4 | | SPEED | Speed of RAM in Megahertz(MHz) | Positive Integer | 1600, 2000, 2666, 3200 and 3600 | | TYPE | Type of storage device | String | "ssd"/"hdd" | | FILTER_FLAGS | Attributes of PC Build to filter | String | `-name PC_NAME`,`-price /from PC_START_COST /to PC_END_COST`,`-built PC_ISCOMPLETE` and`-clear` | | LIST_FLAGS | Attributes of the component | String | `-name`, `-brand`, `-price`,`-power`, `-formfactor`, `-socket`, `-core`, `-thread`, `-baseclock`, `-boostclock`, `-size`, `-rpm`, `-noise`, `-memory`, `-sticks`, `-speed` and `-type` | -| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | +| PC_ISCOMPLETE | State of PC | String | "complete" / "incomplete" | | COMPONENT_TYPE | Type of Component that is required to build a PC | String | `cpu`,`gpu`,`cpu-cooler`,`motherboard`,`ram`,`storage`,`psu` and `chassis` | | FORMFACTOR | The standard size specification of the components | String | `atx`,`mini` and `micro` | + ### Command Glossary | Viewer Menu Commands | Format | Flags | -|:-------------------------:|:----------------------------------------------:|:---------------------------------------------------------------------------------------------------:| +| :-----------------------: | :--------------------------------------------: | :-------------------------------------------------------------------------------------------------: | | Add PC | `add PC_NAME` | nil | | View PC | `view PC_INDEX` | nil | | Edit PC | `edit PC_INDEX` | nil | @@ -693,7 +730,7 @@ Please choose another motherboard or change your cpu | List CPU | `list cpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power`, `-socket`, `-core`, `-thread`, `-baseclock` and `-boostclock` | | List GPU | `list gpu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-power` and `-formfactor` | | List CPU Cooler | `list cpu-cooler [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-rpm`, `-noise` and `-power` | -| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | +| List Motherboard | `list motherboard [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-formfactor`,`-socket`and `-power` | | List RAM | `list ram [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-memory`, `-sticks`, `-speed` and`-power` | | List Storage | `list storage [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`, `-type`, `-size` and `-power` | | List PSU | `list psu [-COMPONENT_FLAG LIST_FLAG]` | `-name`, `-brand`, `-price`,`-efficiency`, `-formfactor` and `-power` | @@ -706,8 +743,8 @@ Please choose another motherboard or change your cpu | Custom Component | `custom COMPONENT_TYPE SPEC_1\|SPEC_2\|...` | [Acceptable Format](#acceptable-custom-component-commands) | | Back | `back` | nil | - #### Acceptable Custom Component Commands + The acceptable formats for custom component creation are as shown below 1. `custom cpu NAME|BRAND|PRICE|CORE|THREAD|BASECLOCK|BOOSTCLOCK|POWER|SOCKET` @@ -718,6 +755,3 @@ The acceptable formats for custom component creation are as shown below 6. `custom storage NAME|BRAND|PRICE|TYPE|SIZE|POWER` 7. `custom psu NAME|BRAND|PRICE|EFFICIENCY|FORMFACTOR|POWER` 8. `custom chassis NAME|BRAND|PRICE|FORMFACTOR` - - - diff --git a/docs/uml-source/DataStorageClass.puml b/docs/uml-source/DataStorageClass.puml index 750af12969..91e7e858d9 100644 --- a/docs/uml-source/DataStorageClass.puml +++ b/docs/uml-source/DataStorageClass.puml @@ -2,10 +2,34 @@ class ComponentList { - + getListString(componentIndexes: ArrayList): String - + filterByName(componentList: ComponentList, name: String, componentIndexes: ArrayList): ComponentList - + filterByBrand(componentList: ComponentList, brand: String, componentIndexes: ArrayList): ComponentList - + filterByPrice(componentList: ComponentList, priceFrom: String, priceTo: String, componentIndexes: ArrayList): ComponentList + +getListString(componentIndexes: ArrayList, getDetails: Boolean): String + +filterByEfficiencyPsu(...) + +filterByPowerPsu(...) + +filterByPowerStorage(...) + +filterBySizeStorage(...) + +filterByTypeStorage(...) + +filterByPowerRam(...) + +filterBySpeed(...) + +filterBySticks(...) + +filterByMemory(...) + +filterByPowerMotherboard(...) + +filterBySocketMotherboard(...) + +filterByFormFactorMotherboard(...) + +filterByPowerGpu(...) + +filterByFormFactorGpu(...) + +filterByPowerCpuCooler(...) + +filterByNoise(...) + + filterByRpm(...) + + filterBySocketCpu(...) + + filterByPowerCpu(...) + + filterByBoostClock(...) + + filterByBaseClock(...) + + filterByThread(...) + + filterByCore(...) + + filterByFormFactorChassis(...) + + filterByName(...) + + filterByBrand(...) + + filterByPrice(...) } @@ -30,10 +54,33 @@ StorageList --|> ComponentList class PCList { - + printPcList(): void + -isFilter: Boolean + -priceFrom: String + -priceTo: String + -name: String + -built: String + +printPcList() + +printAltPcList() + +getIsFilter(): Boolean + +getIsBuilt(): String + +getName(): String + +getPriceFrom(): String + +getPriceTo(): String + +setFilterTrue() + +setFilterFalse() + +setBuilt(String) + +setName(String) + +setPriceFrom(String) + +setPriceTo(String) + +filterByPrice(...) + +filterByName(...) + +filterByBuilt(...) } + + + class DataStorage { - CHASSIS_PATH: String From cbd83c5217dbd08cdcd048906a8fe9d1229059df Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 02:38:04 +0800 Subject: [PATCH 295/420] Update DataStorage class diagram --- docs/DeveloperGuide.md | 28 ++++++++++++------------- docs/uml-pictures/DataStorageClass.png | Bin 90919 -> 169445 bytes docs/uml-source/DataStorageClass.puml | 18 ++++++++-------- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 156431d4a7..b3a2e92eeb 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -122,21 +122,6 @@ Overall, this class diagram provides an overview of the purpose of the Parser cl --- -#### ===== ViewerAddCommand() method ===== - -This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. -During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with -a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` -checks if the argument is empty and throws an `PPException` if it is empty. A `PC` object is created with the argument as -an input. The `add` method is called by accessing the `dataStorage` and `pcList` classes to add the `PC` object to the list. -Finally, a message is returned to inform the user that the `ViewerAddCommand` method has been executed successfully. - -A UML sequence diagram showing the interactions between the different objects involved in handling this method can be -found below: -![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) - ---- - ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) @@ -155,6 +140,19 @@ Overall, this class diagram provides a high-level overview of the components tha ### Command class +#### ===== ViewerAddCommand() method ===== + +This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. +During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with +a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` +checks if the argument is empty and throws an `PPException` if it is empty. A `PC` object is created with the argument as +an input. The `add` method is called by accessing the `dataStorage` and `pcList` classes to add the `PC` object to the list. +Finally, a message is returned to inform the user that the `ViewerAddCommand` method has been executed successfully. + +A UML sequence diagram showing the interactions between the different objects involved in handling this method can be +found below: +![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) + #### ===== `list [COMPONENT]` Command (builder mode) ===== The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. diff --git a/docs/uml-pictures/DataStorageClass.png b/docs/uml-pictures/DataStorageClass.png index 9a8f6b3148bb56272c42b1a499e1f6136ba2a9cd..0e67722d3891435f64c99d994b8774742145dfb2 100644 GIT binary patch literal 169445 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

    5}M0EB0zP1oUXypBm?FjXJ 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 @G*pgUJrE1aQCHwy8*HSF9RG<5CE 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
  1. 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 T^mP^f;*y2h3u5Q5-T%J;2TEXd literal 253470 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 z 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

    g!2jP&Us{Zv)vdV!Xk>5caha^Upq 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%0Aa+=5_XlP!P0MJB7OKZ3@Lj+p|klgNo z{<2te%JXi6%Z-Z?LMYikK#v2ny$*ODLq(py#pHfOyWLv3njVB>)|wzpD-t7*15JU0 zNy}Y?ktC7xdX`$5z1==#4VNNX3kk1b^Jn`c9 z@?GQ+8f!RUym(kb%JPUkH`}EW(OowzpR1;LGLL0G=}0oE;+p?jLmn1iy0|N&WEq-c zs(Ky|^conb{V@@JVS2En4s!cbpZiyT2R6;`4=d`W%R;9s=&)R4O|hP(rND4vbZl%F zn7~No!0A9cJMqk#v&t*u*Dx$HElstiYVnPu%eboUY6)SSVRfX7AeioNWFd>81)Th! z=t};{7SEdX?xVo!^*A~Aj|DUwKXqzH(}C?+rV7{D%zSH15yJZ)6fIe@1XT@!?ZcE5 zLnRUKHRN6p3>IaO-&RELPI~3~NTn;GcH-nNj788KO;moHJ)xr8wWy`j!||{!otOSh zqpG&o&#rjZ1Z@A2!2XN8U8V56?4*=@b-kNG_Z_+sh$!Ittgddovc~XX#;%B-u>l_! zDUJ;#qAWdREPgc}bY&v0IB$Ald$O0Dom5TF`!QSo^u&6)utEwVlZ4IBXw#1*aKFli z72n@*&4%GuR5_hkpbhQ3$At|$4LlsK^pZ0-n7HVr_gq_RGa0A64>PyRkmd9TR?`yq zs`~Fz5~p3!Qr0h-pC^`|B?v;&>vz#TYVORgAL^w|@KSLh`_*Qnu= zj{nqVU^p1Raa^USA`epSWzzSpnVK(JCl@YtA4gW{1R-8(K|J;$*18|sK-mN-__{GhSj(>T5H z%3rU@uTqv$z*0(ik>jd`QZa%;kalz#nT&#XL`CmiS|bcJjjTbx-DKdyqS&ojt5Hs0 zR92?*fA$2i0Sgo2V`JqVrI#AD>`pT%U7aL0cwhKddjd1tjRSY1kFOCH>V)tROu6I+ z6HB`V{z!MqEo6W@Cyy#Hu`C&{*9b#ZT&0Z{7UpFobDsTGaf(JzOn`>+WXV= zPT%*g;@SC9^udkgTk{f^N81ASBo`rI_JYO%i5qqMno|MMQ6kvp_0h8Y)QQom+`ebW zxGlv|*kDF=ZaC?As{mW4kMn2x?lE37j=iDJbqYE-8ht+9Emrm2cP)Rq2Xrj@yBjRr z^P3(?{XEUr*?j)?WuOS~ZGKWc32pDZr?zUJ=jQw8+(kzUx4x0R?fq9@D|6eQsi)zf zT6MxFnY7?a4d16;(R9~}x4)H_c-8fKTvt~jsW?gYrNF({pG`&^K-_IvPX9z+ms_kv zmDRUH-e>-DYTiS!?Y5*|g~h}_NAp+x8+TE6-v$;hnd_n>=6a`y{r5CHCABAn1 zRzG%jhQWw8DvBfNLjqHtRR^`R307vY&M7_-j?mwe)7_ekJ3t7A1~)KExrCc@3fIe?DE-|&-Sn^mqz_y#Ng^?;bKNHUAUFV*r*00*x*)}W zGVgxW#ozQQemd321i$d`BlI`g6)}9Xw-<3aL#12%W{K0bSfLP$zEK%W53od$T-1rG zW9RnKMMZoC9^!bj(^5Z@Ul!}mQA35UYj1~(qef}Gm_ z>DraCdy|A!r4N1}IaZGSDVW_S*0gR-W-SrBlHT{PzTk?J-q*nBob$$AUn~1YjNf1!VO6qEIJv_|>{sJ~f5FMiH(o{$c_rNuc-LhI+lL4nsrYdR9qyBN_{Bpy z7fQ!ox%EO~D>mUv?n>3L+F|>M?)LpJ-REZ zsEqXZ(m*D|IE%|)xJ-@QX_s~MW~uR=xM=>s!ZX!AR_W8QQ~9bnUua*Gm4kQ8ME)RX zMLe$=8s@ywc&L1YvExFQQ}fMb7ziWj&(4*sCSXhVbLry>%oet8`%g+Mi-XnA1|Ej^c(eHw#t*vi*1e;v8oK>fP5FMWrz z2Pdt6Y-PJ=bVJ)A_hXCd5BZYAXjPQLd9swe5u3OLtDbnpCGA&!aeI3ZO34bng6+x7 zOTV8uc`W)9ofwU+qpya4fcOJdcku^*9xU5U2gu%SRTb06J?+0vRSoAg+4JoQN`c{Q z(w8XQ*pAta>Be)7)j1toEXOuv&;z~z<;)WGTB#S3^=w2F)ksQkLcQ{*@WL|}PeL;Y z0|TB@#tMP%lXjig*PT3_Le5su707urlfKt+aa>j&H_MY3gAGRFKr^`<3#0e-H3|Pf zg0q=W_kR=?b1!ih?E1 z&rvI^U+zE1WMOU|hD9_k#z~bAJT$0Isf6H$MZ8ExaPaR5EaJ{!b?Y&V$WP^CUwaUc2ToBtT&j1mrm8|P|S^c!@{pN z7I#F-PoDDqpyOlmy0WaduC8suslm@!Az1SKKB27zd$rkmdL8PviPx1_50LFfA)89l z*I#{>gcbjwKuj^;6|)#Q0M1hsK3!W*MqgR`{5ghj#bbQhPU) zs0Q=z6BpYXU^LgY!=)|NGp!?OW~$QqDE;AB&Ok}F<<1+bFGToWD`RFt*+?U`PU=$s ze$+Jm?^+&*AB^HS1F}%NbiW?E!Uy!w^glY(7f1l=TTbNKdmpv;dl|MhUuzp7aGC^g zds-MsQ><6M>=>yYh_%+#ti^6s!27>GYEUKb*!ZzM)mxJ#Hi-SKOWol(q|E{-6_oZv z5t(Ozb)VR=j7kX!M95|KQr5Yu2{hbu9}n;FWadh6V0)=5ECw@fW_EV=wQGf(r)-yf znT}23AcMR7F|dQ6gM=YB-xKB&8s{63G|&2XqU29f+H(78(q*tDrz>*Tdgl&=xjonM z5xZA$w^+q@Uu->alz?GkZC|>NuTzU7>^Cj!Kz-^mcFL-ertEAY+=dflt?$Mf5kK#Q(oO>2f@hMeSjp*W49J}!>(T_C5|L8gIzZzhw z_5F14g{tnij2Fslo}Qkp_e24QMKS4IsgD{S4)b$&rLg|-IfrCtWrjD6vlNY{lpUYl zi2q6{>E@I!9>Eb#J%0Nq?dd6nOaA*_IK7#1WDx$`JM~=@Z5A?XbWDJ~14e(->n#Ymh*$2P!1Q-8K`f}Cc#SA2xA^85|N7CX7eo5p~YiepZ zGaT)UINsq@;o;>~URv5FUjEZ&zun#Cm;5*PZTql?--lEC(&E(JsS}ZwlFnLr$I+>$ zb=*+0ZMG)EDJy;N#4r@2p4?%rl=98bY`EFqjG6iC*GH=LyxOqGx&*}4qqeH0-5N(& zL)m^a3vEBRy6>i6X}y}owk@g@&18s-`^Cu-UCnjAeXjqRqCaTcbCr^m^r*^@zQ~M} zIjhjukK`L|jO#sZzoP$jKSx`__Vq$0Yuwoke1FXxRJi3X9XF%52{P`FrexSZv zW7BZS?4aUX)*)~Iv~wW|40WLFbYqtm_$Lf5ZLXcL){Jag^j8YA zuygc%YS+#n9!N`etgiFr{Cv=>qY^}WE9gBY_>eu-%Pm^j_i4I^oZ0Kc~HKug@|*9Oa~ynNw^wV9aV^d z6<J?WJN-(?T<+=RyzQ%f`uz4si&&Xmw!Z}~BP@n?)eqp{ z_gBYkaN@fXP1l|9>trlYZ;^F~9^GoQ*F)b$sj-wMjw@AN02BeB4^Gq}tCdvsM_+%D(^@TYl~IEdT(qWI15xo$$0l z)nU<>*|@y41`xw_H#d({wEl|BA8oujsolZBM)T;5g~z__k+Fx{xwhRR*}eV&!{jol zrmjb4&|6g2B;M`lb(lUUHp_Ud5)&#wdlDjaWP7nfzlKYrSWxHzpgBi2gU#EYgZ%Wz zw^G2j`hPTab|rsh8lBMQXd(Ij622eXbWC>N;G+DGR3m@we%!UsA5!M8PmTe3eS*W; z_RD>{wsLRlT%ehK&54%!@M?W0PRoJehq3e5dEuk&&i%X~hZ-W~P^itvx-G!DD&;Wr z5BM%WXL@)sOV<>5S9&g6$9UsoghH*Wu;6Oecdgiz<`Y6{PKwlfEN4)~MTI`l%#5Gm z0j|hLmuDa3^DWyBB$3OWe!&-MYmfXnRJ%E+RSaQf{F3je&oY)23;b)OhMaH_^t|Zk zXdumC@qj7KRluln@cgnBD`MILhwXll@WuE((MIJ3i|&S86M@}|G|%)~>`N{>FAF{- zv1oMPqhP$DmDYHWnDCtNa?IRK+RORhvIa^;+_`OVBgvkoE zJ8wUhh(#Z%k6!WV*%tFJot?Ls1lzCBY~bPLZQDoPtc0MzKc1<^_u6K7q6N7SJHTd? zCqd{BxRSBEW9)HqCd6bnp@}RT$b4^wlF9x+#|m(io$v|B?3qic_>$uA9?C~3v5(3dw|$NQxC*CPrg5yncFc1xe&KB?+%Q;k#J+tc83Tb%c=Zg(CA@t7Ys=ml{$7MRaC z7UG(qdu@nFjMTWj-GJ3M7GCOOa3y&m%`D$FQHQ1D8GRF3G?! zH{b4GdK`2#sHIA3;XyhQM`!UZv#AS2UHxkz?E|vMh)*^8ZXnLr zf4D>+R};p*L3R-{CV#SH6MNI=-1#2^M*IMD4D)>N8F?*$LeO@xuUfTn^6_6JYOV5P zd7rmz+H_@ZjK^uy_LWUO4gsox%xos_uu}TneZgxMdw&jO#GFZgE?Gk-*C0o)P8V@x z7nJ$w={v>fG5g25u&?vfaM%9*A}^#w+IzFti5;UkB=WJoNvN9=L$QX8Q(w@$ z$b5R=o42DNcmJYF_jbUvE6w)Zk^Mt$BkyCTQ|0QFtS;6y(uZOU_zrkl#wpME@1vm? zn%f+&Ig#T-^2}N8YX8V^2aN`%ymBA*Vgw(h{Z}hU$#Su`QF`c8@&am_miV)`F(A>j=csUmKZ zKyH#!@ci4p^sQ6=i6_-J%^Iwo?gebA7A6Pz z4!v!9OvsED>*$rAHZyd8!Se^2p1>O*zV=BTRjyQ4Z_W0S#_aRUv#zCUD) zReKc_{u<>KHvJDR)rC9^unl`}09cZKuFQTTdoyOQ?JjQqtYBV;q$6#L?9x2=|95{L?pl1cA!eg zw|oHU!_VT+{^cdgl$VA5{;224Th2Sl2WLT(a{{8zvcw^&4dEP@2zCM*mpiLEq*)bLd^nU@7tzSe0Xe@y`Yz5_YI zH#~3qJG?Z7rrvdk6xA@)uh5l5ETdJsUoWznH zQaoaYdy@YvA-o+Fvxj3)K%lxY0DAxgv*4g0_|A-g^d~XiXoHNS$Ci!xjy3dcF`|vD zA6qn5{c!pE_khQT^Kc-Xs1{U!Vbd{eA)*#x)wsUr&YnJTf>fH4p#n1YL)XbLf};`&et=XZiAsjM<`a>T&KLkNKn4R#7o@8D%m1E&WY8E=%% zjh&i17|iy0+t(@1Ynf_L`T}%%&~5S7SRZrHg=yv4XOP zDV;l)II$yg1#UkK3?SqQbzW2Ue<=8C8ynvS8AzW`P=cF^ki@QC{`P@St@n2)bvN&m zvHo*z`FPW5&+k)fMeghlJu{hjQa%U+JU=k&Fs{6@`SjWLKw4+pukQ}IjRJ3;M8gqV z377sF=%YA%jvk?1XaY3mk&({u8T3v3=|x6!c@CJ`7%eoxQmP);9-~GR-zP_H6nl$JD*J z_!bF>e0_INW+>*p1$n*L7uS1mig@q3?LAs(R#H{dWUvwAh3h26A@pya>_hKX3DD;rh7+EohpRr z2%11}L=N;cf5!zMA_?~X@{i~I^QkQx7ICX)gl=${eRWAhL`djyxYisbXv{1uiQjRW zcVm_8i0W#wd$@MbX+LtRjPD4p&P33})yYr-HBDVtm+k54bDA#%$|61pg0Oh=Mdmfz zO|WSayO@h|>R+XG)LIo2;q0>6gGZ;8vmkf?1KQRj`_<}e#Yy3n#g|&cF!S$w9P>a> zpPH=(Oyiph#qPLp1jkzc{4bInWiUfAc<)>WnTcYkD7Fom5(jKNmj*TI`kCp zwXu7SdEGj0(<`)7O5oe{M1vtVLv66RsU$6g>H|Tv62B8sTf;V?8OAE zIlS&yJr1D-^gL*Yv0d+%-$Pt{8U)s;B?0s)Mk{wd8@D*PKvRsGRh&fVCu?{`BSk1Y zz${YKyx{$OYzx*1450>IxnxPJ#ZaLAGU8OUk+|-~S=r;MUouAiBobEfmKmf6hKCn| zV4o%on`McM4*v0j4}t;haeWq44%|1N(CikxX731^0s z;5X@~lQs6m2zuWCkFocT=X&q|$E}RA_s*us-XbeSh=wS8MaazFWQRhwtZ2wAnb|@% zMK+n)E1TcrMW-`9*X?`zUH_fibzSFl-mmBL@q9e)kNdcA!2_(C;&W7MI>i>)tA!h! z&zEIlN(69EIE6rP<6++qtDV!Q#t3EDXnrQiqe(r|W3V;d)5<;BQS8a~_=51=>$ zp!5P#8DWcIS1Fn|p08OZQ+@69yYTs3vIb-r<#)Lf#28@k7VXS3y}L1 z<9H>|CG$D(8O!R{`0ZO3Z?b^7=FwX>_U1uN&o3LM#}~B*iTvu)RjR^QZzc8d_s=nX z3i^8!_i-xwE}>9#_Kg6gS};)KkeqP+b7j@(*dQgW!;>{db>q0~zV0 zaS#b|9vP7u(RDnc(oqys(04fqrHO|?BDx0o?It?{3I;Dv*qUt81Kkt4W)frOhYFuu zhvk+;yyr;1W6K?q!h&U95>~Q=cql0Ne+xDdj+6YIHn)a79{Phy^h?%TMVW5Ro(Y4j zCpz8N&~5-=$-xm69zK15yej}^LK+4p7S_?+b+2^%3F+Y{R&)X7WD_zg>otq?L{-Hi zV*Beaj=)$EX6pkmTxr~#s0gStoNI*gz6Ocyk9P+h>R7L!Zx8^&t$6JrEWQ4cdOCB? zAv>M&CsYCfI1?)%-v?M?RRu@fk7JE@2e|k@sljg}w zbkeyLGh|QkLtoN>n*WLyON-Ze2^fs+9jC7kTHQRXk|rIEdxqp2^$UoK z#tj;v5gqTR+UIm2y3I4}#Wy6OUx)YSS|JoHc` zgsx`O$kC=GB)EdkGi`O$dZZutEm3o=Q>Y>BkHK(-?Hc|p8xyFsO2KvsST+@qS*t9U z&G@l7RpmwqHQ8#;`wXn=Y(OE|Q>wHwl5-&i1g|Ktx40@^?Y+G*9H8zUY3I9 z;BmOek>AvnM$pp|)!C3G69F&ecprw`idk4AO6UDZX#uYl-oGSL3@}F0R{s$t4c#17 z)QekJ`Lf3o;D%+HI_~-0fhT_cWg7?wz@7sHkF>y}&9SZQAH5+w)L-nk6duriJ$a-Z z>ekO{uYn^NpkP0&Jv!1nVn8I)Fk=nXuA+>w>)xMg#VskBd=N&iuB+RA4^(*|CmtPH zrk_|rR&0Z^8G-GefhWN4f|$VUWh2+axEXa=J_+HhGD5}r{tWXr%zh|}@-nw7Ac4JK z>1L2M`uqBMt>7L)(cr({C)*2_&R~&~EnP7{POR;yaMc3N$8s(CP z=0Ge+zuS>M1JviH{EOQF!ZvL#CNI#D+u8#~5O!%MYv7}|@VjCmjN%KWCoI(7Z{NBL zGwuC9LU1f%KDTjVJ~t+E1DX}sezno(yw1%<48`xfyL-u=wNx#Pm+EBw$r|^)K^_KLL^QdSGJSk z02cc*VE>)Dz5=kl!;Rq*+aEBmxh$2=Y+JY4S{VCGLb4G+6&l}R*}A7i8glCQg8T0w zJY<4sM^Qr5dgLN97Ib%3!vKAFTJcL|r1o&J)jfp#g^k~w$tc;U3B-R~&1Zqnxq}nS zf<{$<(UJVv+zjhzx35Y`#X+(OSeTR%-f6)dCh+)tH3&bMwgnJuH#z~-*E?Wx6)QuP z4=)bR>9rFJ7zZ^qHSq9@)!=0jEm9@}{L7PXVHF(Wok>kuZpUqF(BnA~R%)Z_zk-1jUKJhFA)s+x2 zAY2N+Ixjy!x?B~vOt<1wcGA{Xystgi5AzwgFLAN5KAvwld|vqb1!RZn8psX>A6A;M z*K>G)B!W%579=LuF+IF-e}H-51MFl~QZ9afOT#Tjo$56kc_t2ohB5^CxeVX#~PFFFz`D#e7~Oh)Anu77I+cZ}|LC-kW} zfJ>Tq9y&TYpilMIw|h#N7wN3Jxs<;ptLSzpnP;P{oP(uh%#8Id-1`~Xi*x!)D)iv8 z-0}<*Dijy)vQ!>D!-3qhvgJ>E+vWZa>=FJdKXBi$UoHZUw1@I%gstNj;ty|W3k^r( z$)x`F62U82S0E{itQ@4p^%_NQ7y2G1ztZ)m#%LtMyuPZCJ z0xPHHZo@TY6_qv+IzV*nJ7GoYqPF&Q)k(5Rf%EOHQzr-UuR~Na^GrlPy0`@M+4M+pZ0II)UvWBH9&|Q6YU-l;G9qxFx#CnZn6`@Kd zZ~#!m%K9=VCv5&vSIn0(n!%s+e7H`W?hfUjyGd?9@I}B-mQD)LPyuc$)m<>1$-kNi zKlFP&<9IuB9k1|f;h3{$ON7fwN`D(3Jt6_xL=R8~FSkJ|FeC)CJV3D#gRd+Ah-c@y zp|h)4T*$Rdeiwv-5+D!7ng>PPUYami8JE27k6I= zWOs`*Gy4hu@in469}M{r1t3|m`2q{Km+6woJdTREA^c+=uWH@{8i*$lP+iXctOBe8 zy5LJ-y6;Yu`B4046*%khU)w``c5b}B1ThJ7c+Z}%|9s<=ctug1dMKgYE8;L;Q;<%)5kx$NioJ1GKf7s?b(5~fUJdG#niP1x&G-UUG6dK)AEF+STTLH} z00S((<>|cu9!t4a0JQ5Xe!s#L4L2f!uCpL{{QMh2oCV%Bh(Zj!2TgUE??N%_0+1m1b zuW($X-eioQgX^oqm#TgQ-n*bq*o4BoaA!77SA=fUYxC=!xfXbB8pp=QE*;EW@0Fo_ zm3SwxErW#)Z}p4PwWCLYm$4pQRaHHlxpbu1cL0r16*wVkThH9=EM0{sYabYxX@|nY z|MyF!BQ-lmrgt z-9dm+o7j_bxmW0J>fGlPHM~6Th~(iP z-<}G^nX0Ay+0>I^>?rS4A{<9NC6;50Kv2HAK0;<>2lBrx6#L8=9=pDI@bwO{O?`Xs zyH~HwfJgNpD)Z#$uXJuJRQ_MTzg73?OW>h`10JLL?B|xJg?f2+z|?1gjl?0ls?6}h zb&=s-rtW|L@0iXz}d0=B#@fz4PPrheyS9Z;nYUwbI_pJ^Dx;GMEniNRAf{-U2 z3)>C7fWQI^M#XK2_C)xiBSy@|FKP951Y|38eC|Xe&cIc)EdXtmb z$5xh+xqdUdkB*$KH|^7>lxCP8an79ivHMH)7k+5TInPJ;?%bLAiWfX0PMuoxmw_e1 z*YC~F%1V)NQtgEv`XM;;GzZMfnwfD_NfEQGU(5Xca}kuu%i0m|gt2-y-ItCycI-1w zZV)!#Q~(kuN9w6Y&*lK9b?OH!T0_0bhY!5I^r(n@Xj@lxDr210O5Y>R^l^kg#p^v% z%Wh<}VmPrRg^?C4NiYA`l9U|b+KU(>EX0nFu=YK+;WX?x_Ha^{0s!Cx0TCHlgBM15 zdb;mNP>dIi60?H=V5yXl&?eAJmC30f_5&*2PS(;FsbPmQ9>U7@w{_F%-8-*)=J7-E zf7*a^GFwkLAijQo&3;hooHu{oW&?Mq4&DDz4W&RA$Q1JmK=yb@e~iNGdkmHoP&?Mz zelG@_O%uyD6tZWeW{Gi{761EqjV3|z1_+QYpI2NK>b+W6@>=5H>)~-3Oq@wxa**pR zlHWRa6@8JG-1g>QMG*VMp$1Vlq&ofETIZ?9vFQdTuP8PC7_<$$3YN{!Sizn!8$$T< z@*oD#5P)2u!)e|;G0XTaa%>U$7p|%ViUkiA3y{(Qa|L{Fzzy-5qT={FaKQopn^*7N zy#pq$s4Y_;#qWVi@S2PaYSmfc-@}mduao2Ve}CH*2!7Cp%(mQI&>NZ{@#QC-Qcz-V z{I4L#MI;TK{raz;0Z6mN)uf<(CbyOe`L{SBuBUw}D?^+JbRo73B#K~XK3hfzX(^!0 z{?g9mpaszk$PQ+9!0B(*n32l=`?t>|l;?lPrGqJJo?qdDeUxJ^1F^mL21FO0VUWz5TZ7qZgGQy>io==#Q)m87H6mvjm`|Q^tOD@%CrI{(e_O=8alT_e71X z8adaQr-Vuk7l;YNXjaddsAFJ%lc?`S%Sz??=r22}kBw2^bW`es!Z!@UbYmQsNk)T1 zU-u4)gDi8`-PYtiL8qn4nN7K$t??;KJ(2?19di=#-^;g-n6a6n`#)O07`d{IeMf-l zvj;dFGK@k}1>X_HtM>Nxk0Y*}Kzf7~proV+I2G<^{MdE4+e<6u?hI73T2(K@&NGJu zx~>~^8-#gxUe%j(3R69aY$%RL*T#g##QPc=cNowP;9IOaxdOTOGZ>E4*PF?`2=M|o z36v_JSb~7H&-0y%dr+r(G+|Sxi;yF7f z7nh|UisYC_Z6yZ`J)GQ#ey)FC=Dek;W~R!NmfAq-cT+)Z9>bY^)%x-~XkTbyH6}># zK)6X1jWkvrjF2V>YVr+yauYJwPMmj#AadUCD2+ zIz`fd3Z+=5Q@uyj*NNL69@Ha_KF`E%86-6z^P=i00V_5WM&}-2I1dz9R3np<-m4sDo z=7L;}#XHH@sbFse%@`&orXT?^)<*(d?V+W@9rU(X2bwbpHaH!Ns}-1>tGmNa)2&p8 zU-g4igO{SwU*7pC^r_mMbAmdd=DRIU_7h@%zFo7xlqyE-2~^j!^4IQiSz0Nyk9Wx-)~EJ1gLH<#h?%+ z`Ae$K1Cdd8k^nUP9eABC7sWFeM0H_n`LfyDM1X-sUvIB>)ZFYW2RFCpOtRA?u{dJ> z2hPx1G}@H7XO7N^JEV542o*n3$P|05uA_6H2kZys=PjY*A)eji)FFz|q8x0DTw#hy zu6}CX6Y*G6vgp)!^98Nhcmw<$g*1~J^wDSV%mnv?M%N{DIfS4{X15bObUQDk)f7^K49jqfcC$_OcqQ5?gue$U|Z>G9i-|(tPmTUU%JkXVzq9u}${2LM2m3aB;jS<70fyX3m)Z>fQ_8Eb4`XK$qZ zaxqU_y_x*}`|vQ{I$snd?J>$hj1uV?-i>wEz8nw|y+_?3q(!o(VDVzKF5Uw<$CiV| z@3OP8e)4c~`Vl^fh4>jpmc__d(ikh?o+^X7S`8%?Hav3QY{BNULuwD#IO{X-_cM{O zn!BAp1E|&ncdMtFD?GIjw;+KbGI76@FI5`iED*O7hy#TJEE57%vmCQ7UGN7O;U56| zJGDYl0J+zp9{gBUh*2>pd#*NuId@1%NWC@%5)%#PZ;>Br9@Eqj*LRw2CrAe?Py%wr zJ1n4eo*{s9*QhkWkeC%eL=pRp5pnhi18J%=TW@MtK0Q(xFRXKw%c%0eU#~EGb}TdW zL*TpFg9pAgm6@3s+$gzs8dsp}h`c95eFGdYU+~xpf!FdWHW(Axfey4phj{yfF^qw$ zUuFOfrsz-`Rx*8%7H2pOiv%>ohOQ{YBCi6if7&K+#Lw}Q2FUI1?E(7_aeclaHr8^p zc?-NtH(+!#Ei6>Ueep}y<((lrQBQfoFV~k>;#OPE%z+sda5M<8Z5}|~?{6yyECLW6 z3+JkOiwN^*4j#;xR0(tC)<8*u_z+Sd+&y`xXEpr^el`74qT5ogtY(MEUK8%(z(Jr< ziS9)qP0oHZqdPfk!cV_-3hpliIZrXMW20|$;Y)hS5!Rz`NY!4^ry{zNuu|U!MF9I5 z1mD&OdjT8`^sg%l3V^53EL`&37v*{VLa0<>w-bGqN4o@41LDz}#r*x01JD-Af23k) z9o=34j1kh@qME%oMp0aqf1$y?ZxlHKygvYWR+h4x3@X%PQbP&hqgv>IouzAm4w1QL zv?&Cd6T0TAo>{9_>a+`laU<9Bk?nsd4_mhp_#LhwaO7 z@iYGm;j1p>GK7w`%R6)!gD~A0^JiXzc?!An0{r~-7$M^iG+0^BD0^q+=~cB)j(YB? z>@?UzqMma$T44E3Y7aV}MT6}g7>1j+Cp8;e&3=9~B_S(XVTbh$z8?6m*xkMzlX(lj zWbIaAB|I!(J@s>W`M#1#GNshw){{4+Z41Bv#H14)9i4K(*hOyc@c9_Ni^j_P1-RjFwPGm8?Oh;WXoAAGUMW8_fTG%_ zB#}T|lCbC-V;IfsXK=Fibb{nDO_*7Fj8NnZ70em)$Z-2TMT-TQL~z{5*Y~j$HqM>QScVmAvc47pl2Lq6RZHx~&ZF%B z@MO%RQL{VM`3{qV=-pIdH*P?D`SJfiqH6&78UTbFRs@I3s04EVemY|1W9 zb~|jYw?T1)sM$Lj8nW6W0|Rf8B4YUc<4kL1a0@6}c3-L}Uox!6rZCPbqB&@YOR!vZMr__Ywi2dnaW9oPI^1J^KEVR(RX3iv8QikBg^ z2}N`^@h{(GK&Slqs-Va2o1d?*&S}`7+$E=L`Vf+Q{8ol)h0n$4Bd;ZtKUndCxl|Fm z_1H3ECk8t~4cz%yDgnVsL$!po_)mLd{Xs$4>UH_o9oVVD-ieh67Q4P|=ESf#MPud1 zso|A))xwP0(@~!HCZD8CNyvYnMSYSq#EX|+*-Y+|nT&JIWKvQRNb!A^#XWWfy-0MR z47j;Tj6N2M1;yy7hZDGCO}XbpL-G%(C0KKvLS%TNH?Jked4isC;dZ*Tj!tq7FMlcu zM!9l8_$9Dt(mqO!EQJ*=BwK>RQJgziQe~U=8^gERGe*7*8+1Ql6Y2+V$2BPpZjR-K$MEN;7QAo-w0tRT)Q1NfN=G=41< zb*%9#;kpu?Jv-XlTaPB+s;aC9%XDpRTvO?aQ?_Bqx2#5jTdyX$y1K%YvE4{xZ3F26 zt@%NTYLu=RIu_>UF1vHt$qC1uFO)$HT2#Kr@qFFNRC-2OG-%Nbl;VR5%;1z25gtx{ zwg#0-F!g>SrofqhUq*&8?4VKxhOmt!!nv%g*pA;>p6|SuX(`HSn4Wg=4b)kOKwP$_ zfcE3pj?hkSpI}_Xe`{gOGb=WP59H2xfFnj4E)18)dZ{&k%~8rp`T|Y?z`L+tCImC1 zi5MfrCvmp=|G2YX*?D*~p_$Swwv5m0tBYvB9952mmlG&TPFqVlO`mrz)o~OFOue3T z+uPeKDlA0Qri@TWb1CpA|MmJ6oWbD=3kx&;xCrt==v%h;qVhe(7O~~H8ckYpqnt*8 zh_JT49?xa?Vpf%!*0K$i=HAq~Zv>)_kFUBSC!&B;!{zULS|FfGn42EqSh2pZa^=bu z;E;p6DopM`*45YeQNHo<)kmAV>ySAHvk0rjf&BgZGqBu=dHx(T>a=q_FjLl+zpmcD zuqnEj@z%LgmR0p0GKRbUZgm1`z6XY4`I?tRj@c=xs32bE+m7YXeUduXJldR$x(*6U zJIVU9=^1s?!yxzpIsS?zA)$0{dQx`G8l)$IGz(m#4ULRuTI1_RO@klRr&18QOS3{T zPgt^fDcL;@f@Qd0I{?(mZKc_nP^p(%4GQzplwAa10ot~c<8w8Uuurxs6>(iOoD%!p z`1tXSNLno5krUQf(Dz#MKBoHN80wm&VbXY2z@!4L0i9U43jc-Ml2}mS<76Kns|=#W zLovG{EaStKC({c#>dF({f67K3O_1|ej*AEP3We&Et;bJQX&wcqicw6jy2hdllCBb+ z9Iqwh9{}T;Z8M8suC1@BamC}lyd4IcOz4iszzg3*OQ~1|G>(f?t zD?sDkY^rvidW_@@eLna&QmYpUt!OoY`mZwr*TLqTN}z6X80#q+ZM!j%#1*F&AuLPF zmxuft%wfrBiV+`tpA-jZ7qkq@-<9j3my&Qzq>6jpPsNUXr|XJ@uJa-0MRRB*$T$r1jQ8PLl^Wxm+pRdQv#l|Q+n=zPsFtYJ^{QBJp7==Lc5?G^DhWG zg(n+vQnw1jz~B&6eOffV?>~HiBN=YJcEn7eVkU^2Z$CXI5rF5R5#T{Suo&O8i2klV z?5Sys^QjOlmI_ZgS(esIcBIn&s)DttaV+&fh`~eW3RSe6z@yZCamF(A;0bQBea*kW zqPujbF*moCMV3uxSlGvvU7@oW;l0Z{$%E{*5Br600y~ZBl4nKECT8(s;kCHs%c_XY}aZMOx+_Yv=seOVZJ%}V?Wi{zYkp!9^tn?>*s$r*|S`8`BBM@B+33O}dE~rl- zF%nvuPc9%7|8-eB5M|JxJ2MM%3Z#;)3fJNes$nq!2_?X&yr-`2^P$}b4N0|!=qz{l z{T!_#U{ZblJ!PVo9Rc=Mt5$u?1~vmWFwC0%^pz1SM4Af5tRND(=&}1g2aj7Jf?nt5 z&7Qu#zOF8CE#3z!niU;)85V#mc!Ng;uvSJuQxb7;tqBlBh=Q@5|8^nwj_PSOeQ<(@ zIsl}T2^A~P1W(?rp%)(iz#6jN{lOZFG68GgHyd9JsaUB!W0|)TZq`1nRB#xGPeS;m zIx?i()y*xf4}`Hc3^P~lyY42|qiZ@vQ&hu>y5-aDq268$tio&fj;puGX;4ilyMqT8fpzbt_t1pbhSjWUS_O)TqmCQFJ4$P&{y#J(6Az!0p zBrPGYjpp?wjXEs!I!% z5XR-4#q;Rf_F)pHqQbIs;lv80eciAvS@naNYPMhC=Iqa(zF`3pB+G^!+~pxVx)?1V z-Ylr6QZ8fis(`SkWq@&?e%OFAM+^h?7!PB_<~+HDY+xD-FL^pE<@IC7n{cmy~ug2H4?V zkf6rf8b+n&IbQpCED=1-8Q!`qe&|c}cGiFNXcL|}H#avJ4H4~+PwNIHuM!+Wwcv^$ zq>Mj`}ARw zb%!_5FvGAY^Aq2yDMmz7IATqTS<~#2`C|>k_bj1a= z0yOzxM2L!-`w@7q!pV!^p9P)|)KX|SD0tm%>0mi>D&0`s$V>J-wSk&4@q<4ns2{^e zMcIceYSzu?(Klx+48OrK>1m57h4aum`1idID_L;oj`qv543&La-EcghKPOn@N;Kwf zd1(0K^+msmU_i1V0BlgXQK9a&WP+7KqmTATOAX_d2Ym3}BZJ;tD^T zWbaQJ=mXA1VD`_L8y>PPSyqR=B!p#)*EY65=pO?UF%P6+ZrR+q6Z?wDrqcawqrbW@wlZmb$efxbYtxDHdfCCuIxw`H=Bf;VUp^qql=_@s0JHA5`c)IiRvG(L1x5rtIx(pZiHbG6m zP+@3%%$q!4bv({X+=VN!L)l@Zo~6B%1-(t_QusThLtVoCL8>M&l7G7`eNbpsO@ z7gtbFFghlt4W!>E=!Y^7HM*Ui-iwmvQ!fv|opZnI@@$@F3^7Ob+2_6mArXLo6zJfc zC2tLb-2-pD$8+DurYC+%0#)DPifApot)Kh z&hHDry)!i^*oLhAT+L_nIsC|1t0BV*e6-gbhnIrT<2lX*yt9Bp^%F4>h zq(Z*}(}{c;D4#d5#EIB2koZr2E&YL)6IY)$f9jjoj}Jt+U6fPqi|;YPl1D ze&5mNz|#9p{+P)p)I`cEa*gZkq*j6?KZS`%!RoCP8PR>%sKDTe%mzxxC#%b^YZ8t8 za!*Wj^6G_vHTYJ(WK~z30IR|9c>kkzU4-@=Mv|a8vD+i|Y)GhwKsDv(r~e65bdC-T zoG15VK$P*^z%%^tAjYSAn-F`;Mf+{(!vKB_a+9DRZS_NxghQc6X0@Af$#I_bK|~j6 z=6?Qs7Bc69wr}DM(`4|ICsVsvk6ZD88zAKc(CLp}TpX__zps>uJchx&lN%-N+dTHw zAY>f=$NnmDUjYBA*GZV~d2jbC7`|>nJzv5mL1dtTp(bzxt6wh3m!w7a_fi{bip z&`}q(Lf-(arALJ1T$*a?>NRILI-b7$rnJpTUtN|_fdXWv*y!k95Jzg5kN=H5(4b}u z^F~){AlL)`xMonuYn}IABFg^MO*Op$yYH$>n;PJxmHcD(lzE>K^L!4gn!jPs$}#i5e88XR6=I#TDFq{ z2xB(dW(ai<^$U+*T5LuJ4i6rjKQiosDSm^|5+?hCZfEP?AjZ@isuoSHzp)FTa-6dzB?FCr59fej`${&`AazaHUbz9qhp;xcIq;L625<>d!OScyjMiY7 zPC^D=h7AOcObrWSunawJi;iK5*U$5O4cadO36ST#E!>uvqU#SI=5B}2Lhm5(eUi&O zj6V}(|6^z0+%Fj>vMgz(Joo&BmpFvbnUP0QseNFNx{SlNzhI||jXm>n#k{rpS z08r9*W$iEM_nw_6W#*PZ`Wz!Gbq?ZG&FLP@a~<7uvo0wnQLT@e9Z6`ePf<-?f#hZ* zXdRHpDopaE(J}Iq3-49psDjnD=Bk^+6+(ZN&g1bRDtQ?=6Ho)GtU76k|OW*@Z6%nwO??O(K&TiUNLMEuYD z#*=CtgtJ7|jA1G5jA~MEGGm`c>z;Gr^kp>C6YyE8smStKDMxwmlk7FzH8$AL{DwBh zGYm{8t@!!zC)XM=p`VSxQ1PTFEbwS@Okzly*qUv>*J-t+V|G!F5b9z3x`^xDd-uTT zBog{H5)yFCbl#X%{{$vO^M5f77)$&k6XqclO`3#=2vw^d^2G3>8v~`oxPR5&7Kkn= zQ1hCtA%f&bmsH8tDI6SW8me~eg z0$@6}2E9REPL6*|%)fXDj64&r1#$5PPlXv>ygg;wK(p4+V*h8zp*NKukxUyCsdj^{ zi#dI7>yZm9!-{q6@I&?Mf1@Z{5+%_vvWDnMdzCDp4+)Qz&ZJ1VZ|CRWiNj&2#_@f9 zzn2im#lu@iMg;bU0Lp<|vK^2rp+SfKB(D3b`CS;t&%6ASg~4;Umu&Z(G@G}8p2(!L zRtcuEzE$1?EV`$sS5%NQ0e-p?9N!?S;f!dc{p6bu!ogU$NEwDEY^mf(R%ZLm8q~CH zMpFf8^MGIZDPN9neaV+G8#b)dq)$q8ifV@L%k2-Ee7x5y*A=v!&&5_#fhsJce?0Oa zH9!O0&iYo+=&ApI9*&T&kn%+Mz%SPz!=O_rT;;e9_m4#~e|RR{yqv_;_zQwc1}fb? z=C6B!h9h85<;GoHVwj3}0KR)hELA*qPL#j^1Rc~?!$U({(VJ+n z{ovJ#ppzgsm9|L)@XkH~1u1FMKx)>zcUC}I zcaN$XWD`v5vLQgm)=%w0+GuROkOYT|d%zPtX#ZvqYxi;L+!~OX#_yH^Yud}p%gt>M z4ieb-);aFfR)Ek}Ipw0(H%vOu4qA8HrF~gxWl7U8P!b>@!7H3pdt)|w?9`!bm1$=6ix%CB=m)Z$4)N(kqXt^azAor`NitQbNrx=^BU%Cqn5ZoecRf}-lo$e- zq-u|we+_*@HhUbE)-dHx?GYuk;is4?p6t4&406i&=TQ0_934&X-`_j9f$?^G-El;T zc7NoYZ~lejA8T?nj+d8r1#s6H;3`0D6VvFt*zoZ1*aa|;aD`N+k&zL|{(`}P4`J~4 z>u%BFJ4VxR^O-$=gB=RLoXj3XiK~u-Cw!rB2_RI&omVEq>o9NgT}LcF{ML<)#1jGz`eJ>iFd z6iUvh;d0(q{F2HAu&w}(G&GzY7uS_7EI4~0h^-15cS4fC0g{)Wh;gyHB~0!i$uE1@ z4lwr7Ho0PzZ>OVwyD}vmeDxcE(gK1VWvwX`;UOUj{3fR<8>1_9o>J&K`z$u>HelfJ zegJlewQOgjRPcpwt->*NXti*o5Sl$~XUOlazWEo0qhJ$I*?<7dPgK#{lJ?cAPSr$& zHzRH`mzS04D?O&Ud23*wwv?KnzXI|e?XSRFo%2DG^vMeUr?>>VtIN?=>Vgv+L*}GU zwu!$O5~Eu)yhS6K+F&2wYER(f$5wOfS@v6&K>Hh1M8mox5ZhVv^(jummwVREi zIME(F@@*L0br?IU-DT{bhG!3E`9^~8h&9Rwizl320r)v@-k?cl;=*hS2tPK-0Ua=oO zq4*YXu@x-T<8rj)yCQE>sC*??yL%TQ@U8JzBUxIHe%@kR|HgO!m9{U5m6ZE7@4e5C zb*zSRK2#aBgs+L2!$AOfI?NKYEU^Dh3L^lFl# zpFZt^^U~9Uev>-sN-jcxmvPxyGl48X-g|Q0XgDt5In^Nv_E<>f%F`O4fnM5M5QvPY zmrKGf-G{|v(5R_yp)n3ZzL2&%^&D;p#C_Lfa?+Whe1p>hF~g@b4H%^R5NbfsUt{~o z74uYHu6cepRy(-rR#sMEDt1!|%hAc{dK_=s%a@ny_8vctkH?8WPsz62xvB1Q;LYo? zyMd&#!{E=QZ0!1nqv5Yc@|efQLT>bw9)zNd;wnM8k1KtT{UzwhlgEP?OG@hI>-Lim zF6yr@Iitzf0^{M?hhi8^UZ}Qd9-k7!=^;2O5-?ZdR`}$c)|Guz<5r%e~n@TtPD`sprUMpyfA$gPd$yh#V^)ECfMak1wB*VWH@2IU?Sz@<-9 zk&$g8loNVJQ&de^7E_YW=gzkwI_AtzR8%_*bHY{@d{vSthEG-4wQ|V!ub3Z=L&-%+ z`U?3=EAUPV;1%;{Xg{hMfasNrNMw#!Cpn4pe4M~7?wZvMa7f+-a8uyBTr5XR9ACe8 zm$lFwogBwqwjb@Cll4y`WpFtZr{4arT2*zBd#4b2Ld3ci-aB8X|b4q zEp=)R+%IJaX0aNX8I8}y%{|RW`;8|IpjQLP=mfqoOqKy}x4^^OJ+}AC)aDPuPb(LG z)`WqD1OE*r;MjU4t*wbd=}+GeWOQ`HU%xhN z5)To#Qk{<->sS8=TtJ|c&SBITR8n^9G6vOucIDWnS;+hiCIb=(OJHwzx86`0GIS~wD*+^5p_V%|^rIT_O^&e z@sYSqz@eN3$!5;Dhr`8-YLw|8v^5fHY|6g?dx?znOM5%_g$q;nl`gIT8X1|h=2+lK z1uqhcqA9fE#woC;hbhg}wSWxE?!X&`T{bU}Bl5`pHiWNelKDFUlI>!!#Bm|Tg+ltjI1#Rb7e^YqQFXn)02m2QgqY*YUPpUSE$jI) zV^%8AjSo1_=KD7>8k3|3_J&D@qnlG3iz^d6QL>&Aj1pbRqPuEXd&-xA1@3|53O`zc z$bO>Z(SZo`fo)AqV{S2=0xh>Ga^8XKZ5P;eiXT@$zYI`f<2V9wHJDSk35Q-04-z5$fOMsG~>j*0M20f@i)visn{R4ORi!W|6GGG%B z++Tyh&hDNb;N%%7SX)^=GFNSI&9*!L8pM7` zd$IHhXsb}*AZC~k?-F7A@X63lIUlRYFhe?eqk6M{({Jud7-bD}FA$arC~?*0}(_~qPf2%EbA`Rm;``G_I`={1(7)Z#ErRTV?*j(3kSy61yKqsot$`mblHaj z7|^RQuI{&iXAj5Q1^>1-X4%sx+XxJSn;ssLQ9L?j^FgRPu_y<{1w>F zlRL&k9NMc(gs|01Pse(^;%NZiV?~X4c5(6X*t6yqDW%_B29tb*%bC=(2P zJOZ4OIiWFJHte%9T|w8gO>>+yp}L4Z{?iaz6P4U_AG@ncD11_3o}ZS8v%;dmu5|@& ziEU;zP3Xr02WhH7M0p5jyS=&j=?3?0rWPpbR9>L7EGa30!#;{UvpmkA40~v8O%WQe zNSnmQ_AG?~JKQ5(LT_6{;od#)=%J1(h@lEEf$DM_0FZUxSFdw&+<$$)AHUFxl$dRG zBytoei%};h+7BN&g%GpKdqaB)MT}{}>gHNU=Br#9RwC$VPkipo1ZqNyfrKsIC;GyJo8!^J4XTh-{^CW4 zh#xVqQ0SRd^Dv9@o68l@*uF#bIN$flr1|%Ze$L(uvZq57+{J~AD(eQIc+Hh&nAJNS zqbt?-f^JsGF)%Tq`9=W+ZH|I)*xQ%HH(w0dE1y~C>dLnDFVvOJ^}sHT#2Kw2F)E}3Ar1XQjS| zqF?LwXH7mK!$z?M-J9*N|GPAI8E(e9OHX{k zjGK*3;ms9{dAe`p{&Y4?K!YLR-#@hj7I6E70v@*#(zN=gps5!<4<8|E2hfH1XE7Lg zv(A)l4ppLK>Wq`V(omZCg@nkoIlbPdnWZ?0j@EBf|IJPSdfD0?E;QatwH&K$sr6Fv zet|*kz53*i1aZct9jo7xLUm>^h#sg3)|%)kLyMPR%t2kV+W@`ApEHnsI~tH+#H9^* z;5YZj>#aCM8L<!)qq2kOa`rSH;&KH>1`(W6g3{GJ|YMhU#O z(T|>=?lX$f=e~7OEuL_Wt_k@0SS>)5%st1={d~VFPIT5n-=^}Gx3!WOg$yArZ1+>3 z4rpp>Dk-(Rx&0P4rCNNJC%wi?JdX-%U?ZuCy@&t)7?b((8tL?cm*!y)r;qDzKwl=W z-WXPc=|5zO4U2AVSpIX2>^ci&^@=I7+( z^kiROcLid3Y*Nz22feR=M<3zEuj2CVXjDfEW6;>OiH8+NI(vS?9s+i$MjzD?GPi`x3P@*oEFv?_M(A%e4BXf4{fZJQ6;!G}{l{Z&+g zY1&xdZgF-$`_5)%-|@k)G~3v(mprd6&8`V|L6FG5ZPm^5KIXX*eC)e-??O-t&x4=y z^FXDOSD9tO#~7!8j+2To=&+45@)}Ey{Mp5lU;8R2i&SHx$d{yKWVQzon0C4aBEVpZ z=ecmjB>O z9-z34Go*UfFYzk(ZNSIPJ&K_<^`wln4!uM5S^G*Y(<8y!!i~iN>(boUuYGpj0{f|? zWE*^g4R+xOf(faVwlFp{m<+@G{n3GKO%vm6_YK;HvW*U4IICvoXA4Fv+d4Fm!Zu^w)vS!6Lbhb@*b1F-DZoUk@Q^5_KN7g~I3Jk~{uf$b21-yjEA) zOAZ0GGUQ`3Ha13>&20QsW===dm2CNM)+sCU-wP#aZEDnEMWjUSxWQQ9;E5@YpwZGqN z`ok*>#`HfwzRxwAE$%oJr-ay83OYJSFS>E-R{hbsGsH{5uhp==?4IyBz90#$k}r$5xv?hx^J|00 z2^@^&$|H43eEDaQJiKC=#8|#7XMP1Qv7il9xe(a}`nP;*df`vPMK{ZXSxEVu9eHuE*GnEV>!%pT6-iC zJ-&z44~NP4AM3VyUhfPS@~EIw-mu*f9FO%Se^v|{|T@W^ZZ^9)lL z;^$~TC7Nezl?ZF-{|h+m`<9M#*|s z(9@V9$&;)Kcjmzr79dx$9dgq28TkbtPd7z*C({klr1M_|!k3>30McL0w3(#@iEH^( z-}QgpX|J80agEb;p{?Z=m=RCz!NX+>iuC;0P0cy zT4cpgnW=>^5?nT@h?zl($rvkKyVi02!v7REfzoW2(8M@; z2^FY?Cwsqw>&V{E3nsT*Nw1q~YCyX|6Kh4>N&wQy{hN*J;o$)*zP9#u(-ydG234_;LvrrMs(oPd z#>e_L?cF=PUCx6U|F?8L)Ud~Ge{qRG7*M;H6&3D41hI@YqZf{g`vgHQB_))t-n1aX z)Lej38r*XKI!?8HR9(k&r)+@QlEgR}^aWS#&k9c&2o#D|Qn%JVY~6&Y0N&;h);8op zaS#|kE#r?y`UC?tZOExM6s7>tO-$V|#mqMhTvUL{f==msR$cv@&>LA}{tU35ld|fp zy?E`762`rX23mYJ8bP0T=$v;lFBho{Os7}~HA&(H;Lr1n)~k}p^uI`LUItwc3xXg8 z#aM`H6q{hlzN=yk1-i)M4o%SJ6+CsM7Du66!)0i5{?lC_lTbna1>qEmN=hM5o+QJ1 z0~En8GgzWuQ`}ku7fv?Nz_78w52WY5e+i^-AOwBJ%^MRNcnd2bG&uO_Pa^Pv_RavC zSOk>zI`YgiW(9z69{T9b@Qtl4xm~Py19*~tuj8(1UtZ6w+hNPX`j)FB0ro3E(y4%c z;{1%OXfQ8Cg`K?S@aqyCEwft9dKv&6)&O?Rx)uEiWRt)efmqPcW+dj+QmR4^RrIWl z4E)XsOSvKu{Z76%=o0twTaMqCxv%=^*F43ye!eXADJn`mUYY&LYhvly8#l z3Zj5Qh;0UF>(C13!_O?cgFidd{y0;?O7j(D54;&A_>&bwU5`Zuedp;;hV|_(+4`A7ENP`_R$9yM#jOYxxAifLv zt7sA_#iKVp^5sdjF}JUT1{CCfJF zPlH?M8@?oS!?)&LiUwz7;CbCIo@L?S&nHN+*qG0suGs&-lq zMHsH3YRf-W_}=e9Keax+PrP(WHI@}x&M90a83k7>%>olb0)jorrg2}c{fTtvKRu#` zbzNOu!NCXx2qeUQ{QP+rGR-4s1inEub8y{L_o8eYuZWe?J2t1t)9ay;hIP>YA5v1j zeIS(pz+vJ6JmF|H1ljt;Q=kYv#laEDAYPu8B{y0P5lArE4D7nHT#lf}cbL;B`aJyr zz0w4v=Z^{QT0=$$)Wput8v@-D{UakMJHT4{&`Y)kjHOWzs_`s`TlFq%oU@aEH842% z>_{%lAdE~%gKX&Xa4ncc+tbs4A6{K~#kRapCF9sd92f$L+-uKs({|v=*i1kL(hUpW zZODT(()nl6AM8X1Ys90J2Bmmvm5xAwL7 z;OEcc;BMlyxFnyHRx1s`sCFF_f7!Vy z^kkbucyTi8Y2iH90pJrjwSJ+oLM~ z1eCL9BOX`%_H728gGwo1Qc^OJ*CeP52DM!D8ZEhj&!rg2`0Ud~Ha~#;VJwzxc+6Lz z9~&R?GN_<_m_dn&k-WCo1ckBLiyP;WMZf;P7G3;*FS^6J_&#wnfq=Be?cpNyHD>QN zKw{ypI`grxP=QXY=*5eZ8;)%9ReFGZB_*|u6*inSmHsaF<1ky%+uIvre6`Or%K}E; z2^xT>CW)!#&$gRYoI(^T83W-{mD(D%fC{Ikch};uzR3KobV@}!arWJd39 zYx9+&rS8V!T1S-DNxqFB-+fbe#~%gzd+K_=u|a*6>$0)3^1FY?8NtB$NgkZbpU1~d z3=Nah(mp&iHv}Umlj_q8A|F=X`>u;HI<`uuBmgf#e5!bg zY_y=Jh0vb3qKkB0sY(+OEM6%U(8i8HW@;E)DBI_PqCXmyt&%5iJw)Cot%DL9YXs*kyYi zF;@*A5k!Z4vV2uNi4u$p`82fMfyg*K$fxu*R=Io*6-WvdTi@%2$(;lh_(-pkXjqZ9C~Esb+efO+rEfLIgn71K)@J5IE4b`}diPn!7=N&l(Mu z0SG~~hYE~YdV4xv`f#t*YS`Swgel&DzbO7T2I?d{(qXicM1v6pf^km3dO=a>zWyx| zBD)f)&amKKDEh;vgedjm$`Ty+vHt_t=Q!QL6r_G2Lg)imETp0mHvtN2z>h5X5uvqX zONsD!j*?_W>Gv3#q_2U0feNYy%M#&@x7b^p)bm3(avio?RS1klaUrZqbK%Vufz@VF z0!2Wb-;XbkzQI&7u5wlt5KO~^hkNl-&q$A}<5L$rxu)gbRQU(rR(B}KhIen5-}(X* zh#Ccl`%pQD3;Bf^<%^4pFi`%0D`Hp|f&`%`+|I$`4IL!LD13yeoGRf?YEQ}3l)cH{ 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 #BQ=zZAyI!F7XfO%S}b*AjE&=1~Ub=V=1 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≈oRGlw{A_kFg6q{o~!H_fP_$y}MISFFlPkKpZf? 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 diff --git a/docs/uml-source/PcDiagram.puml b/docs/uml-source/PcDiagram.puml index 50f693053b..19464944a2 100644 --- a/docs/uml-source/PcDiagram.puml +++ b/docs/uml-source/PcDiagram.puml @@ -19,30 +19,7 @@ class PC { - budget: int + PC(name: String, isPrebuilt: Boolean) + PC(pcCopy: PC) - + setChassis(chassis: Chassis): void - + setCpu(cpu: CPU): void - + setCpuCooler(cpuCooler: CPUCooler): void - + setGpu(gpu: GPU): void - + setMotherboard(motherboard: Motherboard): void - + setRam(ram: RAM): void - + setStorage(storage: Storage): void - + setPsu(psu: PSU): void - + setComponent(component: Component): void - + setNullComponent(componentType: String): void - + getCpu(): CPU - + getCpuCooler(): CPUCooler - + getGpu(): GPU - + getMotherboard(): Motherboard - + getRam(): RAM - + getStorage(): Storage - + getPsu(): PSU - + getChassis(): Chassis + getComponent(componentName: String): Component - + setName(name: String): void - + setBudget(budget: int): void - + getName(): String - + getIsPreBuilt(): boolean - + getBudget(): int + getBudgetString(): String } @@ -50,12 +27,6 @@ class Component { -name: String -brand: String -price: float - +getName(): String - +getBrand(): String - +getPrice(): float - +setName(name: String): void - +setBrand(brand: String): void - +setPrice(price: float): void +toString(): String } @@ -67,18 +38,6 @@ class CPU { -power: float -socket: String +COMPONENT_STRING: String = "CPU_TYPE" - +getCores(): int - +getThreads(): int - +getBaseClock(): float - +getBoostClock(): float - +getPower(): float - +getSocket(): String - +setCores(cores: int): void - +setThreads(threads: int): void - +setBaseClock(baseClock: float): void - +setBoostClock(boostClock: float): void - +setPower(power: float): void - +setSocket(socket: String): void +toString(): String } class Chassis { @@ -86,8 +45,6 @@ class Chassis { +COMPONENT_STRING: String = "CHASSIS_TYPE" +Chassis(name: String, brand: String, price: float, size: String) - +getSize(): String - +setSize(size: String): void +toString(): String } class CPUCooler { @@ -97,12 +54,6 @@ class CPUCooler { +COMPONENT_STRING: String = "CPU_COOLER_TYPE" +CPUCooler(name: String, brand: String, price: float, rpm: int, noise: float, power: float) - +getRpm(): int - +getNoise(): float - +getPower(): float - +setRpm(rpm: int): void - +setNoise(noise: float): void - +setPower(power: float): void +toString(): String } class GPU { @@ -111,10 +62,6 @@ class GPU { +COMPONENT_STRING: String = "GPU_TYPE" + GPU(name: String, brand: String, price: float, power: float, size: String) - + getPower(): float - + getSize(): String - + setPower(power: float): void - + setSize(size: String): void + toString(): String } @@ -125,12 +72,6 @@ class Motherboard { +COMPONENT_STRING: String = "MOTHERBOARD_TYPE" + Motherboard(name: String, brand: String, price: float, size: String, socket: String, power: float) - + getFormFactor(): String - + setFormFactor(size: String): void - + getSocket(): String - + setSocket(socket: String): void - + getPower(): float - + setPower(power: float): void + toString(): String } class RAM { @@ -141,14 +82,6 @@ class RAM { +COMPONENT_STRING: String = "RAM_TYPE" + RAM(name: String, brand: String, price: float, memory: int, sticks: int, speed: int, power: float) - + getMemory(): int - + setMemory(memory: int): void - + getSticks(): int - + setSticks(sticks: int): void - + getSpeed(): int - + setSpeed(speed: int): void - + getPower(): float - + setPower(power: float): void + toString(): String } class Storage { @@ -158,12 +91,6 @@ class Storage { +COMPONENT_STRING: String = "STORAGE_TYPE" + Storage(name: String, brand: String, price: float, size: int, type: String, power: float) - + getSize(): int - + setSize(size: int): void - + getType(): String - + setType(type: String): void - + getPower(): float - + setPower(power: float): void + toString(): String } class PSU { @@ -172,10 +99,6 @@ class PSU { +COMPONENT_STRING: String = "PSU_TYPE" + PSU(name: String, brand: String, price: float, power: float, size: String) - + getPower(): float - + setPower(power: float): void - + getSize(): String - + setSize(size: String): void + toString(): String } From 51ff7caa6a3b5777cb8b7029508abc1d884a01e8 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:14:26 +0800 Subject: [PATCH 303/420] Upgrade DataStorage sequential diagram --- docs/uml-source/loadChassisSequential.puml | 50 ++++++++++++++-------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/docs/uml-source/loadChassisSequential.puml b/docs/uml-source/loadChassisSequential.puml index b5afc3ac8e..a388eb9573 100644 --- a/docs/uml-source/loadChassisSequential.puml +++ b/docs/uml-source/loadChassisSequential.puml @@ -1,30 +1,46 @@ @startuml -":DataStorage" -> ":DataStorage" : loadAll() +hide footbox + +activate ":BigPP" +create ":DataStorage" +":BigPP" -> ":DataStorage" : DataStorage(String path) + +create ":Gson" +":DataStorage" -> ":Gson" : new Gson() +create "DataStorage.stringToComponentListMap:Map>" +":DataStorage" -> "DataStorage.stringToComponentListMap:Map>" : new HashMap>() + + +":DataStorage" --> ":BigPP" + + +":BigPP" -> ":DataStorage" : loadAll() activate ":DataStorage" ":DataStorage" -> ":DataStorage" : loadChassis(String path) +activate ":DataStorage" -":DataStorage" -> "GSON" : fromJson(String json, Type type) -activate "GSON" -"GSON" --> ":DataStorage" : Map -deactivate "GSON" +":DataStorage" -> ":Gson" : fromJson(String json, Type type) +activate ":Gson" +":Gson" --> ":DataStorage" : Map +deactivate ":Gson" loop for each entry in chassisMap - ":DataStorage" -> "Chassis" : setName(String name) - activate "Chassis" - "Chassis" --> ":DataStorage" - deactivate "Chassis" + ":DataStorage" -> ":Chassis" : setName(String name) + activate ":Chassis" + ":Chassis" --> ":DataStorage" + deactivate ":Chassis" end loop for each entry in chassisMap - ":DataStorage" -> "DataStorage.stringToComponentListMap" : get(String componentType) - activate "DataStorage.stringToComponentListMap" - "DataStorage.stringToComponentListMap" --> ":DataStorage" : ChassisList - deactivate "DataStorage.stringToComponentListMap" + ":DataStorage" -> "DataStorage.stringToComponentListMap:Map>" : get(String componentType) + activate "DataStorage.stringToComponentListMap:Map>" + "DataStorage.stringToComponentListMap:Map>" --> ":DataStorage" : :ChassisList + deactivate "DataStorage.stringToComponentListMap:Map>" - ":DataStorage" -> "ChassisList" : add(Chassis chassis) - activate "ChassisList" - "ChassisList" --> ":DataStorage" - deactivate "ChassisList" + ":DataStorage" -> ":ChassisList" : add(Chassis chassis) + activate ":ChassisList" + ":ChassisList" --> ":DataStorage" + deactivate ":ChassisList" end deactivate ":DataStorage" From 6f62758ba7ec4d2360f3599aac50284c493e6ce9 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:16:00 +0800 Subject: [PATCH 304/420] Update loadChassisSequential diagram png --- docs/uml-pictures/loadChassisSequential.png | Bin 29722 -> 38252 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/uml-pictures/loadChassisSequential.png b/docs/uml-pictures/loadChassisSequential.png index 7620a8ab407410aeb856baea410f0173951dd197..9586821536e3f1bceb0d58535fcab8dc21e0ad95 100644 GIT binary patch literal 38252 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

    9r2Rk0bikTNluLDLBgTiWbLR1&~J3LA=j#Z3?b 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 J6kfRI^Ix?T{G9** From 61a2c6a4aa90f52dce7e0ea80f871542dd192dab Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:20:41 +0800 Subject: [PATCH 305/420] Remove User from ListComponentCommand puml --- docs/DeveloperGuide.md | 2 +- docs/uml-pictures/listComponentCommand.png | Bin 36171 -> 36734 bytes .../Commands/listComponentCommand.puml | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b3a2e92eeb..3c601e4fb3 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -7,7 +7,7 @@ ## Table of contents - [General Overview](#general-overview) -- [Design \& implementation](#design--implementation) +- [Design & implementation](#design--implementation) - [UI class](#ui-class) - [DataStorage class](#datastorage-class) - [===== loadChassis() method =====](#-loadchassis-method-) diff --git a/docs/uml-pictures/listComponentCommand.png b/docs/uml-pictures/listComponentCommand.png index 40894ad364ec798e6d9935cd984dbae318b11879..518b04b6560103d8b3ba566f6d33ef8786fdfbed 100644 GIT binary patch literal 36734 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 literal 36171 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 XwEteLFV?nz`0(D{%JOl$4Bh@0hZjK} diff --git a/docs/uml-source/Commands/listComponentCommand.puml b/docs/uml-source/Commands/listComponentCommand.puml index dbf47832ca..9ca22e3204 100644 --- a/docs/uml-source/Commands/listComponentCommand.puml +++ b/docs/uml-source/Commands/listComponentCommand.puml @@ -4,8 +4,8 @@ !pragma teoz true hide footbox -User -> BigPP : list [COMPONENT] -activate User +-> BigPP : list [COMPONENT] + activate BigPP BigPP -> Parser : parseCommand(String userInput) From d9c4d710662474280c3fbb9159b43da4470033ba Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:25:13 +0800 Subject: [PATCH 306/420] Update getIsFilter to getIsFiltered --- docs/uml-source/DataStorageClass.puml | 12 +----------- src/main/java/seedu/bigpp/pc/PCList.java | 14 +++++++------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/docs/uml-source/DataStorageClass.puml b/docs/uml-source/DataStorageClass.puml index d1e8103127..4c4c61f498 100644 --- a/docs/uml-source/DataStorageClass.puml +++ b/docs/uml-source/DataStorageClass.puml @@ -62,7 +62,7 @@ class PCList { -built: String +printPcList() +printAltPcList() - +getIsFilter(): Boolean + +getIsFiltered(): Boolean +getIsBuilt(): String +getName(): String +getPriceFrom(): String @@ -84,16 +84,6 @@ class PCList { class DataStorage { - - CHASSIS_PATH: String - - CPU_PATH: String - - CPU_COOLER_PATH: String - - GPU_PATH: String - - MOTHERBOARD_PATH: String - - PSU_PATH: String - - RAM_PATH: String - - STORAGE_PATH: String - - PREBUILT_PATH: String - - USER_PATH: String - GSON: Gson - stringToComponentListMap: Map> - pcList: PCList diff --git a/src/main/java/seedu/bigpp/pc/PCList.java b/src/main/java/seedu/bigpp/pc/PCList.java index 33d2c58215..1bb4585ec3 100644 --- a/src/main/java/seedu/bigpp/pc/PCList.java +++ b/src/main/java/seedu/bigpp/pc/PCList.java @@ -5,14 +5,14 @@ public class PCList extends ArrayList { - private static Boolean isFilter; + private static Boolean isFiltered; private static String priceFrom; private static String priceTo; private static String name; private static String built; public PCList() { - isFilter = false; + isFiltered = false; built = ""; priceFrom = ""; priceTo = ""; @@ -21,7 +21,7 @@ public PCList() { } public void printPcList() { - if (getIsFilter()) { + if (getIsFiltered()) { printAltPcList(); } else { if (this.size() > 0) { @@ -54,8 +54,8 @@ public void printAltPcList() { } } - public static Boolean getIsFilter() { - return isFilter; + public static Boolean getIsFiltered() { + return isFiltered; } public static String getIsBuilt() { @@ -75,11 +75,11 @@ public static String getPriceTo() { } public static void setFilterTrue() { - isFilter = true; + isFiltered = true; } public static void setFilterFalse() { - isFilter = false; + isFiltered = false; } public static void setBuilt(String input) { From 5419481881854d0c436ba01db15c330bd32f9ac3 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:38:08 +0800 Subject: [PATCH 307/420] Rearrange Developer Guide properly --- docs/DeveloperGuide.md | 47 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 3c601e4fb3..6cf5cbc533 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,24 +6,25 @@ ## Table of contents -- [General Overview](#general-overview) -- [Design & implementation](#design--implementation) - - [UI class](#ui-class) - - [DataStorage class](#datastorage-class) - - [===== loadChassis() method =====](#-loadchassis-method-) - - [Parser class](#parser-class) - - [===== ViewerAddCommand() method =====](#-vieweraddcommand-method-) - - [PC Class Architecture](#pc-class-architecture) - - [Command class](#command-class) - - [===== `list [COMPONENT]` Command (builder mode) =====](#-list-component-command-builder-mode-) -- [Appendix: Requirements](#appendix-requirements) - - [Product scope](#product-scope) - - [Target user profile](#target-user-profile) - - [Value proposition](#value-proposition) - - [User Stories](#user-stories) - - [Non-Functional Requirements](#non-functional-requirements) - - [Glossary](#glossary) - - [Instructions for manual testing](#instructions-for-manual-testing) +- [Developer Guide](#developer-guide) + - [Table of contents](#table-of-contents) + - [General Overview](#general-overview) + - [Design and implementation](#design-and-implementation) + - [UI class](#ui-class) + - [DataStorage class](#datastorage-class) + - [===== loadChassis() method =====](#-loadchassis-method-) + - [Parser class](#parser-class) + - [PC Class Architecture](#pc-class-architecture) + - [Command class](#command-class) + - [===== `ViewerAddCommand` method (viewer mode) =====](#-vieweraddcommand-method-viewer-mode-) + - [===== `BuilderListComponentCommand` (builder mode) =====](#-builderlistcomponentcommand-builder-mode-) + - [Appendix: Requirements](#appendix-requirements) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Instructions for manual testing](#instructions-for-manual-testing) --- @@ -37,7 +38,7 @@ The program will first load the `UserJson` and files in the `Resources` folder t --- -## Design & implementation +## Design and implementation ### UI class @@ -140,9 +141,9 @@ Overall, this class diagram provides a high-level overview of the components tha ### Command class -#### ===== ViewerAddCommand() method ===== +#### ===== `ViewerAddCommand` method (viewer mode) ===== -This Sequential analysis will show how the ViewerAddCommand() method works, this will also serve as an example for the ViewerDeleteCommand and ViewerViewCommand. +This Sequential analysis will show how the `ViewerAddCommand` method works, this will also serve as an example for the `ViewerDeleteCommand` and `ViewerViewCommand`. During the ParseCommand, when a add command is detected in the user input, it will call the `ViewerAddCommand` method with a name as its argument. The `ViewerAddCommand` then calls a method to retrieve the argument.The `ViewerAddCommand` checks if the argument is empty and throws an `PPException` if it is empty. A `PC` object is created with the argument as @@ -153,9 +154,9 @@ A UML sequence diagram showing the interactions between the different objects in found below: ![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) -#### ===== `list [COMPONENT]` Command (builder mode) ===== +#### ===== `BuilderListComponentCommand` (builder mode) ===== -The `list [COMPONENT]` command prints out a formatted list of all available components of type `[COMPONENT]`. +The `BuilderListComponentCommand` command prints out a formatted list of all available components of type `COMPONENT`. When the user inputs a command of the form `list [COMPONENT]` in builder mode, it is parsed by the `Parser.parseBuilderCommand` method which recognizes the first word as From 9503f9e9057bb9688eaf14a170bda2fba807e94f Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 04:38:49 +0800 Subject: [PATCH 308/420] changed explanation for abstract class of UI. Used connection instead of interface --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 55284151a0..eeefd8363f 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -49,7 +49,7 @@ Below is the Class diagram for the UI class ![UI Class Diagram](uml-pictures/UIClassDiagram.png) -The `UI` Class serves as the interface between the user and BigPP. It is responsible for the following key actions +The `UI` Class serves as the connection between the user and BigPP. It is responsible for the following key actions 1. **Initialization**: Upon start up of BigPP, the instance of `DataStorage` is parsed into the `updateUI` method of `UI` to give it the ability to access resources for BigPP. `UIState` is set to be `PCViewer`. 2. **Functionality** From 578f432ae2575bde0d624e00ac9bd36c060d2cc2 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:50:03 +0800 Subject: [PATCH 309/420] Ensure all Class in listComponentCommand has : --- .../Commands/listComponentCommand.puml | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/docs/uml-source/Commands/listComponentCommand.puml b/docs/uml-source/Commands/listComponentCommand.puml index 9ca22e3204..b382f3deee 100644 --- a/docs/uml-source/Commands/listComponentCommand.puml +++ b/docs/uml-source/Commands/listComponentCommand.puml @@ -4,43 +4,44 @@ !pragma teoz true hide footbox --> BigPP : list [COMPONENT] +-> ":BigPP" : list [COMPONENT] -activate BigPP +activate ":BigPP" -BigPP -> Parser : parseCommand(String userInput) -activate Parser +":BigPP" -> ":Parser" : parseCommand(String userInput) +activate ":Parser" -Parser -> Parser : parseBuilderCommand(String userInput) -activate Parser -create BuilderListComponentCommand +":Parser" -> ":Parser" : parseBuilderCommand(String userInput) +activate ":Parser" +create ":BuilderListComponentCommand" -Parser -> BuilderListComponentCommand : BuilderListComponentCommand(String arguments) -activate BuilderListComponentCommand -BuilderListComponentCommand --> Parser -deactivate BuilderListComponentCommand +":Parser" -> ":BuilderListComponentCommand" : ":BuilderListComponentCommand"(String arguments) +activate ":BuilderListComponentCommand" +":BuilderListComponentCommand" --> ":Parser" +deactivate ":BuilderListComponentCommand" -deactivate Parser -Parser --> BigPP: BuilderListComponentCommand -deactivate Parser +deactivate ":Parser" +":Parser" --> ":BigPP": ":BuilderListComponentCommand" +deactivate ":Parser" -BigPP -> BuilderListComponentCommand : executeCommand() -activate BuilderListComponentCommand -BuilderListComponentCommand -> DataStorage.stringToComponentListMap : get(String componentType) -activate DataStorage.stringToComponentListMap -DataStorage.stringToComponentListMap --> BuilderListComponentCommand : [COMPONENT_TYPE]List -deactivate DataStorage.stringToComponentListMap +":BigPP" -> ":BuilderListComponentCommand" : executeCommand() +activate ":BuilderListComponentCommand" +":BuilderListComponentCommand" -> "DataStorage.stringToComponentListMap:Map>" : get(String componentType) +activate "DataStorage.stringToComponentListMap:Map>" +"DataStorage.stringToComponentListMap:Map>" --> ":BuilderListComponentCommand" : ":[COMPONENT_TYPE]List" +deactivate "DataStorage.stringToComponentListMap:Map>" -BuilderListComponentCommand -> "[COMPONENT_TYPE]List" : getListString() -activate "[COMPONENT_TYPE]List" -"[COMPONENT_TYPE]List" --> BuilderListComponentCommand : formatted/filtered list of desired components -deactivate "[COMPONENT_TYPE]List" +":BuilderListComponentCommand" -> ":[COMPONENT_TYPE]List" : getListString() +activate ":[COMPONENT_TYPE]List" +":[COMPONENT_TYPE]List" --> ":BuilderListComponentCommand" : formatted/filtered list of desired components +deactivate ":[COMPONENT_TYPE]List" -BuilderListComponentCommand --> BigPP : formatted list -deactivate BuilderListComponentCommand +":BuilderListComponentCommand" --> ":BigPP" : formatted list +deactivate ":BuilderListComponentCommand" + +<-- ":BigPP" : formatted list + +deactivate ":BigPP" -BigPP --> User : formatted list -deactivate BigPP -deactivate User @enduml \ No newline at end of file From c479fb44f570c7e52369a71e022fd48f39c250f3 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 04:50:31 +0800 Subject: [PATCH 310/420] Export new png listComponentCommand --- docs/uml-pictures/listComponentCommand.png | Bin 36734 -> 36511 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/uml-pictures/listComponentCommand.png b/docs/uml-pictures/listComponentCommand.png index 518b04b6560103d8b3ba566f6d33ef8786fdfbed..02668685081ccbec84b2a4748da105f10e7ea44f 100644 GIT binary patch literal 36511 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 literal 36734 zcmd43RX~;7_XWDK&|@G-sDLOTDkUOa2BDzRT>{dvr8`Un1O%j{l#uS&G>UWz(%rr3 z&O7(UI>&Q<|NC$s?s<_TxW8}Bwbq#;tzz6|8@2+1OjpV?i~S11md6%0)bO; zcpv;tye*dj{BhY_P~Kb<`Pjx#OWPbFtYxfas&20J=)8u_d0lh!$6QQIj}6t0%`J=! z88wkc_*Xf}5Qu%}^`zy^fBZcH2R_C+BuVZiwk6NEfm8sEW%2Zgo6cLvg%$=)e^4cb=G}kv6rj-EW6(;+WKr?n9fmSwRYmnMF!k6mik=` z1bpfmx=IVXkzWofn+)P#?n>uK)KAjPS~h#{9KdG#ve}%lJ#ypP6-?TFW%_oHVn%^i?796*pVNwBOLxQq2@`a;GVgiKnO3Hymk9Z+Ylt zur>cBnfQFOk2t#X)IgTBrG^4owU`|Ft`bvB#zr*Q!2X8*_ z{CIE`C%=SH}^+0Qj-o`3>`us zoDp{gZc1CLPWK$QmMIHeGkJIfiL;O3(;EcNZR(qcQ~r87o_@(q(kQQWrO!x4SK=^1 z)T=c`)`+#2?+@-9Pfs;}a_B>Ia=N^Nn(jU#x`^{nNABmjQeSu;@czaKe_iv0wd%!y z$1_!&0kdO4E;=){A!ZFhi=s2@$5(rsx%b1#L?BMySx!8T{R;89XUyOLzzQ6uVD&!3PBKZBH0=t<3g0ap;c76)Wayl>Id|K>6_? z+u7w?kM<#^Z_N`3eK_!;*_y6Q?3AFNv#|U2oP72xe-{eJZbzJ_;(WVXbG~AHdc4Y| znV*CrRbSmhIICPzExGje{M)n0=rz5FSb{m-G>UUI#ElDIZ(GJZ&L9A|b zBvSmTcr8kD>$=1ee6V^)39W@=^zkyX$XC2KJ%tKS1|bmcsRhp^F5SE|ie0Sj5$nuU z!vSBe;-;4xo)V>D=Y{uPQ&1lJnuLo-&0KLwL+robj$Uak zsy-$2L!c&M8f|4`ED7Z)#6x_4Y=q0~v4LX3@gnwTu$LT@>lCkLc56R1ytfglhigPn zzaV(7QRFum;~Ej*EPS+vm@jUT&gjzUX~F3urq?H5R31RcKOdoaee1|A=01`6Zvu^? zpCVsq9Sv_@_hTb8dri4=fOBtm=nEW<*ljOcO?!9;n052S(^OUv_nOXR*v{B-B)}sU zR$^QUwlq!@?>)vOziIh;T`=l2+w?nBpQD;ZM+LXBQn8~$8hW*8^%;ZGjV2y~px@CSvx3uvb_Ee>n2YRRh_gK$^{$S#+>>i(4LK&cK|ulS zE}X=?7fTH$U!Tb^&KbyOwd`=moJIZD<=gnrJ@ByGB(Okmv3hHLwC)s{j#ZS=~tJe+&)t?NN4{mCjc z4x1-V@)J(AAvYGo@!UQiJeZ;S%aeRJW~DzzNtD@83l=KR zh95(3%Ehb~KT^1A`D)BhN}a=CQA*hK=}V2?$?nLqq`gp37BmgE-E=2rK&x2w@g`YJ z9py5=6UMjAiLxf*@0y>V{}Bty*FwC8y^fpP2`NQ0B}aV+2hT=Ft86XQ)HGkDlPd}f zY&Y)z^m%aL=|NFaw$}#TId{YPwgvM${SNmZWz_waZM11JbP?UFGMbaLcX1D^m8{66 zD8CAzR^vc33=9RbLiHdv7gw(xNL#^_bEbMSc2}`;N;A zEni&J63(ewv^;Jc$8LTUC9LU?#FV=ROZ%ad0Uzme;O&agikEqotpwc3rj8plcAf zmA_%ff)0Ld#LRE|NAK}cj+wRH=$@_Z>gJ4{^!2kVOx4fu_;%*Lh}m!GrCq|~d9%7b zyL-o@QEj?AtPHK)fM%6u@?rcI2RHC--Z~K9`KTxFR*S{wgGQy~FSQB| z_ZtnaHn8I{6>)qqQL@7pNbiE@L8J^R8Y?*d%)8rtNQ=q0XGz+0+fxk$X3}hzcVpEz zMk({9!XNDRKU1lyB8L!=aBnMg8?SV$-d-MD8%&@G9yz_leb@U&XIIaOaz05S)Hh^j zX55a}0eoYc6(%VWX2FOey>FH+$yY@E6W>}i(yd4ho#?4=Hu+ni2m3@Bt89lnC?)Va z-tizRc$EfQ=a9*L^NeAoYSQ?-laXx6TKS7qxl7Rw(nGRjgC%A~f_Sceea+pD ze~Yb>*3l#R44Cw4+_STjAZ+1Ep}0Jgg6`sP8AvIo0&aq2~IXIB4vb)AmpxbEL*i>jY3MnHVNpH|`?Iv15w>!smD0>Bi zkLZsvsgDYwUHcVu$U@GNX({ z_ic7$Z$UXZS6E!vQl5t#k*Eq&Jg?6bC){_|w_xUakc>Mhp3U z+sN&W<=xHVzVu_3+yFK-Uy$B~dLO6Ggd#lm?%T#iDVI0!S zeGA^x;!fjig~mhVc;%@^)NO*#pWIO{Q+LntaS{{vFmWeFeM6BfCP`EC-yfyBWQ#^l zFkRV@-z5{aaG&DLyFaw^%8Id?VrNcWR#wgXv~ar87ugkNZ;~$;R~YR?sa0%Kx~>-X zkU6eM=IiRUCI;;Y`H1l|v=&P=Iv&H{`PzZOdH}-w>6T*n(V0%Y>1xHIEiNgt$@Yci z)~r^)qV|d;c(u3d!qiJK>iC6D17rf@d_0w^=Co#aw#**z*de%BeEdNxl?{;@>9>#f zBdP~h<@(-oJKAl~1U#Cc5EFOO{c8HqxM9#TV{GN@r2G(H?FREV zpRF=JuEgo-ntGZo&8kC*a-zxZ$EDUMVHk9Yg>%>j7<8Wny7TzHGx2W(84Y!>s!Ia4i>3~-TA9u*XFI53|GxglG*@i)H-h9<>jx|K_OZKnOZ>sFoHD2zbwaE%?&O^&zlN^d`K67}!g>6}t zbGp$FZ9-U14H53Q;@wX~bdGXEvKu?(QxTNfDbN;2ygug;vr#HQ&D~6qcR!`ex+bx6 z0<$Btg{YzMor&;f9cJl#rOakCPArNzTh&q^2`@><C z8DiWFG`ozcj+_CyOBp{u*T{9Hu2;eD2Kj4ESN#RzErRulU}SW+<2%Ye{<1NG7E!5u z-T5R;!)=z^R1;9#nIIQ_@&3C^JzoynrO=JlTQ-uImo;N-9M}2L({pzbpo0rDt~}v7 zT|v+?%&Ytwka39X zVd#ecixs)1S)S3AjYg?G<6@$dO;jwj&02np|7{=X9_L~C!5YhX=oera1CdXWWscU6 z9YwXYM!t#hZ>|loEG&c_dl1CuP!2c6fLFFO@8NeMCbGX6ON4lLV`v0#n*PQ?YxuX% zzd#AYH8>?6^Xe`FQLof}=zPH|RSIjqD)`>B^+;jo-GBSW7|A&f;ZkY@VvNCf|4CJW z6g-~rNB#^YpBInfg-~e_Ae6b+2&|gcuu7h7YVu($Hm2&jn+0E3hT(XngzC{(4Rp`_3`I} z{2Ps4I|~8DvB}U3(5vK0lWwx_u7~el?$lD@a~H>uGcMs4GxT(g8!Vt&J_x`F!WFK{_q)PEa@yNqh04VsQLKFbN4sOjOjX=ey&LkzLtFQ!NQ{ zj*dmsSD2V~8@(KtKI2k^aF|3yL=3VQuh*fWb6J~H&+^^b-gLLjO1SNEVtKkl3a#wq zUtL|jzBuNzyV)0jXV9I&@fy|?S4Y08r`}#Y|3UL8_Suh5=@FBw7opkiAsg!ILirr> zY~`h;uRr{RP$*vQwd-?ORcWCKffc?WQGH{P=34>qyo^Lmx-eo2Uc_8UgTrJ{U~#lg ztFWB60Xp%W%~`oZuyCnV>I$d*2UuKb&7p>14pVq&5f-$tdQVN+wI zFjK+YErk@5h8VH%b5|dJn(4`xagWx}`NzVH#D<0j2S@8e=@wR=K7E>*d0jN+MQ<-q zK2*Y(Ot;krz&dkeHRJXIHh;H(fu{7|osFxgA zzv{zVygnM-x7oY8M68gOU_w{n;>m!&@UIub^SXQX@MKAgoEk6GH1=NWp|$y;6?I}; zyA18R`1ttDdMDk^%!xRum?i&|qKzwje5$P@55nvhs=}c#Mo{iJEHw(tsqy%X9p+oIlXq3fnz$=Fjs^RTqKQ+xq+r*X0Cx zXRHL3_ZD;^9Zd!wP&(S$#(hO9yovGgibeLhiL2v{Ult@z%+vGQt-Q6!_3g>GLK${Q zW}M_$EuTuI^3X+_H6e@hdbP4t}%9{eVQr6n(p zw#ePdi5{`tjJoT)lrl_z>C$N)>(oU4xlj9%#oO7F1iiLXNkDRlx3)YubnNuwZ}-`? zw6qjDd&0KwmD&-{Kw8W-8xu+w`y%V(pkycd{9o_9F!p%W*47fy$%b%Qh&Zyx7!vvo z4r(a0O-yWr@!EA}8NiCt;rtu5r+$Dx3|bStRb22WiqP3z*+7M8u}Z90i8)5>21zR5 zXPloDN5)u-!va(-Z9*1)$ zo1{oXip(AH$Mnj1^*+hS_Eh!$Pfs)+DJphG2)ZvN@5eo{HRr-#(Es$PBFdQI%HW4d zN$!qfCno@G{F~D(qWLxw=Y4oZ-AR~QSM_4@cGBulC?9$}t(vB2QMxNv=+UhIe*UsY zTO>5Z`WwVF&i!@tD9g2LrlzKBMxBq)hp?CaY`E+x`Rq5tJOy(lM?)cE4<4N3G9Q0> z@TmU$=w4o^$K^}9I3AwFft>KYYBAXy6&2;Q9^kb88PD-eSXg~96ZV5rx%&bLCciev zNiij|J*s@ug)DZM>;GJ^zIX9MEjn&pY?@OWs}F@>GhUgPn3!ryL0NXmGm`bQG!*ON zA`s6H{;WLd79IPFF4NObH$}TEzP$6`L49RqAY>$a)C(K+lJ28xpBDKI4j>REPk*mT zc^^^~sA*}v0IxyZHxP>@&vQxUo{Sa0Mj&p;KmM&UNZ>*+xGkrx2VRg&B2!YYGTjTb z!=bR=sX6?&_karMNJme9PgFFcxUi(8;Hvt}LHqu7CMuA4h<`7+Yw=N0k0zR;J%9f& zL2d-%JpJDa&n4_TVIt<-{wZDXMi9xx+CppqOAq-o?5oB;0rUUo*-{Ph#YbNpG24r8 z+7m5z=W9P+^FKcsR_oOI#~N_7R0FTB?&F)=3cyDo4j=u!^nZWmzpm=Q+aJ+Z6Z(&( zzysAXLG=3jPVBvDq<)1bd7GM(1JKZtQc`2JL7M0jFKw51@Y|Nj6vU|?Wknq8XsW_s`LUDvZI-&Uni1zZFcAKR48JOYD|R+zJNqu<*1=w~xb zWROdQ*aAtfkUspk3TYvZ7{BXS?6}Rh*1umO7m_t_7jPj>HkKyR)6=VbX~lxs?t9+7 zcTalgSyh78QHzfn4@zt8^G{(yzpo-#`EVEuCf1R(?Ce(Xk0#Y6BpM;-W$wHezw4;3 zJ}?rX#yE997(=?oo|RHo?#?z+QdrfOIB#3Pb<2VO87>~NocI)+P=xcR`HLh^$7+wB zGA^XN>@X1>pqQy^Qbr_aKVL?YZZcHv@$ArXH!m+S5fQ}#>$J0+05N(C?c6uwWfBGl z2j5-SGwsj{C|s=PHoXBE(bCfL)~%BJ>^9Zki_>vTT+DQAHcDK#e zLtg!H4>~Ti-8z}WaPJOg<9i_dL6fU|?G+(BHj-j$ElxFR4$Cc(LLNY{vU^hSCm*t! z=~j5u7(v;j?TxM}haHoVk%?o@Yi^cazvvDy1rl$i&@#P-Tm+-1NR}|i4HItbmcX}f z&HF#$NOTn1q4W(~;$^h7q7#ogZBMDWySaT73uka_GCgzy>!aH z*j+a!I=UM8ufBc;a&=fye1p|1X`At{A3$S-Q{7i!lVNDsonumne8t!i7!;K2uxY74 z0>H+8WFJHR)mzT6+VT44?`)wnYPo&zd_E>pSj&*$79jihB%n|i>)*R~k5KBulu>8q`a%tp zmI{aCmNf=Wa?gmTaI;xXHs5u8syW+RxPcI4_4oHzJS1?f%TsK!RkwJ?vmqJD*x3@` z)B5y}V#PhIcz7S`#gVEcIqGOmPEKJ@GW;i|Z7Nn(Lf#<&e-G~k?jP8euwkGc`j zJqYEZDQ1vl>out$SIRcTw{diI+@WYk;zmNs#>UmObK3g za``NtYDXM}l=eXghr`BFb+w4e46Jrq_FkMd7juyQjo}RRT9mQJ%GAu-^hS_d5N81Y zfuTRD>4{w8r=N_}Z<$UJbxfEw@U|7$ERrG%BphPCRQu5}6|D`z84hC6;nFS^6ckiY zP&iJ?_SQAoke-Q&gd0D9vI{kvZPeA=4}X1(j3ZScLt9Tz4^x8B(15``dhO*!fvG(; ze_Jgc1)n`StIf?D`gd^;t3C%*;7J7%VT&G%wk-XY_?yoTp}SDwJT?oEu^zQCpt>pR z@3fLz&9uwQ%31=;{V^(vkdTnWvGbOrfi{%4vAW=xY&ZLC^6=)QM#moVa20;3v?|`! zZmOxQ{&f;GREE_4pMCR=@L$hwm|!#IatN_bJc$Bh;gY05LRz8Z|{#L74!rh?xP(OW&lYEF@7SUzS%H+FQVsl9G~8Z$}%#8}E!HfCN zW?vN!%_Tt~N(maw2tKj@;7;~cha7lk_atL^c6VpC3iLQG^RIoX>gt|c80hwjCTxt_ z8To^nIq;VA$o18II?<`AklAKdP;&CWUZW3%yY})2+i@ev_l6nM$y^^FABY)O5x`F} zi&0g~w#SlVpd$9Ey5HXkfzWrs07T5P&!4T8(3!!Qj+{HyJ1F1R-hH1-^6HRTbC4az zcJ$s-KKt+`GXmY2gAt$iKJug}&u$U#A4~f2;jrM{ybFJX==!fW|Ca#%fArmdi^=iP zSe8{R7DQt~GWFN)qXN%3Cu<9f;$rkV(nl)2si2tZkw@Wwp(hH}j0}der|h)73V4pLQs#&z~PCEc4J@ znQ9-u^e1-Jk(QUYULOglu?3~X>l|-RpUR%ArskU7DshYOsp?m%iS=b6sJQ&5*!4g4`I$IuhpbK(@oBqkkh z^Gc5;uy=;1B_>YCCnW3l6>W!bnl;}E?Tww(vGAkf@v(g{ukB=M^DcgSeJq@0F|r(i znEw5`xR8n*c=CIUu6+TZTLEn@anJy?C0d$7Lgi4n#6mdc0T?8#PP%)Wjn(s7&%KXz z7m#iiR8a0w6K(lp9haFHy$EEB-pfgG@4!(xoWwDaViwxkrpPVYb z&e;J3>Td8=^{3X14pBpA;{F@{8Z|YqPcCXZm8WS|6ahIfc*R}n>*{+BRrid%YW#C| zd1I{2>@5rDw^#ed%qS5LN7vQZ57^(vvcQ%(9|TSYV)GaFu3n+!?B2t_=iAviZ5E=! zgyMJ46>m%?2z#7eE+<8j@jEIX2l$^+sVyiNl|nfst5oG?k1BI#Dgw-?H_X<{4Klx*gTUb=AGc;LTT2oyOJC&Z1k#9Z` z5#v2+Mog&%g+Uka{@~CM*Z}BB;pQmMl17Lc(a<$PjLGt+tK#FY8@A64SNTRzdP?o> zFmPFbJ8Cw9CTE-FF&v${(a0E6Y4JurqB+|bSNmK)o8F4Irw;Ym5mV8^$Y7mOls@6JvaMJb1cLjwI`+pY_PM>zzY80Y zJOAdw?T`0@7GQC3I$M}M-U7T!dpvM!SpcftHPSYP>?@Zq-xU!_H}~`R?+h1|DK%b2 zchO$iT%Bzrt!n_9mwKCy6WX~$c<1P+E?>U9&_nF!=LgFQ@bC=EP_;5_o??CQZv8dE zsZ(V%ZsZ+DGI~22=wXr>VdeWBycf{-ek{KCltW5)#a|OS%=; zud%S0mAMhYbA0+bFOhE!ekX98tRx96*z9hvioLsjmyeLttxoU(BU>iF zd;Dt(en+sEX`rw$nU$~Y|Hj#!D2qfa%BHQe7y1`qO?^?AdR>fn`R&Gu6U=%*m8Z|- zKBH5p~ifO^nio| zUemBOQDKkfl(qw^0c!Km(2(%!(-$VwCHh*^u&q=GT+<$h)t0FU_Cj!C%74d!39T4t%6z(N<^4pYmrS_~|9^xQkkx`5wdGw#+k0_1dqJg$y` z-2V5#H8Xk$Tz~Yx@%1ZqW?F~Mm8@(4C+}xMmKn&m)PIY8Go^>X+k*cCSmPr#9<(N_ z7+_zchjU7aYwgS5pdO&HU;7J6+%M2)rT$6Y3lAnEDi({45C0A&7a4z~sSSE@-2I3f z)AKyEIN!6iHU=Zw1pL5=4#cs~a1iHLtbbi4kkZ6Q3u=C#EWV@7pMe0i<7v2y=sWpC zQ@do=tMvm?h98`K2-uf5%&G6(@3^r(zqarO_8?AW+#tu0M9yZPF*N8uUl4)lSH@zy ze?Ap~;2@z_0vJ7eZFS!sC{YmULIaf{vSVN41kA!dqNBtaG-vZ z9L~9J!5iLSu-N70e*=*pqYWKJJ zov~#%>NJO58XEpMvn-IKge~d@U(dtCKIJa{N6pc6^)XNUq03fdZYGkGA%VI#g^UO$5mb4+^~l_11(3tO8je>+~S(9}dc(Sj$Q zx7lesj`RD``|-W=hv=2Ex6&%kfw?v2QrO$eQZrfXlHJvyUa=xocYyg#GI2e*@Q-~^ z2*(_Le+K8&O>nhhEjXL26d%PW;|q3o>Oq?WrcSPPT%i4*cOtO?R=mH4_(nVL*4)tM zicCAp-M`8j(zR;pp~sYuJf%MLj~&`uBE1qqef8^YuP(DYf0gYn)Uq^Se|CKpjq|;F zVK@BO$EO+IJaT7#%V_|CNb|tlc^wB#qX*i0iKo_4ksDwFK{#iW{0buG2^HxFY0iV4 z67fj^+Xwzyre?=ef;T0g$M+{l%U45oU(w!yHX% z5>U7sDQ4Q!hBl^Bkc|<7`udZAl$VmvA01K{Z_@%kflBE0Nk7nk493Q zwhaLB11io)PcPyv4buE;5}KO@ZxIcRi1-7$noAi86Ym^wKB69Er zj(Xx-Oo9vWQTq=a6UTc-|61pRXKrfh93cLHWq|4Dcx|OUE;BM3cV#Cfwha!xl=GnF zww`-vqLq}?_Yf0_!F4qKR)wIzcb9@e4$dtVlbQ|c?^nWpd%2B>hzNx5aj=XSVIlDz za}Rv~dXp$qTseduMB(Spp9dS~Vd|{DFR)~Qn3VdIW6sJYDH4&8w1NCu!QldK_DBJu<|7d2_w%iq<5i!?N@G4fz-IeXr-_*V<4 z-rMp+N-#q$X1!h-ps&Rg(!H+Gy0OT5UL(tI`!yNU)Su!4VGU=iS>Cv31BOLwk&(+n z_BqyvaOy|Zqx)NS$XDObiXg9xNuwEKd5vF;g*&O%1}Aov^`@7BB|{VW+JoRrOm?`I zd*G*^aU-8;IeEZXAslF@h|eJHs6Yk_pjU{<46`&p zR8b?8hTan$xTpUiI(VO*`=NMLLI0I$BX{cJy^|grqsC(f6lc&GSMe%;N+6}ir;69j zpADICsmd-N!B+ldz(JEErI*L; z#Jf+ZqWetn{GUk>Eef>EJmo4!Z_XAY*Fs)(r3>=jUmRt4c|3m<+#x8u3`32$oa3)j zb3CjJ0-_}%%QwDw@%OTWrwewQU9Txh*h_VN-5nkLJi7E#+?nLiF;vDJ1quFlbB|?? z-0hRU-%Y`yu0db{phw9xpRll_xqNxz)06!X>2|BeE$z8xI^GMeZk4oxrU`5k$VXqT zl4Hw(a<^@cl|UBEmqYZ>g}1;3At01=ZW7bOb)6EBe1~n}q}(G3mKPRG!JrOd;F8*A z!)28lRjJBL6mTqRGTXcBRk6?!RFP9 zh-{D4o}>`8wZc*o-}*4qe^31=y@ITiR-i0+` zQE?&wLj})Xz5-&9pZ=auGR`ec@idhuC0b(G4MaR5((;N5tYd@j(RaTFVb$)!NR5^X zPuAA((>1wWCXw;xW(l(m0&O`azNJ^Q2CDs1XfI}yay(Amc9oVuA0?(YYQLHc6GNa6kdRh0 z3i5_}$?-|Ceq7~!g}3++tqd2#>U_1vw64}yXeaod)jPLt(aj4SCD{=<{%-?5Utpf&`_xcT`1Z`=LyFn1xFFnu?UhYAHHXlg_uzPM zYGQ<2to2f}7x@}TR2{5qk7dbzOCJ}`))3Rs&;a=JPi|_GltIb)`1<~8ZMB*bzJ=E; z6nJ_7u_T}K_yd<|p%q3s3Q+i6Ioc%rp&a#uDe}Vz**rQ*D!$jcy9h#`v+c0hlPG zHSMXb6_wshR9F||VFotJ2L=bXYFUa2Ewa=tR~R(5%00TK#iHEwNhaoD@@sYaazle! z$h*##COQ!q3c}3su#xCc)8X;0t$o4cpPz^+i{P2N(Yso_OO@p^>$ti(m?*ff4^Dy8 zb{mCp-_ANr*j)~LaD2QqX)_pUOz841nA>7$oZFy#;Qh_py|xA!*7^?oFKr%^%{IV3 z0aH2!qgX_=jGZwL9AZ`SkG8z@te7U=zp{r~s zYUG~DxqUoCu6$3$^8V~e%Km`W?LL@%D93N-62-2qt(`2NHVF7)f%}A3 zWGpbEHUDiD!ir^o?TKY5xOBi9k3p#&?A=bzpYieVp1rcL=&_>EPP%LhI{j!}Fqm_M zyv`Z*R?nwnMs%SKNe2ZD1*5*VDIAu(U%i1AnP*QzTQW26&ea@(Dhc$ns)EAhdKHTI z&DL|Cc2`}}lnO0LnwgEuUZ2^y@mjs(7BGVj-kJ%FHFr=VDXI>=c1V{*$aq3os}tXx zy0W+R@krD{KCmgHlEt%>!YX?mG1t-(-AX3{uK)u6!@g(ql#6}oBMs?0pKu8Dvj@lHUWD5vuuW!%pP=D*D#?Ff6{e}q2QGwR7 zoieR>6PFG3*zMD!pG^wlr@cnu;=D?S39;eP2ZaMKXDuh+#v{kAYmJ#7!UO=ggsb^y z+)iHlacz9Hj^0_$d`)P~X4w81<4aL0)ZUR6q^@_s8;jkuGc9c1#65O8)nrI$>J_p% z$M8Z8Bo9E5mAy2Q%Dg67(o1h;rf+7s^QftXiI*)z8DCEBEizUa7%V%uy@`hzGblvC zT=0t*O3Oz4P(95?xAGH#bh{NjPB~%>6P*rto)!}Lo8HTq>9`Q>VKC{3p?TKK^jCxm zcb2{}ef(${%B;EajN3bm{Vt*llv2Wr>Ug6l~NfQ+tnFbwztbI32kwf z-lil(4vCf#Zc38|=Pp(oq!b!CSxT6i#f*;dMtTvhuk?SGtH#dlghz=xsY>@f(^QcL z-yhx7pg<>Tce7R?{r2`iNBuMY7;R+pl&dSc*@e$>chkd@6b3~!KB>a|Cyuhf4}-PR z*sm6EPMp`DfpQVrE({gjIr##(F&Og50$~Nf!{*jvLsAbu$11ONLTaiw**#3}Z8f{o zuIW|9t|l*#Zg_#9|HvuFb|99)EJUWARY%E-V#z+7jshEZ%%rC83Sh{# zEQ3xa$N8wr5EOFPer5V#l9E~~oWx3RF~0SJokBmrP16li@-WQn;qFTi^TwBD{UvD; z>H3Lf7aeZAosf5h5-Bj4N)%wxmh1yOqSCJ0eUzr9JC5D_mL>7d5GCbzdwVw*?pw|& z(El3Y7b~263`#a2<-$}&ATXEP)ONurI=TNCv}pkQzfZbU@@NHYapMD>cv5dslxaJF z*Q7;C%9{m%$*D8TnqIs~ovSmv*B!TdBAEI3z(Z}oj@;SY?d_6M<929AIxfDf3?bdA z>ywqlP{w7(!K?-sDTs+2mO^Lk#X_FyPV_nTyAc&jZIZZ{jD?}u%;whQ14oBg(y2d>|9;2c|+v%psqKzO)lA{3|sa)0&9%q~9qlMa}hpd+~jekCAbau}4vkCnZ#lhRk=DGq(HoAc_Ic^^ls zegng|g`m?9I&-xF--1si^a|?t#>VoLLUybmbh>A;4{G@BHeu*2#>C6CnQS-`+OAw? zC*RrO2vh;w9(h_OBd4ab~k)EifPRZ#08*Fpmuw1DZf%bzJ*G z@i8W5Y;9dYIBy4zOfHys4GBpE$K})i;x?Yh$jb+Md#gLyy*OAy{MMNe zTYp~sjTw0w_sf%s?XZC!`5V^&g8-MzelkbX^4aeXMDZ-vvS65=)RpJ|8v36^4~DsE zSQv2OhJmw(9uJ;-{KG}C7y48~oaa5k$f7Lk`4qGs^@~BJ^>5*py>_#iVD_#)8+w@Z zHw^}>>MsY`J<)yGvF{ZQom_GV^N^lMk|>Ch(;oOMk^)r?4N#S$SQ+te{nJ+P<4Pa` zopRwLJ~3g`eY4-#s^2v49CtN{vYsb2ykaW3(CLNj;2V)^xZMHd_%_ zuk@;@;8^>3rAd@#B$%2a_`8Aafy&Yc7K7&IX0YdutK1|m&$y~gf_2ouEA14+2-c^1 zR>7M+SOX6G6)Nyw?kcLP!jNh+sA)(%lhMFxE;cSV`zW8lz}QKU^ngwk^{3~wT^a|o z8hCR3!oyQMjwfFYdoiF9wC7BMOF8r|;=M7(36w%ADx@eQ;a?`zkGbmUth9n3=Ym9z9^l$Dj?*LeVkm~Pc; zBW!us^ad0Zn1pJ6sT1#|CR<%ogUlH?WWocumCJnmjUgc^qhjWzw9a>|2B2#NgBB5{ z0Tvj2XO10W21T%u5UJVEzp#;89BU{Zk8oeA>#1+M*5m^GSbL7i5I7e>Fc;h$EOT#> zU15RN*mBSP<1Al78}(y?t&Q-YMGZzJ>xmUmj8`k(@u3lw4&bXzx~5$lSWr+9AAdzc z!Xq~~7nmMi*b|sXiMbaP!3MwoVg?3dmg_9yC59U`hJnQ0vmMhH-hzVMGU@!wWxN7Z zF7%SBY;H!#d^B5{YrA?lpTjwuVed#`ucC!&xtVNBQ8^8CmtfykoV zuJuk~p-mu0K@yQoR<;=|J(8xhY(i8qWd8e#RvUl7oaD=YP5NV8C3zBO;{JydA`O~% zN*5A8aGYDBJ7tU_dMo<_k0kt`MB7T(e-drJ|3$PVgkn5am^-%HM}40DH~CLRim;gh zV@9&jthxh^>{b{vvJ2pylJx^2*^NwIx@cpPt_8E7wtZi%V)+gXz&i?gZ{d-1NgJM~ zpeVLk)D}&7vu6)p7N_2=31AAam~VzYn3!ljWryv+PlD^Y+W!lJD~knd)zk19LuuWR zKe_ciQ>Fj93-o6oH{OLR6rGTn*&H?)F9HA(T2BG3-JNaQ$a}UHo)c;HP1b{@t}l*~ z#4k44VY*nSAg!A>Klgurro~G`BUmK%0h&_~eA64zam(Mlk&Gu@9e~`^(j3lr+p>>z zAcii64~AhbOMNT=vkM$PR!qN%#`^P|1BbCW`~d&=5y$CYcb%6CW+4i9cQyqX87Ruj z%90ebCSh*Os@uecw@k(ls8bkVK-Vx8ld&6z=o1FRNR#08(XlbSv)3!rU89YWK*=hn zX_NuEJ#1xGEhGWTga0xx*I)}Z2Hy+3WLK*CZTO=tQGqJI+><<^h-k1?3F+ryES41h z0Ic=iRKlfR-!SwuDOI1$@E9pNBb9w}8PtWkV0OqMug~#z7WfTm{XNukM=pPFVLE=M z!<*Czq5+HyARm!VIYj>EAmBQ(e(;Bb0JALco2uENv%pn?_27bZ1oLv5Kp1SUp!1Eo z*lI4O8-KvNbma;N9r`f7rOf5+f$BCD1rE9SoIn`==mBo*@jyoxaPBnmbsg^a739TAq4UQk}3Wc{_SgfWFSCiJQT&Bl+p=HVp6)Z5zLflK2cJAFrsb|CX7yUZCxz2aqk!Y zHK==Ov*daG*L*lM6kGkcXU?2SR6ZYXZEzj22bO*gjA8x3@_`&uQXt#2tNp^a2p$Y! zh~UF0)G&jCiF^P4hF$g}2t+#;()`M%LxY5!y9>M*(EslfulIjY|P%Wq>>{}zd&~|qXUw+RHn+!HriN==@r`qqw`9~n8o|Tpg7<@y4 zjtFDPe`v0lsjC`dI0BpR-^J?Q#sm>z@e4sVOhk12^wk?v zcz;Y!*$Xh_t-Mhk0F<`m`ywLX*HtRCwRrxAi1}0J{5djJu+$_vNq-Rx zaR#mQ3Qkb<%Wf;UkoKNE{?B=NXH%@X-^|PmqHGJ^5U45-g02a&!2oWd)od?F2;&_Y zV=>{5`lmT9r`y%QOpM|Fbqj`lL?1;ubd)rW=OkeKo;1hYL16F5(4l}t0dr{Q_#F!j z3Aqcfj?aS!4}!7+m_*p~9PdUoT}o+LnIOk`Dk@E2JqNFs8Mo-jm&#&<$cAVy;OFkC zs;UC2jEz0z9e&b#d9}|eyur2k6;s6ie@@@u$i+@F0Z0Z=`!<#gY{C$(c$KIbU`z8h zXY%W)xXs5O!$=6LP`pV;iHRHp6vhuEHO;{~vv8jn?7mQOy*)HsFnBNam5QsajZLn; z*JEeXh2guKvgwR;@O|79WGDR~VJ4IVc_t$(TfMQT&oN9r#!ia-d7TWZU7Yu3%=R3W zFnA=123$wTV7D^O?DZPl*Aye-(i$mk%R&_@T6+?jN8H}X^I4~jB|QoJ-AUv}aWVAD z>rosSp#cAPM@NTBp1BFn0~r|A9RS;i;0Q>UO{61(H9?bp`19he1LgmfvarKC?3|nm z7l(-<(x*Y)0o7gFeW((8!Y~e#lBQUKP0*7nMi3P$u47HbJ{j-dKZIe~bPOizGm=nH z=qPfq>ln`|df!G)x}3-H`F8+8bHW?+8u04aNJ>+{F?ZFmdgY1%t>e_(-**d3or z_&qthugN%@u1XGX!Hz|wfmLgA^YTc5LN;8o-U6E|RmEUKg4fe-_k-b;mtY`vQ~ymh z7`zJ2#hw@O=R5n+$*IC@CZG_kK41Y(C}4YKUjv?cp2;w zfSE?o5)f2@n1Wo1Xd zO3gHcu5V#Fw4ad?2}ju^9UJ|&kJ+hPpWhx)TZ?cY>(n+(7dsD6c&4 zbtpwEaNCoU5sK%e%iT^!d#Q%Rgzq#~H;W9O&5@D+c+b3&Rcn6J$aX0U*Gv;Uv@-T; zpNPE3q@5KF1)j}6>#Uf)#fpXv85XnzhWrDuYKulIrj?;#riHM90YB*e2fH;FwDc_3 zn?Tvb+#eNwFRtAs5(%GRMY~$&M2cO)WBp^xEb11K_od#~g?S?3vDsRXe6Z!)4)VV7 zojje50DyX~zqt0K;`wb)_K8RPu9#AiY{{2i+LH_!+Pj+RcFp^q4u8=l3g2L)0_CW@ zMgRTCO-qhJI)A)va+0~2^6;;3qTEvYKYpM7nTwLIq)o3}ac5UP+->;cC#)__zqfLQ zD9xr~1%8k{6p!&JARQtez8BPk| zk6~|zU?o30yS$et&1W;4fk(CRI}v$?T!*7g^GzKUCKqivMWnw+`pTlctdXKneu#u6 z8m`|CD8!gGZ`Hf)zQ|rmP#d@Nx&!x-1FX-#rh8BPPOk*2&CCZ z^HT2Eram=%Fz%w488T1h<>Xiov@-IVq0+-fr6C4bg6NNagw_%3@wanPhvI~((p##lQCPJ(4m%!dPITIw} z+rE;30$&$zQ2*pq`<|ql-D`C54!yu-L=SR?A;{IKrD)edS?l3j zKEas?cfSZw%Dw6%cmFXt`J0&A3eHJMU5s@TDZS}+VRy8k=4j25XMXz@1)J+?1xqx- zP{!6ZG{6=HTEut*W9BL8#09=Nd3kerc`K``orXrBe_!+dA_%({Y31YMDh-7HJzOY$~c*7X$f?AB4F<@Uiz@IRUNCoOM`(W2V zt6ub+K0S~u4+`*>vg!yScg^fdrREp~6%Anj_z>Wjn6pigmwuv;v-zcUohH)~Z4DJ4 z?OqVhJax+?vO0GWiFT{iLVgmd{HT;v=>q9DZ)c9)@QF#34%a-L1s?A1d4+|~E~62> zf%=uO56s?)pVrr3Auj&asiCNzr1J6cCEYFMx8*~hKQF;m6QI(m2kFYQBH5Fi)%_D2 zUTn7}cZb1%eSjrDCnsmS^dc!Ksg~AO6F(!{c0-louV2evO8)`km~fqq{k3exmLTJh zE2FnSW(7Uv2h^)ZP2V?HKj_M6wfPzq6-DTRX>9ZV%RLA1k^h&#zQCxJXWw4LWrnCn8z%CG*yiKzvNHxVTrkdCpiQC7V>R;L()+@`^ ztW@i)>fmz~0yYxq&wYG+f`c=%9{{{%E_~cD2+;4j zfK67Tv+9MGigfkHDQ7q2y5%U{f9YqfbH>*Vv(2^_ot1L=0o{Oioh{akmq9`4-HUU^ zPJFKq$9_9jH%rlNY?wYFj75x<7}VQ}_U}gO*I>0UIe^C~BY+8n{1-=p-WPlJ9gL?z9(xaMzUSG+Z5}#A+*VVKJmQDIY#d^qgTJ| z(#8^gMoWVmgVz+U6Z$X~yH!fzYdq1Y!llTe$xweW9Ikm^eEReWI4@qzSLfVYH7Aph z;=W1{yD`)!KvzQr+$D76^z&B>(yOJJ7F7@RjEi$}jI(4riGCA4AfKS9%X_X_9mkv8 z&%^YvU@9;b4bPoF59bgycdBmcv})JQxhIRQ8sm`=!Y$`e#PFS1E~r(hZI@zvbLk1P zmj2MW(@f3$pfd(4w+r@F8&)Q`SNHnYhKqTdCtHY6MEFXB=DYDk$wizP-Bw;L?^$^T z7!|$2h|wDL$aK4V4z>B!mEaosU?<&6{+90(TZ>4&EIE{@(d$0)^OK#s%|3FX-K&FM zPiL$ivq9g9|MAp=uz}ER0#_;)*=?!uaZt^O6;gEWRXLr5!v5NGcSZv}vOzA;JJ6Zf zXt1ZbC5L*v>f^)GZ%x5LK@V3SO9u6-zE5E$C4b42GyH$d8hg1Xf`fx$0Rh&3%!NOb znf(oB_zBooN)VF^TJUc+3I1|BBUbU)p}xvu$TR!(PUO(jb2il$5dU>q5h1iA^i} zXjFJOChf@LpJ3O|%3Iuw#OLlt`FZhT1Qg#wTaItQg*3>*EN@Q0xqpnzdWbow<99Qd;h$sUrt zWIe(<>*fn|e&u2LK~JBaLU3pv`9nKfUy^opxc|!O=A1o!I`G-E78|Q;_T+*oZL`R* zL?)8dj+Kzi;aEp5i&7)@VUF8fJvzznzHTPj63^L|Cbvk+XC;y<4d30bC$(j-P$_P5 zsz*Lqpd+6hv%`9_|LdO&KaP!@S0DYiQ5?Fue;72^8N*54&}G`G{_Ppc!wYKYQT+3l zjAVYB0@L4WW=`BBe*iftdHy5m-=+PoWc>d=tWzhq8z%Jqq|tkK(A#z(L(zhh4?0&z zrli6s=!yirI|CAiu6jNB-Xu0|)Ruj>T^~v6DgYp<%OC8#J=k^onO0hl#=R`-s^4p; zG5e~h9*-V*F1q%6uzlZK`MxWyPYfzRO>7osG&@zvS z4MDo=^r>D|~2O!}(n z1J$(nb~o39mX?;@um%zgcI~U#Ay3jF&yd~y->1m$G~Qa8o4XF>n4p+!E1pKeV1J`@ z!M1ASSwfY)PecaZL;u{@S1qsh2aFA&tMxSfb6qMUW#xUfdpm`NW-5@`J~EBCZ&<9q zRY6wUgw+FjPQw)rdqZz2w3Cov=faknA3>EWJ?awh%7DQe91&cbtHKWl0( zh|-lxR(7_vne&re!$)Zi06nt9sBPBLDgjN{)6~o-FrdpLvD*V4EGqPeA09FhtI6zb zm?M~?*t3)=!Je?gwsN_S#rI27;Iq?UU@ZK@!if=+qO@U(bVTfzKi4WObOF`)Sps~I z)DVEhJPKIzFF4$Rlz~D#t@?bdXfyGsH4JrFL7w+@qm})10n>p#3$>Qc(D;tRh6V$( z3`qXbFE$BLYRLoDm);XVe>SnbQK#>n&W4{-p8+O6f=OdATc)>cuyT;620W_ht)HkR zE0YCdo0eux*wro6jfBW_f1|*jVyEPDZL$tqZMW|$M-q!J50{WkenG)J#wY!Md&+Y2 zhWC@H#hvkZto>M}+|?PRnGEcMRq@Cqe)y7~Z%*c^>>oveeU`tZDtP;u*%`EMjCznBU^JtJ)es%>2^x=2(b~SqCnYj(2 z$}&bFom*F-;T@%txlCsFETKA=n)h8DU32X3IEvPZ23$nd3b3`lq2U|jQ;>k_1^hQt z*z56dIJ16wDt{B%FGr&G?sMnPL4UJ#>y>~KqhM=*Yw}%JjAF7l2pm2)Im6Pe!c0H_f`| zz@uu#&BJ5Wu-y1{qyv|c9)1qOP$W zA@2(l6BA@S4?$hqyVr>-R;s^<&zke@%SFcRao>o1`@NU=X)$lHpM9@z8JO$c9eb4@vHE-=tJq63D@Cvz8PW zD~4)N9^Wx;vhtv4Mz9t#3(rAf@e8g|Er1(lJ8dn0E<2|v-1f-Ml zjSu;FW?JrC^n5rGBN@kN3~2lm-xx(G+9)!oPMz8oe?(im6a)urd52jX65}#B(Gorj z54)rDhD)rvOd&9A5_%glva)U~_+hA2R^2%^4%NBelgja0d=%O!kA$;iTY%xgH=9zA zj+SqLpH%w3rR^QbrWROLymvv-N=H7WvWh}^eUKzQ`ZmYYUyR^msg_LZ1FEXIfP~N_ zwM+RcSoGg8H3EhC2o9%}BCg@E5tg(Z$pi`NgfKoBGLqH&6I6v%aWw1sKYIUHDtcn( zxaYviq(?GC3Z+JXWPH(bnE4d{DZxGzGyk+aGErwCE*W7yh z{GUFpYGn+@ITP=O!ootOYL|z<=2+^Sl|v{To(J*BBsu1ms5fsc{n^2m>K7!@yTU&FQh2+A zXaS5`o1vXMr-{CU(c46H0f7FPn3<^^Iuxpts7;m9P@2!=bJ&JfM`3n$ zB${zp*-D3k!onoLkofe;ramGK;?G_WW?$+q3-9e-0TB^jN4pXoPFe1|8%F zuojx-A{eX~H0pDg(@d z`6oE%@cR}9^8#!&(%xISGS|svX9a{xQf?V@kn5B{Vrga;J)pm@q{g;uD_r@ADSU|; z^JjfMjOr?sY+GDGx=RtR(tO-RMw?hp2M1?IOg)w5{alwq+0*>DYaj~(s03cfGK( z{v8MvG(T86?}V#7KMVG*?@4fMw62!Ul4-r=tlE?^OR0vBLQy6`nf0VcIvBZY%JY^M zhm`@;WAqkR8_Qt20)g)v*g)CoasB#r5c>Kz{_);?eCXnR0bkT?lnJQb$@x;zadE{S zTn^j9eEt0^erh8nHx}fg{7_X^hGpv!J27KagpvIl&p`ok9#rd(|G5&P$ z3oNo1xYVfjmCa3j9h?Wa`-uG_*NEwMqG!*Z#cr6>CXFE{1=ya-PjiRxF9h3}EKKHa zdqk4Zx^?T&7mIzPh86Xds!c^AeSPfH8oSNGhX|Ad@-q;nnk$kQVY3CZ<3V4nNip zCD!1r({k`#R|PI)YJeDvTe|9E5^efWUmQNo24X!-by2+Q(;JJfm4SB1_lNP z8wrajWg5=0(Y1CQ{przG)anMrHenY1z`OS+uMqj2W5133$Vje8p+sVA;XO2SuwyE> zg`rzy_#^^@$jgt}zw9)to8>|LEVSrx0tlqOdzbNsZ)=r)t&JA?zqqUUT;CUfK8-QJ&~CAA&x&+OvfXKA-= z_*;46d8SPodYmn@zfAeKY;*yPJWu_FSL7a-!O9f?#VtNb*e2Bj#Lk?6)q}oQjI&vN zzT}HMa7wx6Z{TrKX!l@m`vWAHWw5x+%slinEUv||y01a~%=nbU-T)2x!%!2)T!%eT z`o@D=A7RH36B{e5m#tB)D8{RJp=EPuUYV6$V`Qv__u6m0%Y~jz0n96Z<|R+t0+2^wm%egAf?Pl`i=u1&zJBGZaKbe8n=m^r5h}l zaQIH6j7`r=>u1Cd3WmxJ_OW3^uj=63W*kHtq-?&6<#jVb(l+4x?;DdR4-fH3`0?c3 zKs5*95l}s{i)um|#NM-^05HS)_3LZRVXal`YzB?U@25UOupIzEAQotriDn?TH@tXZ zl!MJQXPzguHkNk1q#3{j;SraVXlZD?vF*1k>1uk*jiU^k;WZ(CfomWDNCOxGbyBAM z*F@aDS2PTd$UAv=%b&HLsNzMQ#kID z#ntB2EX~eHpRxYVa8w+b6d_4((%=}MGg$JxK?X8ouaH*Z@_ix9uFs^yR+n_~$5+u# zugL5MXLK!tGyNu-C~K*x_zU=bsR7GK^#X|D)!#`VCES*f@~-UEDG`&z%o67?*{m5Q zD+k_ytOgfFQ_zJnGc&v1%FJwU3gD`(v=U9oTcNXQP{+`~Ahh@6Vc)q6xw&~^U(*{= zYNo#7t*YF8XOr&<1H?%8Ki|n{EwTJULo*Vrui4pt6VZT^50%hKs28Y95~Nb8coGqD zan|7RBy`?sP?s$k>glB-wbB6@gMF@qcFvSw>0C6l-_UJD&hW5iZC$6V$UuRtr-Io2 z=+9_AE9pUSl?lzKqY!gqIcxBF;@1T7{Mn=U)-a^Gj$!mwG)P1hvh~A#c zMI}xN{cMwVd3#o_=t=GJx|~(PA@F|ezHrItwmX_~!E8T&{zP`)aYESveE>ovC8-Ix zO60mXNJuC#SH}jW5`PVLBFC2N(iv>m@nUk^=q`E08hRzmO?{D8U2^VUb8}TSG=5lf zS_=y(KDHNREw97AoHc`rtClX^FV?wsiOqt9h^cMT(vLhma?hCP)&{i1+cFoG>)Z&S z+li#JDP<+=ZDV5tG#8W5D|P2$LzFmO z=8#OFxfqXL4*Gq&6%|bg>k5n6hhNyDVusCiq*=1iu1N{B#;$9(S;%ya4J+uh>(cAI zLH~-jATd`&s!nh7GceY1(EKW7+NJH#xUN@wQ=dudOqt?Nhhlh-q9+x`Weyu;1LVym z58AGErHb#@tE;Io@A(lRY*jB=@&MhlFebWZgS{QxJd0Uz{pw#wzd*f_aTWaw)R9du zrKwhX_wI!g70uMNgYYrx)1S_S54IJo62P=Wv^3=(YWjtDz5ZLasjI13gpBrirjNn8 z_IXS8JZJ*F^N0S&#_PCbYo&&SQ%trpM#-XqU86`(h=D_{Q^ddCW==RTNVVGl_EXUk z@)K}P;9;t>lY~_2e$1_o4%7eDJx(o%iHRWr2yj(sP*8J~ollqBcDq|*dos~7RKJ{_ zad2c08fMxEFc4d80DKz&Oha4k)JMLvb6&?xb6bfLWLue-9+d=Fx$S%&aYx-q{xXJy zW1?4ATbt1FDvWpbY#7*V_xplc51+0b{`5gc%rVF2Wy$#!?2)W3|5x*jg%E*I>S2ZU z|G~&jRUq^5?2}pV$qDFjZ3+<;NWU^L<7}5o+Q`zpIAm?K_TFS<>Bjlo?Ep|Bm4`D;t>`)yqQSv^bt{zBD5nnx^nUIwGZnWkB9u?#-u!uH`XGPR^ z%489X{-HZ-e@+7@4%X%OKd`UiE}!>{juezbB}Y&2we$!uOiHbhX(FgP(aI?lJ`Q9@ z;q`N>Lz-!*RM~efu+A#;Xg8@l4z&d z`0QAnN|GfHvr_hqd}eHa;a?b3BlLoQV_5zFzW<+LsbA^f|2t=F$w4hGulx5+Kpn7{ zb$#vHwOy&Zrt??)&gG@R3@LZ?=AhUOjBv^nViu&RE(Rq_f1%6H6Ij;>{cTI8&D&_` zPxHJ-JC+rsC<`#wyYZc%R31AWui42NF$NvIGdhnlQ_YtNO)kGR zs4>#f9Sgm^sf=WC;1VX=YjCl$2nd+O9e?NO?Cd;_Q&jIQYqikjhMf6_d&@vqY^be0sCU73?^`Xo3u%CQWKHYU z&CJYjejKFSCgtD(#Nj9rbUlKTq8oU0qV{KnhK2_O?9fsr-JP3uBS7qUx?h!B)N%Z)zSr^g;|xMzr!2-@+JB>7mmajFH1=H?l6?JTux0*_4Qp? z!sn!*Mu_d_A;^nF!sy2wW#G|iJ-(pqBy8LDcq*7;i8qr=d1~oJBLPSpk2kQkb>jci9dh-9OW;H;0A^2fyAI7 z*eNxlz|h8FGLEtZDrF$k!?PB99t|1SKGOdHdNW5D4;CsJV>Dm@i-5K9+Ccx@xmXl> zx${gLiXR>?@CCmM)Mg}_E<62WVh&Sd7+Ci&?+$ZGQ>#sp{YJ}ei3$xhKyreUS-|se zt^zYzo}-RNnkAIB=`1n_qYGbM*YUFmC(H0UDS&M{u-E1dPS@4d9Zo`61!KhQ@{R*eWEUFhZ5ED zir>5G`th-?1jLX71(;tYeP;lz!VE5$f1&s{wrdYI*j$7(fhH{}DS2^n8dYo-+vLgp zeiN?F7>m7pKv@&26&n>8_`X1#nAbvz#@QIPX*HSiJW?O8@`dw3csNRG5nZXdp&1(_ z&PWh;Qc%@Bb7t9n&Pi{{T-{W|$0ELu+b44}<~(Yxx_Nr-vw2Stu+y8>E=x84c{BU!IkK7IukY;gFWP=&yTjC3hkf-I z&xGE&5nYY=-?l0^&;KDHR;l@*>HICT?MhdZn!cT;P$sV!#mNnKcRF!s`zBv?Tk3Iq zflpR(b)s)|i)=m%Qdn@*ng{YQwmHAJPy$;NMaB1=PAJ&S*nd$`F#}3vgw9#NYEB*a)2QVW1z}0Skq9Mz&@lFQcQ~-Q8iU z0o&6MKfkTi_3PHHJo0+K)?0|VE9U>GS}V2L#N<`Xb#M_faVX>G$6KW;Z5QUhCETjV zy3qgIh5u@=8BtF!VtY7I@PSUjahRAw z?F07;xMtpxpLR$R!04u$@sqNc=dk#JV_OvOnfzaDRqEHEEVOGTRt~>dlLj0s?+31a zEc!vptP40iVAy}FVVm38l|0?u1D4M=c-D*@K;;iKcPcb3n`EC4SF3Rf%rw~Am60Ex+(kUwkqy~K}7Y^hB$p-SHJSS96!%PPiHMKg{-iTE^c{amiSH1|Imn*n*c=16Aupcq7u&{QozcAU1NO+jU z(sQmpI@D_F^&8^jp`|p?okef>^k$eC$2kkkK#K6TDU>9;p%Uh2z@tZxl9Q8By@BS4 zihCnt=l4@Xq(Bm!h8R5@g5`rAldcZ&AEO6{AnY|bm%&7n-$?;>G2bm(uMKG}-mG3g z$~;s8BE}DXlRPR3>x*03i;OFeqd2D0ll!YU%e_d{%#7CY*>R=E{lSJV^_%2;Sn|s3 zdW{B0wAX|D0d*&BrfJ!7r*@g|pG9wh4G@Pz?|LX#mTF#Qqiwx*p3jwX)S4KPumVxu z4cMn4&qIgcQ!P^-+%@GR%{-ar*-~&GoK0D)2DPOd zzic`G=^b+cas9VAX}G*-jmV0zn;7n_=Q6qG31kQ;pXa8sB*Q6wZUV|7Pz zx$9N(uah&9hv&(Vlx7B(bEu3`C8usp{{OD+`?iH{IePhj08CG5>i_@% From 0af73c955e61c5519c9882310b3e99a198d5ede6 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 05:04:24 +0800 Subject: [PATCH 311/420] Remove unecessary items from TOC --- docs/DeveloperGuide.md | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 8787a8e12c..fd4758f301 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,30 +1,26 @@ - # Developer Guide - ## Table of contents -- [Developer Guide](#developer-guide) - - [Table of contents](#table-of-contents) - - [General Overview](#general-overview) - - [Design and implementation](#design-and-implementation) - - [UI class](#ui-class) - - [DataStorage class](#datastorage-class) - - [===== loadChassis() method =====](#-loadchassis-method-) - - [Parser class](#parser-class) - - [PC Class Architecture](#pc-class-architecture) - - [Command class](#command-class) - - [===== `ViewerAddCommand` method (viewer mode) =====](#-vieweraddcommand-method-viewer-mode-) - - [===== `BuilderListComponentCommand` (builder mode) =====](#-builderlistcomponentcommand-builder-mode-) - - [Appendix: Requirements](#appendix-requirements) - - [Product scope](#product-scope) - - [Target user profile](#target-user-profile) - - [Value proposition](#value-proposition) - - [User Stories](#user-stories) - - [Non-Functional Requirements](#non-functional-requirements) - - [Instructions for manual testing](#instructions-for-manual-testing) +- [General Overview](#general-overview) +- [Design and implementation](#design-and-implementation) + - [UI class](#ui-class) + - [DataStorage class](#datastorage-class) + - [===== loadChassis() method =====](#-loadchassis-method-) + - [Parser class](#parser-class) + - [PC Class Architecture](#pc-class-architecture) + - [Command class](#command-class) + - [===== `ViewerAddCommand` method (viewer mode) =====](#-vieweraddcommand-method-viewer-mode-) + - [===== `BuilderListComponentCommand` (builder mode) =====](#-builderlistcomponentcommand-builder-mode-) +- [Appendix: Requirements](#appendix-requirements) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Instructions for manual testing](#instructions-for-manual-testing) --- From 0d32a0ff6c0893e31253124608204de6b24aaa19 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 05:06:43 +0800 Subject: [PATCH 312/420] Add line to differentiate items on DG --- docs/DeveloperGuide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index fd4758f301..b98eb3e81a 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -151,6 +151,8 @@ A UML sequence diagram showing the interactions between the different objects in found below: ![Viewer Add Command Sequential Diagram](uml-pictures/ViewerAddCommand.png) +--- + #### ===== `BuilderListComponentCommand` (builder mode) ===== The `BuilderListComponentCommand` command prints out a formatted list of all available components of type `COMPONENT`. From ce98880fbdd70e8fcaef77e59b77d14451b4cf40 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 16:22:31 +0800 Subject: [PATCH 313/420] Fix DataStorage Class Diagram to remove : --- docs/uml-pictures/DataStorageClass.png | Bin 169445 -> 153521 bytes docs/uml-source/DataStorageClass.puml | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/uml-pictures/DataStorageClass.png b/docs/uml-pictures/DataStorageClass.png index 0e67722d3891435f64c99d994b8774742145dfb2..cf729c2e21965865a6d6fefb0591f58ac789508f 100644 GIT binary patch literal 153521 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

    k+|}#`AQOtLietCy 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 z
    )SXx$cX1S@VA&0ba_cqNKJK;CB<+$+ibzJ%F>R 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 literal 169445 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

    5}M0EB0zP1oUXypBm?FjXJ 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 @G*pgUJrE1aQCHwy8*HSF9RG<5CE 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
  2. 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 T^mP^f;*y2h3u5Q5-T%J;2TEXd diff --git a/docs/uml-source/PcDiagram.puml b/docs/uml-source/PcDiagram.puml index 19464944a2..98421e11eb 100644 --- a/docs/uml-source/PcDiagram.puml +++ b/docs/uml-source/PcDiagram.puml @@ -1,17 +1,17 @@ @startuml skinparam ClassAttributeIconSize 0 -class ":PC" as PC -class ":Component" as Component -class ":CPU" as CPU -class ":GPU" as GPU -class ":Chassis" as Chassis -class ":Component" as Component -class ":CPUCooler" as CPUCooler -class ":Motherboard" as Motherboard -class ":RAM" as RAM -class ":Storage" as Storage -class ":PSU" as PSU +class "PC" as PC +class "Component" as Component +class "CPU" as CPU +class "GPU" as GPU +class "Chassis" as Chassis +class "Component" as Component +class "CPUCooler" as CPUCooler +class "Motherboard" as Motherboard +class "RAM" as RAM +class "Storage" as Storage +class "PSU" as PSU class PC { - name: String From cb4e3bbf927801973322bf5608a2e39e1bda722d Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 17:15:39 +0800 Subject: [PATCH 320/420] Add PPP --- docs/team/KeaneChan.md | 61 ++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/docs/team/KeaneChan.md b/docs/team/KeaneChan.md index df724ea6f6..3ab6218a37 100644 --- a/docs/team/KeaneChan.md +++ b/docs/team/KeaneChan.md @@ -1,24 +1,51 @@ # Keane Chan - Project Portfolio Page -## Overview +## Overview: PC Part Picker +PC Part picker is a CLI application that allows users to create and save their own custom PC build. Our application allows users to add and remove components from their build, while viewing the total price against their budget of their build. +## Summary of Contributions +[Code Contributed](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=typing&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17&tabOpen=true&tabType=authorship&tabAuthor=typingpanda&tabRepo=AY2223S2-CS2113-T12-2%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) -Hi Im Keane Chan, an Aspiring Mechanical Engineer from National University Of Singapore, and these are my contributions. +## Enhancements implemented: -### Summary of Contributions -[Code Contributed]() +**Commands** +- `list COMPONENT_TYPE [-FLAG]` command + - Filter methods for list component command for each component type +- `BuilderEditNameCommand` for builder mode + - Command to change the name of a PC build +- `BuilderEditBudgetCommand` for builder mode + - Command to change the budget of a PC build +- `BackCommand` for builder mode + - Command to return from PCBuilderMenu to PCViewerMenu + +**Classes** +- `ComponentList` class for filtering components + - Filter methods for each component type +- `PCBuilderMenu` class for PCBuilderMenu +- `UnrecognizedCommand` class for handling invalid commands + +**JUnit Tests** +- JUnit Tests for `BuilderListComponentCommand`, `BuilderEditNameCommand`, `BuilderEditBudgetCommand`, `BackCommand`, `UnrecognizedCommand` and `BuilderSelectComponentCommand` -- Enhancements implemented: - - `list COMPONENT_TYPE [-FLAG]` command - - `name` command for builder mode - - `budget` command for builder mode - - `back` command for builder mode -- Contributions to the UG: - - `list COMPONENT_TYPE [-FLAG]` command - - `name` command for builder mode - - `budget` command for builder mode +**Logging** +- Logging for `BigPP` class + - Logging for overall flow of the application -- Contributions to the DG: - - `UI` Class Diagram - - Object Diagram for `BigPP` +## Contributions to the UG: +- `list COMPONENT_TYPE [-FLAG]` command +- `name` command for builder mode +- `budget` command for builder mode + +## Contributions to the DG: +- `UI` Class Diagram +- Object Diagrams for `ViewerAddCommand` and `BuilderEditNameCommand` -- Review/mentoring contributions: \ No newline at end of file +## Review/mentoring contributions: + + - [PR1](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/35#discussion_r1128972854) + - [PR2](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/97#discussion_r1141366981) + - [PR3](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/33#discussion_r1129009774) + - [PR4](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/68#discussion_r1135988546) + - [PR5](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/108#discussion_r1144216412) + + In these pull requests, I reviewed my teammates' code by facilitating discussions on the code and complimenting them on their work when deserved. I also explained the rationale behind my code to my teammates when they asked for clarification. + \ No newline at end of file From 4c109b747a5a143a9d27f143dcbd2a9073ebcff4 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 17:15:51 +0800 Subject: [PATCH 321/420] Add fictional data for all components in resources --- src/main/resources/chassis.json | 65 +++++++++++++++++++++ src/main/resources/cpu-cooler.json | 56 ++++++++++++++++++ src/main/resources/cpu.json | 80 ++++++++++++++++++++++++++ src/main/resources/gpu.json | 60 ++++++++++++++++++++ src/main/resources/motherboard.json | 84 +++++++++++++++++++++++++++ src/main/resources/psu.json | 84 +++++++++++++++++++++++++++ src/main/resources/ram.json | 88 +++++++++++++++++++++++++++++ src/main/resources/storage.json | 84 +++++++++++++++++++++++++++ 8 files changed, 601 insertions(+) diff --git a/src/main/resources/chassis.json b/src/main/resources/chassis.json index b6c6b1e0a3..adcfc8c361 100644 --- a/src/main/resources/chassis.json +++ b/src/main/resources/chassis.json @@ -18,5 +18,70 @@ "brand": "Silverstone", "price": 139.36, "formfactor": "mini" + }, + "Thermaltake Vibe C40": { + "brand": "Thermaltake", + "price": 109.99, + "formfactor": "atx" + }, + "NZXT Phantom P12": { + "brand": "NZXT", + "price": 179.99, + "formfactor": "atx" + }, + "Phanteks Eclipse P500A": { + "brand": "Phanteks", + "price": 134.99, + "formfactor": "atx" + }, + "be quiet! Dark Base Pro 905": { + "brand": "be quiet!", + "price": 199.98, + "formfactor": "atx" + }, + "InWin A1": { + "brand": "InWin", + "price": 89.99, + "formfactor": "mini" + }, + "Lian Li PC-O11 Dynamic Mini": { + "brand": "Lian Li", + "price": 149.99, + "formfactor": "micro" + }, + "MSI MPG Sekira 100R": { + "brand": "MSI", + "price": 114.99, + "formfactor": "atx" + }, + "Asus ROG Strix Helios GX601": { + "brand": "Asus", + "price": 269.99, + "formfactor": "atx" + }, + "Deepcool Macube 110": { + "brand": "Deepcool", + "price": 79.99, + "formfactor": "micro" + }, + "Rosewill Prism T-500": { + "brand": "Rosewill", + "price": 104.99, + "formfactor": "atx" + }, + "EVGA DG-76 Alpine": { + "brand": "EVGA", + "price": 99.99, + "formfactor": "atx" + }, + "Raijintek Metis": { + "brand": "Raijintek", + "price": 64.99, + "formfactor": "mini" + }, + "Aerocool Cylon 3": { + "brand": "Aerocool", + "price": 59.99, + "formfactor": "micro" } } diff --git a/src/main/resources/cpu-cooler.json b/src/main/resources/cpu-cooler.json index d2c77bad70..d6d5fb541a 100644 --- a/src/main/resources/cpu-cooler.json +++ b/src/main/resources/cpu-cooler.json @@ -26,5 +26,61 @@ "price": 86.78, "brand": "Cooler Master", "power": 2 + }, + "Cryorig H5 Universal": { + "rpm": 1600, + "noise": 25, + "price": 46.99, + "brand": "Cryorig", + "power": 2 + }, + "be quiet! Shadow Rock 3": { + "rpm": 2400, + "noise": 21.4, + "price": 65.99, + "brand": "be quiet!", + "power": 2 + }, + "Arctic Freezer 34 eSports DUO": { + "rpm": 2100, + "noise": 26.8, + "price": 49.99, + "brand": "Arctic", + "power": 2 + }, + "Phanteks PH-TC14PE": { + "rpm": 1300, + "noise": 19.6, + "price": 74.99, + "brand": "Phanteks", + "power": 2 + }, + "Deepcool GAMMAXX 400 V2": { + "rpm": 1500, + "noise": 26.1, + "price": 29.99, + "brand": "Deepcool", + "power": 2 + }, + "Thermaltake UX200 ARGB": { + "rpm": 2200, + "noise": 28.3, + "price": 39.99, + "brand": "Thermaltake", + "power": 2 + }, + "Fractal Design Celsius+ S24": { + "rpm": 2000, + "noise": 20, + "price": 119.99, + "brand": "Fractal Design", + "power": 2 + }, + "Corsair H100i RGB Platinum SE": { + "rpm": 2400, + "noise": 30.5, + "price": 169.99, + "brand": "Corsair", + "power": 2 } } diff --git a/src/main/resources/cpu.json b/src/main/resources/cpu.json index 3a169fe01f..8b7d155352 100644 --- a/src/main/resources/cpu.json +++ b/src/main/resources/cpu.json @@ -118,5 +118,85 @@ "power": 170, "brand": "AMD", "socket": "AM5" + }, + "Intel Core i2-11350": { + "price": 69.99, + "cores": 2, + "threads": 4, + "baseClock": 3.2, + "boostClock": 3.8, + "power": 45, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel Core i5-10400F": { + "price": 149.99, + "cores": 6, + "threads": 12, + "baseClock": 2.9, + "boostClock": 4.3, + "power": 65, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel Core i9-10950K": { + "price": 459.99, + "cores": 10, + "threads": 20, + "baseClock": 3.7, + "boostClock": 5.3, + "power": 125, + "brand": "Intel", + "socket": "LGA1200" + }, + "Intel Core i3-12260": { + "price": 134.99, + "cores": 4, + "threads": 8, + "baseClock": 3.5, + "boostClock": 4.2, + "power": 60, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel Core i7-12850": { + "price": 379.99, + "cores": 10, + "threads": 20, + "baseClock": 3.6, + "boostClock": 5.1, + "power": 125, + "brand": "Intel", + "socket": "LGA1700" + }, + "Intel Core i9-13900K": { + "price": 589.99, + "cores": 14, + "threads": 28, + "baseClock": 3.8, + "boostClock": 5.5, + "power": 150, + "brand": "Intel", + "socket": "LGA1700" + }, + "AMD Ryzen 3 3300X": { + "price": 119.99, + "cores": 4, + "threads": 8, + "baseClock": 3.8, + "boostClock": 4.3, + "power": 65, + "brand": "AMD", + "socket": "AM4" + }, + "AMD Ryzen 5 5500": { + "price": 179.99, + "cores": 6, + "threads": 12, + "baseClock": 3.6, + "boostClock": 4.5, + "power": 65, + "brand": "AMD", + "socket": "AM4" } } diff --git a/src/main/resources/gpu.json b/src/main/resources/gpu.json index fbb1f9d27d..1e20a09805 100644 --- a/src/main/resources/gpu.json +++ b/src/main/resources/gpu.json @@ -22,5 +22,65 @@ "price": 934.06, "power": 350, "formfactor": "atx" + }, + "EVGA GeForce GX 4050": { + "brand": "EVGA", + "price": 199.99, + "power": 75, + "formfactor": "mini" + }, + "Zotac GeForce GX 4060": { + "brand": "Zotac", + "price": 299.99, + "power": 120, + "formfactor": "mini" + }, + "ASRock Phantom GX 4070": { + "brand": "ASRock", + "price": 499.99, + "power": 225, + "formfactor": "micro" + }, + "PNY GeForce GX 4080": { + "brand": "PNY", + "price": 799.99, + "power": 320, + "formfactor": "atx" + }, + "PowerColor Radeon RX 6400": { + "brand": "PowerColor", + "price": 229.99, + "power": 110, + "formfactor": "mini" + }, + "Sapphire Radeon RX 6500 XT": { + "brand": "Sapphire", + "price": 279.99, + "power": 130, + "formfactor": "mini" + }, + "XFX Radeon RX 6600 XT": { + "brand": "XFX", + "price": 329.99, + "power": 160, + "formfactor": "micro" + }, + "Gigabyte AORUS Radeon RX 6700 XT": { + "brand": "Gigabyte", + "price": 529.99, + "power": 230, + "formfactor": "atx" + }, + "ASUS ROG Strix Radeon RX 6800": { + "brand": "ASUS", + "price": 699.99, + "power": 250, + "formfactor": "atx" + }, + "MSI Radeon RX 6900 XT": { + "brand": "MSI", + "price": 999.99, + "power": 300, + "formfactor": "atx" } } diff --git a/src/main/resources/motherboard.json b/src/main/resources/motherboard.json index d9b2886735..1528e62c35 100644 --- a/src/main/resources/motherboard.json +++ b/src/main/resources/motherboard.json @@ -82,5 +82,89 @@ "formfactor": "mini", "socket": "AM5", "power": 49 + }, + "EVGA X590 PRO WiFi": { + "price": 129.99, + "brand": "EVGA", + "formfactor": "atx", + "socket": "LGA1200", + "power": 50 + }, + "Zotac Z790 XTREME": { + "price": 249.99, + "brand": "Zotac", + "formfactor": "atx", + "socket": "LGA1700", + "power": 55 + }, + "Biostar X580GT8": { + "price": 199.99, + "brand": "Biostar", + "formfactor": "atx", + "socket": "AM4", + "power": 54 + }, + "Colorful CVN B660 GAMING": { + "price": 229.99, + "brand": "Colorful", + "formfactor": "atx", + "socket": "AM5", + "power": 52 + }, + "EVGA X590 Micro WiFi": { + "price": 169.99, + "brand": "EVGA", + "formfactor": "micro", + "socket": "LGA1200", + "power": 53 + }, + "Zotac Z790M XTREME": { + "price": 179.99, + "brand": "Zotac", + "formfactor": "micro", + "socket": "LGA1700", + "power": 51 + }, + "Biostar X580MGT8": { + "price": 159.99, + "brand": "Biostar", + "formfactor": "micro", + "socket": "AM4", + "power": 57 + }, + "Colorful CVN B660M GAMING": { + "price": 179.99, + "brand": "Colorful", + "formfactor": "micro", + "socket": "AM5", + "power": 56 + }, + "EVGA X590 Stinger WiFi": { + "price": 199.99, + "brand": "EVGA", + "formfactor": "mini", + "socket": "LGA1200", + "power": 58 + }, + "Zotac Z790ITX XTREME": { + "price": 269.99, + "brand": "Zotac", + "formfactor": "mini", + "socket": "LGA1700", + "power": 59 + }, + "Biostar X580ITX GT8": { + "price": 219.99, + "brand": "Biostar", + "formfactor": "mini", + "socket": "AM4", + "power": 61 + }, + "Colorful CVN B660I GAMING": { + "price": 199.99, + "brand": "Colorful", + "formfactor": "mini", + "socket": "AM5", + "power": 60 } } diff --git a/src/main/resources/psu.json b/src/main/resources/psu.json index 099c4b6b1f..93a0fb1d5a 100644 --- a/src/main/resources/psu.json +++ b/src/main/resources/psu.json @@ -5,5 +5,89 @@ "formfactor": "atx", "power": 850, "price": 159.94 + }, + "NovaTech PowerMaster 500 Bronze": { + "brand": "NovaTech", + "efficiency": "bronze", + "formfactor": "atx", + "power": 500, + "price": 49.99 + }, + "HyperDrive Storm 600 Silver": { + "brand": "HyperDrive", + "efficiency": "silver", + "formfactor": "atx", + "power": 600, + "price": 69.99 + }, + "WhisperWind Pro 750 Gold": { + "brand": "WhisperWind", + "efficiency": "gold", + "formfactor": "atx", + "power": 750, + "price": 129.99 + }, + "NovaTech PowerMaster 700 Bronze": { + "brand": "NovaTech", + "efficiency": "bronze", + "formfactor": "atx", + "power": 700, + "price": 69.99 + }, + "HyperDrive Storm 800 Silver": { + "brand": "HyperDrive", + "efficiency": "silver", + "formfactor": "atx", + "power": 800, + "price": 99.99 + }, + "WhisperWind Pro 1000 Gold": { + "brand": "WhisperWind", + "efficiency": "gold", + "formfactor": "atx", + "power": 1000, + "price": 179.99 + }, + "NovaTech PowerMaster 550 Bronze": { + "brand": "NovaTech", + "efficiency": "bronze", + "formfactor": "atx", + "power": 550, + "price": 59.99 + }, + "HyperDrive Storm 650 Silver": { + "brand": "HyperDrive", + "efficiency": "silver", + "formfactor": "atx", + "power": 650, + "price": 79.99 + }, + "WhisperWind Pro 850 Gold": { + "brand": "WhisperWind", + "efficiency": "gold", + "formfactor": "atx", + "power": 850, + "price": 149.99 + }, + "NovaTech PowerMaster 450 Bronze": { + "brand": "NovaTech", + "efficiency": "bronze", + "formfactor": "atx", + "power": 450, + "price": 39.99 + }, + "HyperDrive Storm 500 Silver": { + "brand": "HyperDrive", + "efficiency": "silver", + "formfactor": "atx", + "power": 500, + "price": 59.99 + }, + "WhisperWind Pro 650 Gold": { + "brand": "WhisperWind", + "efficiency": "gold", + "formfactor": "atx", + "power": 650, + "price": 109.99 } } diff --git a/src/main/resources/ram.json b/src/main/resources/ram.json index eb075d2e9a..1f55e86014 100644 --- a/src/main/resources/ram.json +++ b/src/main/resources/ram.json @@ -30,5 +30,93 @@ "speed": 3200, "brand": "G.Skill", "power": 10 + }, + "NovaTech Fury 4 GB": { + "price": 15.99, + "memory": 4, + "sticks": 1, + "speed": 1600, + "brand": "NovaTech", + "power": 2 + }, + "HyperDrive SpeedBlaze 8 GB": { + "price": 29.99, + "memory": 8, + "sticks": 1, + "speed": 2000, + "brand": "HyperDrive", + "power": 3 + }, + "WhisperWind Pro 16 GB": { + "price": 59.99, + "memory": 8, + "sticks": 2, + "speed": 2666, + "brand": "WhisperWind", + "power": 5 + }, + "NovaTech Fury 8 GB": { + "price": 31.99, + "memory": 8, + "sticks": 1, + "speed": 1600, + "brand": "NovaTech", + "power": 3 + }, + "HyperDrive SpeedBlaze 16 GB": { + "price": 61.99, + "memory": 8, + "sticks": 2, + "speed": 2000, + "brand": "HyperDrive", + "power": 5 + }, + "WhisperWind Pro 32 GB": { + "price": 119.99, + "memory": 16, + "sticks": 2, + "speed": 2666, + "brand": "WhisperWind", + "power": 8 + }, + "NovaTech Fury 16 GB": { + "price": 63.99, + "memory": 16, + "sticks": 1, + "speed": 1600, + "brand": "NovaTech", + "power": 4 + }, + "HyperDrive SpeedBlaze 32 GB": { + "price": 123.99, + "memory": 16, + "sticks": 2, + "speed": 2000, + "brand": "HyperDrive", + "power": 7 + }, + "WhisperWind Pro 64 GB": { + "price": 239.99, + "memory": 32, + "sticks": 2, + "speed": 2666, + "brand": "WhisperWind", + "power": 11 + }, + "NovaTech Fury 32 GB": { + "price": 127.99, + "memory": 32, + "sticks": 1, + "speed": 1600, + "brand": "NovaTech", + "power": 6 + }, + "HyperDrive SpeedBlaze 64 GB": { + "price": 247.99, + "memory": 32, + "sticks": 2, + "speed": 2000, + "brand": "HyperDrive", + "power": 10 } } diff --git a/src/main/resources/storage.json b/src/main/resources/storage.json index b7083e0b49..d1785ff008 100644 --- a/src/main/resources/storage.json +++ b/src/main/resources/storage.json @@ -26,5 +26,89 @@ "price": 229.96, "brand": "Western Digital", "power": 2.8 + }, + "BlazeDrive Firestorm 512": { + "type": "ssd", + "size": 512, + "price": 49.99, + "brand": "BlazeDrive", + "power": 4 + }, + "OceanTech TidalWave 1024": { + "type": "hdd", + "size": 1024, + "price": 89.99, + "brand": "OceanTech", + "power": 6.5 + }, + "LightSpeed HyperFusion 2048": { + "type": "ssd", + "size": 2048, + "price": 139.99, + "brand": "LightSpeed", + "power": 5 + }, + "TitanDrive Colossus 4096": { + "type": "ssd", + "size": 4096, + "price": 219.99, + "brand": "TitanDrive", + "power": 2.5 + }, + "BlazeDrive Firestorm 1024": { + "type": "ssd", + "size": 1024, + "price": 89.99, + "brand": "BlazeDrive", + "power": 5.5 + }, + "OceanTech TidalWave 2048": { + "type": "hdd", + "size": 2048, + "price": 169.99, + "brand": "OceanTech", + "power": 8.5 + }, + "LightSpeed HyperFusion 4096": { + "type": "ssd", + "size": 4096, + "price": 269.99, + "brand": "LightSpeed", + "power": 6.5 + }, + "TitanDrive Colossus 512": { + "type": "ssd", + "size": 512, + "price": 59.99, + "brand": "TitanDrive", + "power": 2 + }, + "BlazeDrive Firestorm 2048": { + "type": "ssd", + "size": 2048, + "price": 169.99, + "brand": "BlazeDrive", + "power": 6 + }, + "OceanTech TidalWave 4096": { + "type": "hdd", + "size": 4096, + "price": 319.99, + "brand": "OceanTech", + "power": 10.5 + }, + "LightSpeed HyperFusion 512": { + "type": "ssd", + "size": 512, + "price": 69.99, + "brand": "LightSpeed", + "power": 3.5 + }, + "TitanDrive Colossus 1024": { + "type": "ssd", + "size": 1024, + "price": 99.99, + "brand": "TitanDrive", + "power": 2.2 } } From 6daabe42bac322e74c518bf98aaf58fda0435635 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 17:20:19 +0800 Subject: [PATCH 322/420] Update PPP --- docs/team/KeaneChan.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/team/KeaneChan.md b/docs/team/KeaneChan.md index 3ab6218a37..f416233fc6 100644 --- a/docs/team/KeaneChan.md +++ b/docs/team/KeaneChan.md @@ -24,7 +24,7 @@ PC Part picker is a CLI application that allows users to create and save their o - `UnrecognizedCommand` class for handling invalid commands **JUnit Tests** -- JUnit Tests for `BuilderListComponentCommand`, `BuilderEditNameCommand`, `BuilderEditBudgetCommand`, `BackCommand`, `UnrecognizedCommand` and `BuilderSelectComponentCommand` +- JUnit Tests for `BuilderListComponentCommand`, `BuilderEditNameCommand`, `BuilderEditBudgetCommand`, `BackCommand` and `BuilderSelectComponentCommand` **Logging** - Logging for `BigPP` class @@ -35,10 +35,14 @@ PC Part picker is a CLI application that allows users to create and save their o - `name` command for builder mode - `budget` command for builder mode +In the UG, clear instructions were given for the user to follow to use the commands. The UG also included examples to help the user understand how to use the commands. + ## Contributions to the DG: - `UI` Class Diagram - Object Diagrams for `ViewerAddCommand` and `BuilderEditNameCommand` +In te DG, explanations were given for the design of the application. The diagrams were also used to help understand the design of the application. + ## Review/mentoring contributions: - [PR1](https://github.com/AY2223S2-CS2113-T12-2/tp/pull/35#discussion_r1128972854) From 54d55d470961d5bcf8931b0151b2c93e600588bb Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sat, 8 Apr 2023 17:23:27 +0800 Subject: [PATCH 323/420] Fix spelling errors --- docs/team/Ryujikjs.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/team/Ryujikjs.md b/docs/team/Ryujikjs.md index bed3b92d23..02e98007bb 100644 --- a/docs/team/Ryujikjs.md +++ b/docs/team/Ryujikjs.md @@ -4,7 +4,7 @@ Hi I'm Ryuji Kow, an Aspiring Computer Engineer from National University Of Singapore, and I am currently enrolled in CS2113 where i am learning about Object Oriented Programming(OOP) in Java. -I have developed a product called Big PC partpicker alongside my teammates and my summary of contributions to the team project Big PC Partpicker are as shown below +I have developed a product called Big PC Partpicker(BigPP) alongside my teammates and my summary of contributions to the team project Big PC Partpicker are as shown below ### Summary of Contributions [Code Contributed](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17&tabOpen=true&tabType=authorship&tabAuthor=Ryujikjs&tabRepo=AY2223S2-CS2113-T12-2%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) @@ -18,7 +18,7 @@ I have developed a product called Big PC partpicker alongside my teammates and m - Added functionality to unselect a component for the PC build in builder mode. - Had to handle various exceptions such as invalid component input. - Had to make sure that unselected component was successfully removed from the PC object and replaced with null. - - `compare COMPONENT_TYPE INDEX_1 & INDEX_2` command for builder mode to compare the specifications of 2 comopnents of the same type + - `compare COMPONENT_TYPE INDEX_1 & INDEX_2` command for builder mode to compare the specifications of 2 components of the same type - Added functionality to compare 2 components in builder mode. - Had to make individual command classes for comparison within each component type, this was done to ensure code readability and also because a single command class to handle all comparisons would be too lengthy and unreadable. - Each individual command class has to handle various exceptions suchs as invalid components, invalid index, and also invalid command structure. @@ -30,20 +30,20 @@ I have developed a product called Big PC partpicker alongside my teammates and m - `unselect COMPONENT_TYPE` command guide - Detailed instructions on how to use the command along with an example code. - `compare COMPONENT_TYPE INDEX_1 & INDEX_2` command guide - - Detailed instructions on how to use the command allong with an example code. + - Detailed instructions on how to use the command along with an example code. - Glossary - Parameter Glossary - - Format table for glossary to include all parameters used, explanation of the paramter, type(e.g. string\integer) and also examples of the paramter - - Also inlcuded all possible inputs for certain parameters that have limited acceptable inputs. + - Format table for glossary to include all parameters used, explanation of the parameter, type(e.g. string\integer) and also examples of the parameter + - Also included all possible inputs for certain parameters that have limited acceptable inputs. - Command Glossary - - Format table to show commands, and thier format along with all possible flags that can be used with those commands + - Format table to show commands, and command format along with all possible flags that can be used with those commands - Acceptable Custom Component Commands - Show all custom commands and the parameters that need to be specified - Contributions to the DG: - `PC` Class Diagram - - Overview of the PC class architecture with diaggram for visualisation - - User Storeis + - Overview of the PC class architecture with diagram for visualisation + - User Stories - v1.0 and v2.0 user stories for different users - Non-functional Requirements - Instructions for Manual Testing From 3baff452056f45cc5acf876fb45a2eba9800b0cc Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 17:27:51 +0800 Subject: [PATCH 324/420] Revert accidental change of PcDiagram --- docs/uml-pictures/PcDiagram.png | Bin 135243 -> 135200 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index e0b4eb3efd3ba9fda1b3937d776e5a02a18100a3..e4b7d2fdf6acad52e84877fb3828453dd6b1e1b6 100644 GIT binary patch literal 135200 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%0A;0gyKQIQYXb+u zPKIi=rh5dJ#G6Uc4J1TWy}-;l39YoX7tEcT;blfp!8Z~?52Ys)%plB`W*igBJ(}l6 z-xn(e+xIN0s8}?>K|ul~K&9JVUC+XK&7Ao-QwpldkI3o!{Or_W7O9?ta=k(LOtn0L zNotc=80NnI*XMo*hc%WuIB?)-^doj<^h~rwgPf~@q)vU%#s%LmW}rc!L%c{fZF0ev z;n$y+_wEg~Y=h!RQSAB+mq>xgtFB$U_7RPgeGO2JG5`u?-1zZBLK?|Nf&#|d*~#eb zU`A1G(gpKUoH6N>gpz$&I#Mz)7V%H@Wvd0 z`9}$~72hPFD2don1fK>ay-fcYn;NtaI}h?vR-8cq2UiIhB#4dEG4KSl43xGInQT68 zA-#30kU*BOPEJ-rprG_bR>_HiLUT$Ft`qmCz%4%NtUV8=hm3r#le+S55+QD4;kg@r z9k=pY-ze4b2Mu5#Wp0P-8`+X!E~izROTifs$v^}!S>~VS^P zmwJ~aXiZXNl4JULUTBz+zKp2$zKpJH$7g;4Z4pg37QjmqfmG9CI0$8@OiS?H0!8sp^CQY zSTUw#VQC4Y6}eps+(CUs(qM~SmD`}4y=3@4^E1iG2iP>}>Ha_Xy4ZvPnMqsejTB^S zZWQ~$w z?O$hQ*#Wj!YKzo)*6r)}@B6F*dNwHd*d9ZT+{8r%YpIU+{3Zrdsz!`J zvJ^R75i(4wS|mP*-fIvj<8-qyH$?sfY!3W7J@<%vc(#h(WQvmX9oM*h9h?Kx?bic^ zOv^{dlw=clG2~bJZ|?xS*of`5w91;uUeNzTHgRND(yYgiamwuQRx*_#EyBXg zIc3n%OXL)n5hJ(}q_K{IRPi|M@e*X0iCPhR`ju^D?B!EY(V(<9g8Az#$>z*kxG)(^ zMT1tz$KihYFHFy-Ci*pQE|dFLv%F<5@gbHi(^k2gos9&|p1shJJ+y}{mEU++z~xey zmHG48CDuQ1GcH;W>TUMnJRXT&)3&!9+^RbV89FH zlNaDXsHzCetOYtLm=0NJ9H9r_VcN(sCOA$aVxsr>l(R=kD?JvoWhjUdv6z*r0jW`0 z;2c7onDhKO;ZaI`BWg}r6RNwC9-FO#>Q%*h~Jn3liGLwPSjQ?oHc_9 zJe=VDF3j*tzv?q`x#ZK z7SzslUl@e0MG;Q;{JPRP&=n{bxocMnm*u^c9C8_*B^x{a)&{FRfo9W>oNl(7GM|^n zCdc4JbTF*lPzZQh-rKg()#5I1wq3`7M@W$@RV2GUUsubECOXX-5-x@2Z`@{(5C2WL zvg@MCwA&bVzPsk*2;Uw-pB>F|VPo#T4wVcx$3GP=`$Dorja|+eI$K~KPbvUL!Q#eg1}_K1indyD(sIV z5OwwD&CMb+E}cKWY2(J!p?>5lb{tU}6TP=EC~j^m2?2c5p)M{9=gy^5BIQ34C$(Zz zc&~1ni4k8<(ZSHXj|*hT*7+HwR|s`{jaFz#1K!z)q7cA(m zsY>aJsHkw0Rz-AJsCu;dQ?NzzV@Gz+PTH82^`=(T$~b_AqZ= zUPV+$gdQ4CR7+HZY@0!M<)n>A3EVqNko`$ zSIsjKf1kgb<{j!nC>cG=Z{NSOoOsr7->frY%GXSQ$p5yu93X$SJP} zLxD9SnlN^`bkQO-5YM@7vZ8`x1F3nqP?CNRNt0)<(p~xX^XKZn$1)d7d8+R0*RO|K zNJ&M)GV|LvQ9{YfDkyATai115c$y&)!CHyslHOQ$4zz|~HyD!OVB*+@#tmHb_+JN; zJ|JGh^Qkp>0SYy)qk(`IzrR64@IWgEx%Fh|X-(!V47J7~6@U4%A0x9?R$6(P@*A)6 z^Ne2L&*3z5C^fr9zkUe}uhOb7eF2_xc17=ojGQk0`k58^hKVbyFW^y5Fa52QB`$vL z+xIdb;i{b7MCAHsr^Jt#Jb5{`rUH9y)soh^aPB}_T#yxjx&f_|qvKurvoNG2apDSh z#zV@-EY_k&wr4fS9McT_!j{s8P7ROlNkfGdM@bKf$F5?e2z)52koH@p!)K2jGq$pN z1Di`pi&p>$#cTSj?CgQ;$fSqNPo|HwcX!Vv0ia>@R;*e?dSiBx+e$}RNR?ZZ1KIDr z*2_K4&dpto1`Yy&#lG-rLH9xh>1G)PHuV5p08o&BN(E2aqX9^Jt)&a`6LydU_kN}} zf1gdyo+`=I(K-T}RY@R+$cPBwD8)QYBE&V9aMXZSUm6eq!J;=Wy)oON3~___!HK8w z@8m`yu6GcN66c_($S*Ol$Uh|gSKa8ga)DdV0LI?=$yhDP9eLht%6AkL?3&J*T~vU9oH#J_hghM6>nb>@0BQFSxlrW*4I= zkT}kSz7HvqX@Urg`8wg#-tmC+^}t5y6=L)iX&B;@4`pSdWvc*n3jm`D$%U*WRwgwR zwj6DgYDI1LhKnnRY-Qu^EPQ&Yg=Ch*$pL8#`;8GyJkfJtEVSZZn-S7fX0_QhRXm&V&r3g>M{}`Ed>HR zr9Sm4qdlnIN1Ar?PevZe9fVMATg}|y5su=ZF=W=ELpNgxK|G>jkByxP2exN91(5W2 zI3SLOVH-6yaZy2+E*aC$Ba_A^MRvziPLU?5ir*+^89I0A!u|3Y_?9Cd=Zpqw#mv~W zb*r%RX3&SwBKk5-WTBf@)^K0^BdACC8k|Wwc8Z)dYLvZ&v{BFOvhfoT(lSCjuA1=; z4FE=AV`Dq=t8n-9h=KkBUtoa1pC}XXg=Pz?{Tbjwe5=sDVB*1az=e}1H;dEIuGnHZi+ zP$f#z;nN^CWHhO%cB4l}JSgR|FiwG!62T=lH#Zj|niePGQ=iwDP6#Q7q|wsr(@BD7 zj!D(I^ats5fzCE=>B~l@U#dfw@3{Nav*aO6+cUl+x%%zN88EQ?NZi1ZU2BXM= z4!Vb0NWl(NXY}Tw$YzkS0SjPVws&z!i9llm#Vm>G)31ljPsYX$R$NSo^7_5JzHSwe zXOJ6~suc0iU91QtAY2e)pfWvZt-Hm3{k6A~=+GB2lJ+=0)p*d5D`SohC)z~A#<;Fn zVO91HqJd3g&m`x3*g7gc#6!$!pm0U+(sDdnR6Hwl&(8>i7gOvD%vVsS07yx@6bCo5Juuu5OYSg={sX+#-vg5I)StN%8r(OZw(+be`|tsl zh`A%9Cl>|tcIu#8nSV!fpzD5LHN-Q^Cs!HuJ{3=Wp3t))*(Z)=9v^tl~1 zZd0mLH$yC>JL1KN$oe1g)ZSPsxw^RgsHn)w&VE=qqwVA_imS}+N9?{#~}FBsV$VFcAOT9W_}gOc%v8r51b}b zjd)wbF)JJ_LCtv_B+#joxLVEYp&48gmQzr}&!3MM*j6EYt`F--Jv6DidhiW#9}K0N zkl3^LR|;j0%>FFt6?zL`Hp^@egA`N2I`oqM9)ZJ5*d6TWOU79H;2Ne=LC79OcajKb z4Fyk6K?Fxv*K$}iCx5BH-X@IGLTiYQk5b!Kt)f9IGgCK|m__unO3^4See(rln=rzs_4Zy}nx%hQr-kXnaT6wRBiwBUX>NGp@jS@UadD!Xcgvq>{UHYgi;i6!z3N^%N)TaU5WyH=+VJ{pj)OBy$^|pU(*eG^T;DGlX`?l>k ze31R|+s!+>f2DihS$WRRJ@w^eb&X<@4wd_d9k;A@`^`Q17=_U^XEYF zZn-S8Pr!}ZQ5c~!ys52CX;O}baSxB{1Mq`@BrS=Pmy!XdT*)r(M`8b38dR z^qAHwt4xAzZZXtdnpl!iTTHssC z3TBzA29A=lHqa_$&f)dlyT%|Gkn+pN&A<7Bb$EGtyyB5Jd8KotB6HFYNv0B(jd<5F z+w28km~eXHD0laV9&%FDe7bDT%R6LORYKDeuBfi9R{ZQ9)Jl?hGo;z6$6~IYr8P}z z<@Ny)`8?n$J~cf0LCA5YK@2dKMRlt+w>gz+0t4t|g^Cw)GF|-x*|g9VnX06>&-7(c zNlD?cdvbQephSN>cI?pK%BucReT}M3fa0Egb&_qfs8uoMivt22BNQBHj3(mZ#PHlg zo(jQv5^~2Ns_e7Xm}j6Jg%dMflrLI|)U?Punx}kiA^lzxlK^Ic31%DzjX)-R8EXSH zDqq}{g;SW?_Lzi}+Rr{Qi3t9b z`4p+GZ`5f?VVA`Of^ekbwl&(ApT2y-0j?5A*LBCxI!nB3c^hQvniY~}SV#?)-H(`D z%>)>r3uZ7A6Q4B%fv*#!bXWQOv#q2#TD2!mK-;8LW(%B0^~R?# zTS`mO}E_6~0rL zjzbZ4-1P9)EyM2J7tl_x8aGtRQsu8@Gg7>Lru7f{fHT3y>iUn?QlE9T7E;zdUYt@t zZ~4a_=rwpp#GLL4i`Jwxkt!c!dD5nBTcDKV>)rfsG2+p%U0@7eP+=w|CqsIL9@^Vz zs?ceIVPnAJK zP}iYCg@O_Y&GEVv)#0pr@?Ol%aBfFNmV&c0bz_xUfHboCA0Nri5VCEy ze?2pj$|)_CJ^QhWNpOnTdRG7W!$yDi##^#$&x;B-bgrIyPMBmvZrGs6L%d}OeE=@Z zbbY@XOJ4aN^}k=Bh!=BmhXN~RAE{|6i#Ax5Me~I_*E@~aFZ?_s2Cf(T#-wwb&A|5G zJ4(>;8YaJ_gss}bx@WQ9QmWtY!!s1woCuGHY;EB{2J1+sA~L>S!cG=b5QD`ct1ipt1rKB|Bm`@<3>GADditIDFUhppJ;KnO?}Oy`usOn>}=_Z zL-xNfDdBt;6=4vegX1ll023mvzq^8Tocxi3<_cm_JUMxS(A-Y!9cw@ORMdu%Tj}og zq0Jfbi&62aEqiy+9NV?)ZfGOv(iMO&Lt-n*Y!Ik_L1}H_>arK?&xfjVGVhxlfxw+} zTK|YosomCR6cT6l={V$6B!g0*wB@%n)n?5;aHB7!KVbcFe@W)$bhDcEML_oiJ8)qI zRuyTO1)|Q;7!bG!xn58syVXwerG`rr3K(#P>8!+pmHQgI)EO*s+Qm&gn|t(=^rncZFIokpGcK(aZgJ3a zxciB0^P(vuI^3=Cq^7e}s>dgi9m5(&Fbg~ajE1ne!PN*K19O|HjZHiAyuvOY30ziPKSZmrq2tWMUO$ZO3)CuAiyca zKN(9|3SCw>IrqjlTF`LZ(*V$|Y5QT$=rCrBW2LL>W4?efIdMnIZshsmSS_xo1Ig+M;#rInwS5S(3FMBy z_rKH&UrdzjY-@g{ki@<}GUi?@5~uJx;Vn4Ke7D{{uRw|XzddWzwJ!wHyE!CDb0+f^PVC)grjBDAqY;y(TRPx{pn|9^NIWVYT9t=g^<_qyVl>9T zC{B{?M4FB@WEr=c5uLec`}(4SMnQMvi_GjN_g-*APD=iYWgxeW^rI<>k=QB3U8DgJ zj-XqpB(BOTH&M~&^yn9}fDj+2B_|odpzG&!JhF*l*=nZB_SmeltaY=7{iU|eBvzzU zz1u=lYk#j9iUEIwjw++~H_&o=Dw+;R!+W`B+5ju;?w7VJhV5Jc9HWUM#6}}VfGq>6 zK1z0Z2Z)#yRKyj-AzNvp$j4iw3A)1H@atxClXdIYe|^U;seE)JqsCsv9H6t% z9e(oeCQ~M(NBV`=sgw~%bg2X}SH*;wLy$e}+XQ)88o%P$z88BOFb4z~m0%(w@um3q zyXx9fmaTY3gr1?~=G93|P@U*ZlaEo^S%?8Cdl7Dr5kvUZ7Plp;ix{2NH1h!%Lz9xvg9!KfQmo*u=M7s$ zWTe?&&;9}IWwK<7vM;3_`pn7Vt}&;ssiB#2vMaD$$rU%7^M%oC^%*^3LOd>`5gXl! zyM)pts{F@>Ql-n1C6~D_4gQc|khU5Z5`qnNMr55YpwtU<=Fg19%$VVD!Sd}cdCBz? z%?A*k_1ld#p+Pk>IO3m7jtF;5E~P>;BzB7RkceC=k%U>9?a@E(Q$j*FI7LzxxqiB9 zV*LjFJ)c1+F{y^@a|Hi5a3GVeL%vS|lkv!{`QYhqh?!|CJZ4btRh$@mQaD|6_=}cz zXw&AO{rj1Id?;R77?X>vLZgn1&e(Y%?JJQ{dSJuqgq4i8jt;1QxUR0%QnvP7A`V>y zE{p9@eM-(>*ejU${b&96PO^l)I)!qSo;g(lXEZwguG4s1gjqpdqygb128M^ZidqPO z{pSI%^z9j3gUA_eHm$jeRC=CGv^rHL$IVsxGZoMDV(rRa9QjthK~9?Ub48HhVCA@>9ArMKMJ z({;s)6+d5{=N=u#c1Vf?4nWux2SGGZrZYnx61g$7@w@ky1_3hzd*NN}61sFTbG6cD|{qWW?ZWUvH?c@w`vktQouu3&`Z6v2pdp@OL7Qpb& z=T{evGkj=8a!Ea+X;g#rXv@>iWBSc0XkVkeAbGvn0sz*Rko8Dof!ygw9hDK3v3n56 zG1W9oZ5jwb7_XAm1s%i$rr4UFq4wb_z4rNRZ08<$BO_x|%u&R}pPDGF`hguTLfMNU zFcw6!O51 zw&HiK1)|7Ut0vX08}a`%Jg;XdhkqBOunSjMzj{>-0>;Mw4H1V=VrN2h-`zp2A1aQC z6E&Qh@B&tTMNNVx|G_dxO-D!cs&q33e`>Dw^aHXuI>M*}Y(u5e1fq3h{rV@qbLXC* zyH*#_Gg;Vr@jx}V6&_)i{eV<8&Bv!c!}w4|iB$O(lEdj_Ny&j@L+U5*{nO27U`&ER zNA>!~a*~rluU@0>dGz+!PEDqFrr0&Pe#qkgc>E|Xs!XPiD7>K3Fy`=wKZ7@?)ufs7R`P5j8V9*QZvOg11p}z9`x+Vq z)Dr{%wQ+uru$NT!D9NgxHIp>X(U|RIZ2X-EtTWj4UhLwuv<=GC=Cn5{-d^v5Q^~ZD zqQ=F1+=R!+><(w_4>gv|^k)Wz)LKN1*V;}NjC{D|(p0+dIejUNI$q?_3l*sjv5rdJ z){=6YU7n<;(fw1(nprT(IN7~KinwP_cv3hA@aV+R^WI!JgL?_^5}N&0n<<^t(>II4rnc4E{fa4frr%PNO+j*xpQD)k5X;P zZVqfhjh9?hitxz+3j@r$Lqc*%)T+U@n)}fsAu?kTgDRT@{#+E#`pT^ONS?cmK9-Ms zyk>IFlox2`X=$$_RQB6;{=LcH-Q1Mmtf`0h5~@yKSK7z?O?D8Qb+4XC9ub?BhqR)~y#K z=;sV)&4(TP#Lev}=T@(_*~XJ{Yu7Tei-@>{^bS*V?`2V6gq@oqmo)=!@6xi=yLU_S z$W?57oO8LaGz$g=%5}fn^J*oTdcJoH$w>;BL*Q_Jo)>*se#44ulLJ5ghRkN1bh;{r z`S?tN6PTz^-+d=TkfM_>&uhEoG-sLLzS(;1je$#)+;WOqvZqOKi#uu22P&iwdN-*L zv2_Nw^(-B_P{GS-;%AshnT=rn31inI0GY2GkiFoXG7q;cp$j(*6?C1aQ4|a3P3%GN{ zeA89gzP9t9cQ@NjK8EU>xL+Gio4zn2ky?lJsVp`nO z?ly{wqmNJ;>N<+@OapcqLbU3m-TnXl%xtn|>kXK?A247g2%^tu4-bgD326A!ic-9W z8|28-i3a_RP=x>BQD^wdhOp5dVs?aUNQYW^i)~>ual{tJDkC-xw%f4onF^_~GzMl5 zv{YYg5`^|{3U&t+z|{4rsn8ioWZFu_gIq0v+hR@7rAAz5+@z_My0q#Cmh7Tg(cGds zE;gDLh7cOL~z-`>PJ4bb=p6b-d%;@w|LY&-@4McZzuTq=N7+KM zZHZ(3NDtv+yd3hIAhv`_T9)WtTvlHQT&?PMJ(Og}#GFg+do5ivE4aq|{CuPa-&Ego zecv5|Yjyd!g#$}Gn>1W^AlGNu%ky(oPqvyfm`_gAO5oP-6K3Bs@^!hO9WY^iAJ4T}Z{%%Quz5d)-zzqhDFB)C4xKy0sxufO5 zg9i+=yiDFX=dC-E*Jz5Xh+rOkx&8AhUMNagZVA zsEf?DZ{B=ZH9SgYzeH)e)0>xQ?;@-*ONklTnO45I91c0a?0wFL6uOuf*w$1y(6i(c zQLfNqPI7sjL0E@rmxD>>XW}kg$i}jhny*L^mQ7r`&JtrX{El0bvV%>M3WQd+R#DQN zhmG$N{d%2KeM_|~(2=!nJ znA*B1PZ+L0W?Q?d_Mfd4>pahmd@I+^q(8tsRLkNaIwEGTfy|UhGsa{d3uiijIsh}D z$`8+k8=`HC3xA_R)D9#xz4i1`|7xa&I2k5$g95gf5JN!c508tNH_~Y(TM)fiYT-Mj zaqr$2ad`My!ETGW7Byev+sN3_>q9~!hv`nT^-6D<9g_9K%iPfL7HwX)mKnEbHPah- z^ZGRsrC%T=&giEH+`dbHWD6AwmO{T8(=<;(V$D>}zP|HmL+We^?y0u4`{cFr6ztv` zopKIqQK=Yj4uM%kBdCAmHqyb@U%!sc$TdC)a6tq+?^r_k`$t{Imu$Q<<+N8|W3^Jt z48O^(e|N9Fnc3DWi95IHDV|R!GL~fSyZijOOTYRTq1JXC&Q7|RmXRUuDy2UJ(>`nV z6Qg$FA*j)z)v!DOat6A)>rOrT^Mux&eO9@1GoHY#uP8c^aSzo0)1;BLtPZlc?MW*s z>Thbebd(}#JL{jDoBQn9kADSP$VHkd)EW~!JRW(Ram;EZm#%K96xgV!E6tx+Qf}+e z)$U2$ZN!jou{`0YDB|vOtVN??TI$lS;An$AOS*#}nqDEcxw_R&n=6C4+>@Iw7#v0c z(@;LSKEzLQ=<~2%+k&_Mj|EigG6MURWj7$(E%V>LI)ilV`I&vMyLhuNH$Uq?{i}L6 zP4_hlS4Ujf|9qXzu%Pfuc9ZqdN~v@0E{@K#t7Go0bGQpDWkW%&i5g8yQ}c1chQy5n zAhzpiB|!QzaU!nFx;p&Ri935)E!wW<=~sOVd+~9Nu3eCl^t;(J9ckp>C_ecKTN|M1 zviA|7J()6zBqSIz{!{(2QpM6hdNr^_a?OWehcreS2SKD)-04sMH))Qx9{`VtAY%&= zEeY&$W?GO%#u%oL@wl<%T8tyMk6psO zo}BDDKu`J`*=6G|(vtv5z8a84Cq#4uYuf&9{`aiOjE{_F_T&P&E~JIlb3|`!jrJw0 z{pL-de)D?Teq~{XFC+k0wlaLBtg4F7u>Yb(`MH&7uVZJdA9&-PNENqkjA(8-^ly-t z_C%iUWN)4|4Dk?9uF$bQ_1*^VrJ6K_o8XkV+UWcV#}_tR`vi?RZ|T_m;fQYIGcL7i z;}rG8=>A-n(uHFe%e$cY1)8ODl>t&z9Dz#e*nmi)mQY(9x^%$*dy4|7DsUiKnxnO2 z=pBzU0slTG%jq^QTCyZ|#uwvbOtpOK{fcNI%vusQOuV*K3{8+lxq6PC^DEIYd{wuP zK_&I_tZ4Z!Bg$G&yL-6f@gb7ehzolaUfG$1*ImUSNDJNoNZ4A(V)1Ndm)%Z`y%6HX zr5pBl|I7FPZeZWedFPY8S+mPb_NqH=;R+oWwdQ4sr53Nw`9Ge1vtV1IYTpNgi}Z&@ z5TR#lj{euiPyFMxeDQm*agPC$r-(3WtMzCMH7MKi^{I~z9Of_{LW7I3h;ZifzB8LOsd{D|vS zGrWV>{Lff88b+Dc8m>kr4Y0zg?PFjeb|{u_9vqlDdP3EoKlM1v#o`B%Hbi?0j8sZckdfW0wf`lBY=`zi6mk0a@%#=gq~!}q-jw~t z$K*fTImRr0T@%gp3nu_~py@#`0Yo-c`SRog-UN*`y~T@%)Y`3{Zm?CBL#@=pH}7H5 z)D$iUjgWKFJ$L1bO7rG3Jf?Ef<4g`Q1Jr3&!fw&L5?*G?l!I2GiMI|5JqEzay-RXbM~9BpK7gPp~px=Q1p zTLN=d9yTvnw9m}lds&X#Al_h+H!W`u7XF8*`Wdp(&=$&5rv^=F+VO4vX{bq<6mOpiNj%CQ7S0MwV zCt`=~>8ZD>AEP+m>az&Zgn86<8`iI9dT8H>rnbFW4YBh!`l4Ossv0F`Xqom4?$9_{ z@6*If3ePq^L~?D>ySHKeOm2Dm2MvLUfHn(`y0sdwck^Fs1d(RfkcXQ~MgQ$QiFRVh zy8Z))Wwk0(xEwTdFeVPv-dX3lHgn06zWca@`LMVbvU&M}riOYJrP_8^xUlqKM8v>v zu55Z-Mz(79uIgrI0)p-7UF_-Qb&28nheh?Qli$*%M+;}&Ydfv6*gsC=BlWZ-nZn=L zFWHUwAIVD!blPorNkJ$4VZqxY%prm%v~)14Ld)N!O|vhJh6c_arXiPTUm{%)mWm(= zgd`C3VPRp+Qr0!gYJPl(-PYG#2gZ)>vSX;FH}9|8?f>m}bC2LZj?d6R%Ozb`1v1D) z7Mn4n5R=5P`ld5y&APDTrqvXdw1uUTG-oP5H+;*uLA{GNS4^CyP&7m&14%N{YlwJ_ zCBOfA3`LQj>Tpv#x?|}^{}KCaFL77=>(`cyNkBnmo*c{Xo@V3&R-3C#Y&vz?pmXQ> z#=&;p&_;G22lj0=J#d^tw-FQfTesQSZ9xme|EJe_T%-F;*oRXZzoewEHBzuo1LA(t zPjCJ2_t-kI@6ESC-%B4j9C!8)7l-QqYQyZG`|3~gYhqya_`T1{TN-KnI{Vu$&3x(W&kkk(A-x&y&I;DHv4%>k|m`1R{oeL+YE zf;gbmV|iIDDj?hCebQC_{ffhhBB(Y4nyY9=HrezfB=etc|L1o-FkT0%`woqy6H!-J zxH(OVifaJkrP1&XbY19Nuf=e}90~!}RoxtCp?6#1Wd8nNq}7C>SozyszH=Sdb@Q=|f4$uJG{3!^4slFJFx6 zCL)mXMZ-o}O<@wFmPEIglZO7!^JEZTcNU=&?x~bl%n6{nn?cT7{K)!l@~DB7e22Q1 za#tvN4qB~!2K=oexm0BLo;@uz&0-P~cI)g851+PhA)-_dCOX>3{4`IyN|#s-v(;#%kqsG>&O7F6WY{udXFFvm$>bzn3usYZ#r)53l8Xj>if(zWWT0ZvORNj%{4YAxCjPwK@#&4_nJPoAeQ} zOV$0?n>xdDAhroxl~ z3jS;VuRg`(_>>vHBA(^ejSKviFYXdjH?YUq-f!%8blN zNU}0ALm{L=%P6wSJgBT}Wh<025+X87O7={dDWs&3N@bK1@x7kZIi2(Qe1GHp*LlBh z?^Cbm^Z6L}`*mIS>w?S@-u@mHE1m$fUjXwSUjrp9^pAHP=eLCN#$7z&D~!*G zk&7mR01!g*X}5RbtXanz;uf_h_DSH=k84RJqev1-nCMPOB-WUv)|#BOHTIxi(*sZ( z<1iJO88>4){zPebGHDiN7fdr%FrLFn&RLLNm>!W!wXcF~5v@Mbwr;eTOx-;46Q zcX4=525@DqFM85s>sq&8TsFLc>`TZJfa+s{c|byW)7y(;ES6jnlP&lM)VJ>Y#6Mt5 z!^03|RLt7<08(BHnP+EZ!SV`sUte?cjY}5Oq5ij+iKDkrkeu|cCEv~VFRb8^P?B2m zuV=Zov5zE6>%S`=kJD1wt|3PuCF=U&^WAScPoiLl0D=RM_Fgz|adPI&FeUdyf!O6) zwJO7#4|v?qI~OK=-Cz|*$aB`NeRQ5a{6(n^6R-^!n)g2bixd-wU5%((V6OO;5JH4! z@-Y%0<=?xS;)vu%Nl9LK3u$VXq(}GJl6m#legdH+GP|B;(H6!RwO% z@hhaCFkeEt92POAe-D`x?NWp9c*CK+}o~9MUXOa3VXyv1ZNoBiZHUTRquG z*ZIrd@5FPY( zLWL)Bzr6e;Pw{88sFtI&LpCb7GW1CJwOJ<3HYBPQKd%}gmKn20s&u4#jU52|m<5** z3=%IZu{hGBXsSD!^WAh&+(YL9I(2#)PR?oSKf+HW>kzz0Tibt8&Tq{8Y$AcUgdwXf zb9fe|{052`yO>kMQlyUG2d!-qqwZ$4otV-80JYu^DcG@sB!^EsVWbPPp|7~UUTgO` zQ!}#@kXS?8RsJ^RXy%H;)om@omnqe%2=rpO^EeheMrcYx@pXjEii~3(_tWg&cz96z z@cQe}lXYb3VPNb&d>@OBQuM_=$_}@VhV) zLkupyA0r7Uo-ig3)u2rCT+(gKZUa#Tz!HHb9iyNZccPbn2Z3XA(*50GbF@xyxq~AY zIP$U3&WaTzKE_{H3h|^nq%3QLP!2$=*%^vaSIkHYv4ZMgWvxw!T&G%zF_g`lJD)uH zl3(_6x9IADE)52IR?^S)sNv&uQb&-8hBd;<=l8nvI7`+(w*ASpEhcCR%*$OfmsDdE z;Vfzk9fOl-nPTR(yEgp4JY6XGHH=ihA#>6qTht97{a zo|oFa`Sb|^(8kz?fdkQI;5BiS_I*qB{B@OWIGDrsZPiO$^*KuyEvbiwWE9sU#AQRV zn-$y1c^!lj-J3V?gIcYAJ&Xq2-D2Uj(|=CVI>;HshQB527l70$#iD+i4S4X9QvaHic93YIr^ZTfwDf9oYUJ$k81IdZN^Xg)-CuiV3@pFjn`pF? zYF3mns!IUrG2#c+2lYgaEhM9c_8}*Q2+7LsMZ;Y$rF0Dvi7B|H3zoIjG&BSs%Z5l8 z5+DMP=lhxT6>}#zO^tK*415Jark5a22&9n29uct?7@+6A8x4kD%ePB&-`x^Yn#v9B zQo0_RF=q4gj^fjsNgWJWx~Jn+ zzKpIT579LJ81|`ZXdNAiN)1moY^Qi_Uu;UsNf=Ii`0!lxJBO|tHXmgF^Eg-G1&NGT zTX<)kVv6$=VC*Uz!g2jvId`%~J`=p_ecb5il3_7@55iaCWPK}P!32xQ=A1{5AD1sb zXFV=4O+hn*YfE1XMC1!z8d_S*s_hMjvpmFS7SWGlnB9N=>)9lcZOm#rf7hohf%cRP zfX!Osttl#!Nw12C-^P&D4i9{bSVjyxum7n zel4?`+%|fdMqa{ewCbY54%wp6Oo5~qJO}Oa@^tq#rX_@IAtma}lgjn+a% zH7J{_B;q8@em=hDvaAEz#pkyjbQYfmP?c}OgqHrk9-d8SN>9aDV(Q{9XGmlDIyKpI z-n%kqwg?A^dqI}eY$c6opGVSby7)L0mMP_lm|tahdHub+cOf|jzzZ{d=&m}xL;8hk z^#Xxa!{YuD<)GJ_NN6bI)S;0jnky5+BnIsHv6yAD?rCB|0^BpABKk}~^_{)4h&E5= z8rwIk_C~zHp^*_}qKUcg3f5pjG9)Zpm6+Aqj`cv9M5ZAtK-ELT!L_ty$(UYZ{@9c_ zV@|&~{t;PS_z#HthY!!~v35KvLuyVK_@VS8jXmQIqsg4K7o5iMO7)sC?_6Q^bmmQFZinRWHtvEBER~oy|K*WshIj^7~TmAOi)pZXh zul&BskGtOdG)2}C4V`X8V;ix zSz_ribi9>^XtL0$xH}Rw9bGg*)3x|NVJzL|?CPrM{K`K+UxM@7`=0YBr#_;B<6e1M z_f23n^8eD`*f?*Rbe+-U|H- z1r-D4trQP7+Vu5e#xZkuk-~Nx^s^9$>6ZNk+j%zj6q5*3hxKgKq(1u>@1x>hJ~_t3 zxFw?Z?H;St4KCjXv3cFvLu6<|^i4mG4KE}w->ehjH29=9K86J~2NSEr-5Wir$K1o` z&y(j&=y4~x&p+H)fCZ}brHr>Rif0bGa7ZqqcAY{t^_Gs!i6PHiZ{I%O+lq71X0SF9 zX>j+*-1RZ ziahA3e#!7i2qk*Wt)v`1AV4|Fd6vR9Sk?Cr|tfgE@|trEaEBP~fwz>-J4zVgfG! z;<}CH=QUFEKnWZ%brzaY_@Ht{pF1bO8JMCBz!b<4DkOKYZQFb?$uX>qP8E@|*aVp_ zjPW7;{oBW_V=i30Z~=xQnz@W%s_(q)>MBl4^M4^k5hGIm*UHC-zNAX5<|Rp={c{fo zHf0VSJg5l|Fo-j-`63NnMs0R-kvinC7~*Ywo_3$fJ9K@=g1Qb>S|Tn5pa2L`f zt==!w{4vgSpINCbM&-HeazORe{}7kcW4(}^{2T=#*Y>szAy>~PR(2GVjjcslVsFAJ zoNx-upLI?@oD!A8g`L(wtfAF5TWiP6aHX*SRO6geN;;-PnMFMb{exXq8n11Gd>ddXI5~p8NkiB|GG=nl9N>W}P&0KB3mLW*dp$D7-43_Ts zCzU>Db|1>j&hF+b)3c)0`EPICY@h?3JYTlJ2EC748(7)TpTB+9wvXf*S@f%1dQUUGajTmf`7PXsT1TW>i-3orSqmA#8lIU%-x8bJ&3QC1z_}_;s<6< z3Hjl=_ek)?i8ni!jJv2z#KKUpy^ zm=N3%OExBqosQ}CbH5wyw=LfWI}SVkb741sums13ItA`3TErTt5aTdW1_#C-4wLZ>I`Xs-WJ&Z!KHb?G?)9JU3Ev*WFysD?|zR%E2JfewI_?ixK>HuXS|Sg-_hkEo?k)A`+nPCKT}95A$JnrZ!l za^_QK2DQ`KekMcSGNYlrg6@1XPY%IE4o76>Q6U-seT2ZGE3bWb^5yzs$W`d&t&L?e z*J553iv*urMl@kSrbTtEne-(NMH^fgwx5J#s+0}q_wbz4os%ziDzd>pA1MD*YnL-{ zzlAG~(~QK!C9RL8z5T;|=g|6r<--XKY~2A>9Rdm>-BN=i@QUv;^}Rw>ReKlI+MG2V zXb6=xB;vA56C{t3z)3v5(?E<4`}fC=4>%)rSJbj$sGxgu`4`Wzjvh=AJ)Crl`&fgE6@os^8*M~2KdM&N3&!K?=s+nb&+Lq8s_AU_y3Ol$P*@$2E zoJZvrp!mWn+qaceN1oO5o@>Bq)qMFDc#fCSBnpuwQt}ttaDm%iatsQ@?{kBTyQnZR zj-%r!J+{|a(xKM?5ym)zsr{qC;*u^LlMU~8oG28qdw0NzfYA5<4WUQA-==(OKqL6f z9k$fdf0r?UD=??eHYY;zzd)Pgmk*S9GA2kJ z#=n>=+!|qrKP;i{&z4a4YG+mA8MmL16_|l}-&3@M*>7OIT;#ffbp6*twz^9kauB2z zR-LlwHO7sIXb)wc^TP55Q%s7|qz6HSy5*wdO(jxH60XpxpYqqgqNmG;VI0E8ArxWk z;vHSaEQWqsYI%Fl!}(aZOq;75jU_OD*WoXZlSUH$oRhe1>hrb<$GLFvf0dUZ#L zQC>Ogc{of$0~D92exLx7y7YJCuZTJ()=!7d2Sy>guJ9t)P%3!I$Xj zs!mim?4G-oV^+vSEpKW|+@WWolUsfpe?q%ix6G~oQUWH#P zis}A-FH0NzA+iZDrl-5FuhcGHsuh3&Zf+h0=QLyGa=SRcrIY`Qry+#|zyFn%{Ck0H z{5b&$G&iq`4En()e`IK=6Ss2L^`%?+qa`ZM=cC4vOun)9n7D^g1QrzsGQj4nb{E|V zm2tX$ACqZ+6WB)w&3AH1xw69hTf1gxJl*t4lDyLqj5!c4Eio}_yV}fFSd0-wZc3IQ zs~(r3TDp<w-FT9pcFH&@qQ@+m3s zD98UlmII?)d(^YkR~n+kX_~GeipGy_>m)M>BbpJYq^> zxwOU0WxIE8UOFaseepaXknkyqja{ajm0ay6+L>ooJ5TL|hcJGdhlj`YZXsDq)PTvS zi?e<6GISs8%!RIdu(3%whJMGIQZ3Vu%CigHDnw)&=KUuyAf^vEN^3n&CqW2o+yK!^ zK>^ah>=D8N-^zDSR+-n5xnBkNodO~c@bXEm(3kn5$|RYy_LP89!EOn}gWmdKfP(&u zmQTW2H61EG6-_WgDV6DGerzH6&)_EOwr_+XmaC^H(CHBrI~RA3U^W-DBBrY873Yo_ z{xsEr#{{9lSeR%#%G3O{o|;_7(DWn6z(O+qpIGw1YKfVzkdU^d&4E?q)&9R)(N2|o zSlpzP|?+^q--L3Z0|*B>#; z_Ys)}-rPs`*`K({rp56+f9kfc^p;RG$Kx#!hpg+z^-gXljYgd|ql}NH@1eValR5+%COe(2G~5DbGU1Ps06HkUcFT!Y0W0zUsOS=gV<#Jzp$ zpq5rW>{=c@W&SM}PsrLMw%5z+F4PT|F7;td5EroBmEj)H5isw>)`Z35bd&(#t?jDQ z`;#ZVW(ym#P389NPel!&m}7XGP=Sl1h!ll zBxjtu6$Q!J1s@t!QC4=|O8r8htnDnay#gxUHJ`b{ePQ+>Lojvq8x7f7pqmsBegfUZ1U(mY zCs|FOOTKU`O8Y;}-1rk*x*i5T?e5|*-Ek|;rD$}QcqMXL;RqiWZ`&JuyZ7mBFDjDl zc7Pwcjn4lSb^p>utl43Ji7F(UVv@13XH>IjeiVUi$;o<63_Hx+tK)k91A;ZenGfY% z3%#DMuCtrl8y*OzepPo9+XONwin3SDi3lzodpv>9G5PxV7uWi}|MtdmvFU&chhtE! z;evRF+))AwGAN=iPr?uf2B{ES70t0ZVE#F}qrTOjUEAd7-LjkcR8`G6L^izvyy9K~ z>Di$t>Seznq96m5ZU25r%Q~ieU4w8$`x~Az%`0DZe(oRncDEJ#Q>%l|UUQPt*5ITT zmRMjdVzA!gKYGOAgG)joHdn{ z1=uzx6bJ?Q&dvWD5%Y2czLOzyF^mL(6%l_R=%@Nckmf0LY74_p0U)NU%Yp+Xx((IetG;DbKcokp7Z(umcP?rNH-5f$lhxy^Adwc~D|)X% zGOyvzt%fZmwT%Feb|noqtL5zJ+T5}oJcD}$5+WeE#X$y~V+}jI+p6m z7 z(RZoEQb}OCxe=o+MP6`Wup84ouCuELlN)UJ3)!A4p46iuxe5~6pC~w95sH<2_fEqT z9-bePkti19#sPpKdEyOZCeji8-l7SE*lL)7;o;^!1H0Z}jo7$29CS-U^wzd=7$5we z27;BcOeLn6AYz>2B9N?r@f#Srfcql4o{ms^m+52Y4Mk=QwRf+OVA-eCZnMaE>P_(P zS#aEwv7RiR2^Gd*<@z#onD9|xehdPqC^gN&yYSLUbc$C-7SC5~Zay`3_wl-ZAnPx= zAu@kmDSugY>(+Bu&Z%5ykz=+pF?7Db5f}cC>U=6i#4LKQ?wUqz4l%18 zgweEK&kwOS;aBPh1}co570!sVi9mtz46q4EULpuN-fbUQGg0ZyrtRO0no+yvxw+fp zLp#X)HU2n2o2jv4evM8*NPKPM&%@xY%Baz}^&aL}IzoYp#ovk2&&R-4p2N|4w!+YX z1m*?RGjA6z?ER{;K&>(Seg*BC66X8+3n=k;mXzz*l?RnCPHAo zS0O5?<9hRj2R)9TE85MgJsW)Q_kQx3*+xBlN?|hZ z8PlU}4uel$wr_JN_^O=jMpJ92@c2GOcM+Wa3su1|K!J8MH`i(kT?!^InFGF391LY^ ze8Ou#j->DgkbUr!s}VIwQJ%$FkraGF<13JvLchfY0(+Nt;@y^1UQ{#*gE4v<8rY40 zhdW5{foc$U>X#A{*z^KhviH8o3DMWS=)9`9tef$zQ#B8QNGSYXgIjQ>{|FmUY3V6g z3t5(f=0ni~v2hh9#@yVttcGn>>QLL;=(q^v!r`;@T3|3x#`e9p+Ee_uNmB9E#`GLa zvpLq3nvoeuL~1nvsII1~Bh@&gF804;Q4u8V>QF)0WkC@I9vo%~EUvP-0p*l$0<^nr z7dQ1nADkp`A?cd2>C^6MDITL$Kd0i?un86VRp+%`mOamIZ=)6;EaC9bRNw}6Wc3V5 zQ?mtg-j)^PzC-l%Wg*JWT1jeTecE?vlUa;6rD3viXvyyN_?$nvEI@hyaVJ<7Umd}TXxQ2ckDde38;Gy!Ae z!!KAUYhoT;y>+FEWgr%^0m4rxajk+g!o9*XRp-V_AWYcCE-EgL`u&)lt%Q;iBBvs~ zPikvZ%?P+Zd-7y8q-0$lT%if7KgI+f?UilK$jOYoL4&B)_NGHfS5#KM(z?i9E^7vN zfo{y9B#i2$@4gsZAbK1|i7NOD#3ejyj5dtFwnzk=j|gW39F50a46VnzPxYSK0X@HZ zC|*Wra4>>v#Zhwg+!qE_{{30u0bkcm6_7WI;nRX*PGjX=A^T)YT6=ARthIRT8u$?m zLMb{q1@~8ST0Q#U*@K!Vsae(=soh~Y`Px`O;O!RpDcGp~o`y^P8E2eT^vho#GNxYXbo3^lSvB4$hdFb_l6cFAin z2W=RRbf+JVWPU)3o)wbIKYQMrHGq$oEV{2$?pz5?fHUi2*!QSBYIWwr)pjp=)R|R+ z$3ME)%_c)NfChMi^%aId#aY&^Yfp8wKuFppzZ&lPUE>=v7{UN7J}hKUzmKDw=B;V} zt~Vgj@EPl}cja6j>3pJbESxSW6^R1yzuO$BdD0*OF8ZxHDl)kbB{)6~IUGHjA?m{s zS?iq~;|u>2#QVUmvi7(-`L>!tzeS#>q%%R{@qVyxh0*~|pzPiQ^K&y^hghv>>-=|3 z7Fgb%A7=Av!C+~^Ci9iyFinKfBiG1f&W>Z2t(T<}n&~JYsz98!RKL?JOuaIVXjm>h zl{yj1ub<}cC^%4`p{3P^E|k*o0Onx^N}!SbF3YAqFX((=m_#M9e*GxUkHR;A0&7(o zhC#rNn18;9VI*e4R0sw$5<=CEKfZsLGAY4WHo6e5kD*5LC;BNz5QIi{pY?hXy|0c* zP4YhdJMirNj&Nu zw;{9euq&BNg~tgFxi`Y%{722`V}->aR)h*{1aWXj8yUWnqSkH|NRV=fOjOgw)Hqem z1iGN0Ly@_z$#R{dkIHD@K_&9gEQWN#dKR4?yla}f03{#ZXQ);+f5@gV4mc z=Ki>-LSYwEDE^qiwz$yRfK#uKB?Y6en2?335%tM_D0+S+a6^HtBW zZpfV_NNo^dmr(7}e!h zL4X2`JSkY={i@SSTPPM%nvwI$U}Kg+kHy-pu0qIEgMt~YziEn75Fd?6GdDj?z|iK@ z`Yc)JSVIlwdcjwllb>q4u&Fce3V5v)z;}A%KZ|$OTPJ4z>*3MSRcI(TrXzT~#=2 zfU7{$)wOtHQD92+*xnI2PO);jBbJr7I-+vTE5@G{tV^jX_nEts!zD>u6cpq;+ai%R z40l16AE$AmtdpEm)mN1cv3K>7>9O7u$zfwwOxbztUF?aVc7mHC(Ffe3c(8W zhi?EpATg7Osy;Bjjww`_CcsGjC5<{W1CHUWr~bq#e2@K~Q+V|t3uWiQcV?fX_-Nkp zol$z>ys&=DmR0>D!ptj(c~$WT0CsR=O_x`rSBFN|lp~kkCrF0miGzO+CO(Tnu16-TVilO&@fhdG4H;r$@y^nCoJwzA{ zs!P(WkfED?L93XYTW=0z7zk~6Ci=e-eosae7H2HuaNMI^@l8UlgRarKsa$4DT1#!E z3~?=L55r{Ew)ji4T&;nTmKJkVgIz2IM=5LqOJq!)=HomcC2gLkXo2jZwF_=44>2Ru zx2p3kZc@NopixWmkV;^CHuIEYzkauYQ6{!lJ)YL=US6L5Z9P^>e$C(SPA;Ep7DHvq zbi5^YCsrS4p&SwttrVoWR`yy3?=CDwW5(m&(7XYLX<&={6P7hlNj&T6L6eKio=9UH zK}q!u)meLME6y6s7rq41?Du^r6r9;C+JHRL9V!VmMS1!CF%ANvbCKL1qqn2#E9uV5 zViVBYlZUL}EnB7`b^;KWCc+T&K>Cu-NrM=*1`y)r6<)^8JvWGWctmh4(5$?!PVP#S zXbLhiM4p;BiA_dkZ+KNuF#N5kb{>HnHB4ovV(y1vg+7p?Wtf05414jmpI^Gs8fYp} zToxbKGihWsv(##f6AoLi7mb^Xa=TX0IsDe`t65T(Ub9TEEWC;tlxR3iXM#6Pz|RG` ztXoAq6Of!L-`}j^#-CffdjJxQ(JR9<{pe z4sA#i?-_dZ4p4UeRAhUMjpvs6cU zsjXc9Np*2H+UWZrOuyhc*Y+%~=gsAJq>_mOf7JFy#dq&|IV)LEI)~SW(8$|BBSOu< zAqB5F@A`f)&uI?l2ZLHH}z@HYd7YY^CCy*if-j} z<{UVtN}J7(lhSP=gimohLe=1qyM4nD=@|FWdPQ!Qo-);!c7O(;2X=zVG`a*xbK%Nc z=bC)^axeWjF}^V{zz_^6>01m%PO85AqgA{5{;X-tZ44LB4{lP5)HHzwac_WK3Hjv% zT;b>7EK_}0K^d(w%=pj-uIemhB$eGf~r@i z*RPJOElx=ZeP{7wD_v`b2?Z*#ptz0&>^95EjA6h_6X}J*`NoFb8B*H31?SeHFyb4I zEEJ#8{*G$w$m>Ycl_n*=!$ZxiYcyJ3z9)*ttevcs>b>5s zh=ZMV;l;fY_i_Ps=IE&Xr#!vi{P^5-FH1YyKK7^3m5}j|9kblEnhZROrGWEL{oc7F zhb$C$EivmcuOzyeT4@1RxvKx)?He_{EC|ZXk1{JI{JwPRB;B-6&@s^yG-l!8XkHXp z;cE!2Epbua)u9-Arz|w%;*X;>GR557joL)T#7@uj9XC7hDIk4!Z$phF?jLORxcK-! z;f+k;IHy%-hvUIu1gr#A3qJsEY(Zb&%3M#qYZ)1n1^kf#=DfLQId)5!gwvG|gK@WM zyAqzb>A@FPUC5eK23870#5Ua&pbp?$OLIz)VM;q96pdq#UPWx%N|Vn_c(JZ6N8ZJo z9-s)ZSxu?VobXRM?!3#piSz*mq!V!QVL~$t!VLmy%PEB0&=epIfZP%mr4^X7A*&Th z@p_HV8KZ!(*gc45zTUYY%=I_3e7qF=Yl#5b{M)3)36j$)99RJVJWG6WpnM38S!R-N*-T_sM3rcxpqbsFn;gfbTE^Z2z*fmX$ zt7uc2g!vPs7{*pFa&<|~j##?!iG|a3$Ng^nK6fuQeq3MmpIg!#9d@x8<~xT@swYOi zmd~l)%WJjR-Vrv2O%vK2^HRa&r~T9tZb(V=&3UuxIaGH<1n|++vi?({wS|A?u=t7V z0h3TnyuLOzHb@VO$C2oP%0BYr@W==<^Jszye|gx9)6-7)`gnVrvO^q3fT^9nT)u#- zj27VO$h<<0>;5Z2nl%+Xjiu<^VgG{vHQgZ09HI%VB!N9bG_}(T9rq#an1f3yd~)EJ zhXj@CVX?YvafA;Qm~eF4P>D$WWVinL?Pvm(1a4KhQ>6(dJw>Jr?QQ5Jn*G`>==uz6 z?V4Y%yjsOibB*HH_w1dA_cNHR$9i6T`&Zviz1AS_SMn6038?P3>Z(oD&HObU{CTBf zz(*o#WxUJg4UAyBVVu{fXR6UyOq4+cm5DT@!9hR#YZLs4($f;Re9E}^I~9z$&# zVJ2M8g~I&AHRB|wRb5{C$?dK#PM6<~V71;w6slh0g$wRxDrA*BmZy5xhV8soTPmaw z1^nQ7$#JH#XTI!5vNktch|lop(rmHTlKOEOYFfn!o!ia zg^r<{_~s~*GUNXKerjl@$NsZ>H(|8pfjI0)*Kl*UcEw<2Qt2(C5*(+M$J8e@+bf0O zY$<~{&l%SqY&do{Hm;8;izo_A*Z424xfIQ}XJSDLy%4j%E^<>sGe0Wy;AWyl|7gJs z%+!=CZx!XZc)ql_*le15Abe|UyJ(zFd>M>3<0=Ih{?bd@G#@4LCey++#Go~=;hWo` zz}WXZeOjJU-JS0_jePpKuwKteaz3O5*q=Pfrl(4pIkOd$4aVP%#V|yU;AvaGa7~Oe zJTwa!f-NWu3qW_6owXM`%B_3^|BhLC?-FtTj2yflMifMF6KZW~f#>k$)YL&tu?3O4 zIw;svc?qEsQZN;drZwBE|4O*F)xdbeqi4bHh|Kc~r(Mug-|B7p-7$Z;0VSgr-o#Y* zQf&|Gn%p=M!xT#DNpO=DMj0u&JSynhX#ytXnz>^?mOpM}PL-qn7DDeSYN9*>qS{UY(#Bko9=$mHUXO29bde>MM%DO7%|fe zR9y#dx(oGT1G}!e03RQT6=sgs+4d=?MlYfB*siUuaeBBp7C0KU5E4bAS4vgqa_pu| z5BL_d`9v<&8#n|(gpL{<^=0jpw;)yz$I>^NFxAJ6f(akJn+)f7F2IHKe*d~mh*g4h zEWI2u7JVOerKxLdv!u8UPjOxtxg;iv9BYaB`??I^Q;b22SQrr&^mx;@Z3}Q$uee@W z>5H}|X`^a8+(qO3HUxGqc)SGV*?StkHkg|?ZWB3%uY(X@JEQ=-QtY+cX95sL?yNua z;u#98;J0C$5KK*{iw$j=JV_v=nHZh8Hx>`jI?<^(50pTlz<2x-R8zr-*_ z%6zvdUVh>mtOe$ z_|)|-f}G>{PQ2`srK#J9X(NCYKrnpP4=r6*dVy5uAYv_+A-@eW4iL$TJIID|(6~h^ zh_LoVfyaba_~Ep?^UZlEfnU~p4*G~-n^bLqFKFY5|@5Wj|sr1<1p1)XYJL-^yuA`-kd0hqOs*;ON zDB)=LT!Lj_6pzv{3NBo4;7o-j#!3dh&Sj%hGaAb3@(?E=zgTWG* zVVvH#iltok2)+_ktEIi7Kx#d%9yKosV1X~fmcLREd9j^V^s6i1qsV;Up~W=2S6s}> z)D0t?5I>h4fKbeS0M{^sE#{f&C*TllFiwUn?u0eyKqLxfq79xslNmG00S4~!_5I!i z$&DLLwhLoNurBQg1Vq+!S!~vh;Hc>$?iNARj&irLve(5!W3)3lgMCz z6(?kh0J31%I89_;z(8Tr?o2ONDd`=Qpv&I~>tq^|#y`4k)+;I4%Cd5D0Vz^yGp<&= z<+AGJYhdMt6!z`>`!n7Hy?_b-ta%_GBWp|sQDvv6r$g;`{8n6Add|*yVetqsk497Y zVnAaOLkDDKKH5?hqvi*C2O*=3tSr2@Y%tnn4xG8}_C?#%7tr%vYw3Db+I*H;UmY4Q zcrjUAB7)kgI=Mc6m`0*fkTt`nzu*Y6l(5j**wlp8dvW7}JR~#ohOZdlfod9xKU^#E zMWOwF`n@}o%l%$hRh1v2Kr!6)ojT}Yvl%2$MlZhn#V>g~w=r;?f6-M)X#m7|uHKtw zY#Q~AxzfC>R~>o#*6TW-}i&>4<5 zwX$P8)-2N5aoZq1vH6UExqfD@%HL+hs7KCk!ta6XxXnlg1gu&*`ni))1aj4GtT)0)LxLDgdM)DF%$31 zRa~a|)(IEgQafd%RS!gjjNb}!OCzHWoP_YeZhl)kbLrwmS*v;)1{cdWO@{_dkQ4Z$ z_h|G`-DHrOaq#0tPQpVi`C?68lp@nJf>m+eS?xe(NKRf0Pth-5+-E1V(M%0PEk?;6 zsq(WuE4TKWdd#Tbr?~qTwyQ%5S+D9ciI}f42EidP!L#$9cirhC2-I%($T7W7$< z>1^%ogv6kSph)FmU{0_$FkrO3k3_cg2m+)m%th2ChH=oCXx!4?I}KPlAm#-RZvZ?6lYt z{I&Yi`pQD*H@5D~S^NDfSWFz{+W4HVe>)|py+5>tFICI%IDsmjzIVrNiuIJ?Fwqmb zy6s8-gIVns=RGA}tfe-XIAUKap0-;}SU&G*xUfbmug9+yzWZ61?jBoxN`bO0^PBUc zdvZ^Q8@QR}uWQ{N(45h&J1ky5dYroL{oeoZ8q5qcjU&`)>zW? zs5t&$c-!EaCNf|U_HpIl)_m6NAqYde5W5w{%S(!@FUm6kEa#a^Ecy>1F@se3{p8 z*U}Oa5h>Bz$IA+1T;Hh{5vUti@a!u%!k9ja!(87y>u5Y?!R8%q+#ZRYD=u;6ZS%HW zh@3fo7IC02%iX9$0xe4>X}V8Rmw);Xjv)GIP{CCxOzHtSL90?tY4frG(@%J+CS^Mu zKlZLaYlB|1h$T&OmhUX>gRyVcW&&xSTV0oq#Q8X6h^S7MF>Mi=Y6C(fD%6rObxpdM0+{cl^}?sul) zuJ^3#+HcIQa3BK!_sC$^uBR2#w^8MSdKN#CJqflCeBMyY>AfY&1S4ZiHXWaw+^Wi? zslCkczF~hzEPsOKU3BgMd$x0(c81j8`s;(<(~ptm45oI%EXLn(0z&vu*=oPp?>+m? zGp}Ethx}r~Wx9R!h|7*JVFn7thN_T#2enQ%wLLtgFr7Y2y)Xa3ZTz^5pWC;h($g+K z)am8bZ$RH$UkXzey}m75s`nBSTqDWVqfTqPJveH=(1Bl_&)|2u&OHhI+K!PjPTZi-WvbL&oE66H+?@e9aSt$$wOe@6WI%yGSlpZkZtbeb?#X_aW3**DkmJPYCEj zAKhCO@+aLW|Uuk6X zn#)!Px{l)3I^vzp2`on|+d0Zphgqu~5c$8iPqg0Izo8fg{D+AN@y`$3-bR_$l7*!X zQq;SugyN%F9(Wah(fn!@!TvIsQhaCF@w7i_^HJ15)ZuusPz%wGc$51_;p-(x9)2i! zLT&*($b*@Fhl(KKW8w}dd>de14yRHKpx~k?#Pt_<Nox6XJak9gkM3KkJT-)l_Ft*16G(l`b2`<}x; ze_hKvy+b_ztQ1OMVk@=i4XboU{br)yxrP{CGxzo0G*ua4CKm2rxv90s)=Vwazm)+c z#FS!DP(hT}qn61ff>-Y_L3PWlCnrDxn4)Fm4rCdC;yQ8fie4<2I;-& z?}Ft75eqnEf>poSmS{~h;g^F!O`t)D^FmS?VgVG>{Rgp=P6_NcHt%rGLXLZW4w3TNzSpCdDW^qp@iJ`ZVq^ZdguZjB9`7}2ku?Be3xUX?zm z!oeT{kcXC_uj;Dhrpuq>{%OJioq1gDArvYG80w}xx;h9_tCi3Q&HJfMEumKbgHHC{ zY5pp`@zT6l zzRTi_%WP*3_HX_AW8D!aZ`V3}`n_=vOGq`Bry`KJpY9bIfJ+y987aYSIKr35knDr`9jvYJT;= z*4p{~n10pPp1LY0E6d2Ec)=&rVe7|Y>6y+a7nggrzX{?$F5(tk#GPs8zL$?!WKJ?| zC8CQ_>Xdu0`r>1DOS_d^?8IKzI{T}pRwdRK!T;MWD?|P`IJyh=b{l(T8`OF1`OxGV z%U8UUEBs1u@BBCihJ2Bk=!e)W zwAI66Yhzp2N5;!medjf80%Hi30_oW?fKH1#%t3YEKi&U)Wz|+1n{`(rVO9MD0_PjI zZiV>3gHl0UoWb124^0c^Rkp!K6h^l=29O{$5BpLgiw~wnCFFl};MU{vCrcO0Y?1wP z)kc=M_N)+;1T+nRvxB1}rHZ9LaMCCvT=oBDymvV-elG~Y;s0k3Ugh#8gx}5M0FXq&KU|;pZ|dXlI4QzO)*4x8jfl<3{j#h%G@+u_J!H&(E*VtkOd}zgd@aNzmUY z-P^*rLC;hqq1UNz4|EDL%gAu%Edod8T6MNLpBA;3SRqf(kD^0DVR>=d0>}B~RFz0J zQyJ0Q2#cV;%p-e!ypLCz)XnTv8)te-{3&0&q$^j=;a+eSX`3V@T4u`aExFt)?}*G6M|2+z_%|jV*zD#N(#nV=n_U+HcaW8Cp=I% zCP%|b!1d?CXljcTwz^_)FiF+V_usuEHUpgLBRMu-1DX$64y1tvH*eM*8Zd_#ZmEeB zeEQLw?0E0VD@AbDs5Ikz^!~=QGocRgmym_KtfFH7;Gim0H#7S>%tQst*6aBqq7X`> z(mQvi%1`g@TYNb*#`oB7ji_f$hv*ept*l+kkXp>YcYjX3xy`X-3~Lo8a@W3 zot}`yFygaX6Q5P4)lgQu5k0A8QlYDM)LL4x@ID*cAJTdIP@~OX_mXi<2=3vWS1i)H z71ay?^pxrCMSixp|FM7Lg^zXX*Uaqw&{TLpC`_53t0i!U4^29QfVT&M(A>3#UHeb% zPd&b3dxtbTn>^)|tZ6pZu$H?l$t}{TG{uimHF!b+QE-TFASnL9{Uf9o<@KsGeb3)L zoaL^$Oyi2~UgJ)Ux^@!7LPKUbS&NhX9+YmQHDh=)1?Jn>r5Y<{tFl!(e9*Xi;-49 zxu<|AI1HQv_IUIBSg@~bw^c3`gCAOLsWnE{u%xNz7w3N!)5mv==<1LsO4FnfOVR0o z1BG{+_gzupwM?e~r%OSx7$eI!z&I-uG^D;H_!_cl&SJR==Kktv{z~n+s;h*erm%lf zZH-?TVXc7-;X{*Eh;Dvup3yilIZ4aN2wIH)%#YQYg9=XqvL@noNbv`n9lnuyZP!mK zilTInVaRe-Z@~PUJh0)A{*67d*SkYOb|Q`FvuLhbM&YU><<*L>kCS3W&P@Wz*ZhP| zxtd;rJ%z4PhjJL|*+s-W2(AVIw)hhb?DXwn>qoNPWHv*CFBwmHiuE48l9XhtT)VSl zpqz3@W_jnKZ!Cb^*U2VIx`EpnR;^77B7ytWbjkwJ%!*X+%meq&s6qaYG*R#bRHjgt_tKP+0sS6RBuD}JVHi1)JM{a*-9r!?fdg7XHoolW_oj;W;8{RxBheyqyq8 zmHhm8MyWhh`RpX@bIxwi2;aaJY^|cg)Lrw%?Sja;&EVi-9uXq;dwFar!Wuhl?eQ9% z+0zJ>L5z zs)nT(n~(qi4UXw)q!A&@_mslmp)i9>qjZ~618Q-C&I@O;9AOj%r!Txd$Q=aXLo=(| zAX=PUR(2L3(Uasxz$>ILub$OwzCjPcz-o){88NX!T5{>`1-m~`6*x>t#zT>G7q)wEpf!FyPfI)jU z?6yT(n$U7Xk%3HcQ1=R@^PM{DEN|tS@eZ~y$ep-Hp>1s3S<=3(wF_#i zi?xy~J^BO-4p}g*j9Dk?Ke1{Bd~Lzj1r!DQPCna_@!*>8keNW@!2giYTZ@+k(gc2N zz;s6-Q)XJ)E9|*-fGN?{yOf+fabm@^G!*i84UTvX1!M4xdD~?Ds`33V{!z$(7HZHL z$azURdYXE2-lyc3BtGP|kGO^)<&ZNrH^iskN22_dMMZCvmz#;atuN=Rso z^edra#oLm-18TMGUuybS8Q-AUUJp5UKEcU6aq@Rj@utpsl}HW3U8?l+QA^qY=WWXx z?XbeJn!}{G{)zr;poLe$6vkw6VWE_wBG<`rP&~*?nrOhJ;eF7?kR3ujGRKu(c`h|| z9dFuZ#e$HWzg~4?xW4x6#a%9A9sJHTrv0TpL%W4P6S83iLN;uqPeqrOjX1Q!J(hcw zx@*m+F#EIfKrVlWNr`$h(JYw)@q}jlZ~l8(2aV$to4WcRIhNaNrJ*MBp9gseokf)> zG&y0JW`C>oiGhcgF%~~oQMp6>Q}%z8>&rMvsezo_0agvgv5n2>zxDa=TpKsCe_7Sj z)g=wfmzg6h-|6j!awsnc9}l-{`A2;HmJv78lLC7GOUp7rSuUA)KM?DlWEnm1h+!A#6QM>M$ zV7-gV|A(^oj>o!hU+y#Y+pS_a$i_lOcflmdfl&#l+kXXj@B+)@#GQ z##Z;4Dz4evBtaMol&DS)^#Q1apI%Dx4`TfZb&92uLhTB_RvaP=gQ=!~#d)yWa|>DO zNnZ;Be12OKY(s|h@j4K{r3URG?a3>c1Y1%GK%JNAi2koszeTeVvz?aE7)=opiE`%D`Co2!F;6TU(e# z(+vb$giAwWDy(Vd>4*5iZaZt!AU`$wrDpkQ5xc=1p+p< z!7hdJ3CyEn6uR#A{YkIXp1A^{7|5804Ce3_V3Y8p75XJ`bU>B@%D;f)u~oWN`rRStZR3tsWY1p zJ(|^vaOAAzf3sWTf zG9XWY;hBbKJ}{U$_$+}8JEhQk$mb-{1qr&N27|7OW2P5wEoN|}hyZv2^Xn|)okPYU zlbUCN#Q6X+R3XOm#5ABP$HE{#DqZ#-XcY=5zCFvy&0Wo&E27W)cwYl7X2k|Cu)1`d zomY-TyqvT%m?zmlOZ^ZiXgP-nz$R_$V3bKFgB&PfRgcwhbFVU}|SZ`9v@736}iH!+~O8hQ$H=g=r1g`Rli!Hq^*oLq$_xE@=Q9m6k7=R zQ(j>)|D$!mRcUkgPbl_%)&gi2JYn6lSkUl5%DI`HgCpcu!AF2v)Zh3x6-YE}4>V>V zE9kdW~q88AAl3>F31N1d@n4omfe9rr2gu8rszbMkc z@w2mG`ji~G(1mXkJ#_2EFscPnGl-yoLEBD+2{C4dYoy(3NDL$h#a)tQE{3Gs?;A%L|=mD=FR6l#rQ_W6K!(9Qg5HdD@NNt?}91_-9jL+}+1)}Jl z?r!R-WRE7FugZHmcj3lb5P62^*{GAnPq4V$@Wfbo+wdps7>@(((G7ft1OGWS5e|gSwk@l}1JTP$=4;-15Dyd?RI#t{6$mx% zyBrEQ{id5#9GiB*K55f_Tt7A{N&_a<{r>Jfv@I1Vk`H?Z+tLY#ck9Ndb#aW(`Jnfq z%B_C@?kRsfj9`L&rIlkyht<_w5?qg$9HF9eRO!b!6QsKUysH*)@TITM&k!W(kVa=? zH_UMUEsPiCQcrH}L_oQz#~Lt=YwhU*$i{5Cld0+G2qHTmf9RFhkDL6BAgKgr{smLS zeCWXo7H0Cu*%G5lLPBEZa~^PQZkx#%as=B`K@|?^QuLq=g!ErQ!@F_6UPIT!>d7eP zkT@?VgMS{=c>}b>cs<>aRleGvAm5k_UCOawWa?ZZVSbt8h}bp9cyi|s2M>YY^$p|q zh{Rtful*_ZPd>?yvjMWJ@*&5se@)Le6-8 zJ~w_I5KX6P?`;ExC%ZLdxy{QbOJhcWQ1U}HclgGNh^_Ao+^s@1rbpf5e;Yg|s>}DU z3K16wW@!znml%6cO=*>efl2?Sg9CqBtNhI`HPk>UH0G;SuJHHAB1#@`Z_I*wqn-&_ zeF~T`OLmh>RFry52}gV!bVx&xfdEt7x>Cf+PR_f+JgIz_$yNf@7E{%PxHxlaX(vCe zdvkS&-$8fTa$?!o-&q3AUP|xS0_H;^y$9Nd>#4k#Rm;N z+G%QB%8#rGT`JykxhsS_wC-p2_2DwBI#L#m%a;)m;__HyuUy|*m_>4gF!cFczT5)= zKc)K&PIX#WuhzoKgB0l1s3#HO3iX5VaL7;?7#i|`fBQFv&^*JFp{E z9(iW3K%}p)n*k10=#h|^MV5!3-?-Ea6IxRQ`auvjpe!x9opeYJZ%)uVvEVy>O`nW7 zZFKdjd996ICdP7c#~m$s*)Sf#wTt*bqN za$$L{?=S#G_5d79fmVvAwh8yAA!&d8H!lg%-Tzon`%a!bZm${vR!Ai>!6gTw+Ex*l z*&Zf%MB;<77Q6-VSwXZL)>rALCp^3-2Q5~_YZ@Lf0L{ds}JyV>UA#jyD* zj|>bdOS?W_Fr0DE?oCtVwdqCxkL?{a3#M!S5C7iPzbHmSdAu>3Ok%!g0UxYm46-}s z4WJ*Ph;PmQ`q#6EiLgyZW1;6FL+EYDf!{%>db_vk)Zh{z8opd2=7I*X6$ z;5yT$Bug-HAzjgm1RorT6#wYkWthh(=#2?mU9NS>eUBrW#M{Am!Pu`3J$ZI-GK(kS zzjeyybQA;){`Uqapnd_6m!FA>DzGFFg9SvXU1*T8ZCl2%Rz@WNQU#`Z7=r=jdP#o% zc}dez5hhAXw#MUwvisbZMrZ}~)*$fCT-O=6wNAT0ED1}nS3lU=MJ$>CNq-P8s zr29uZF=w}0o)bC_Ige40KY;Wz{<5knlBQ{$dhV_Z z)`WkGwu!)oG&M8~b5Rq?KJ92)rTZ3UgbYdZ_yK_5Epj&FHPo#J^tiGh<%)HuDiasj zp9ZD_${)jBu=vE=Ly1&JgSdL;4Bf2l$hDPP((HiJslcA&KX+_h6 zuH&54KPJZ~$H5_b!ByyYxB^p&gzr&R%r)V>iC-drWZ2REY0O&gGW`yM6^=xcFj#bY zW~Kqsp7~*vmpY_KKviZ7Ha|%9&AIp(%<`cs$bhTs zy{XQn_kEjC@*BY{aky_F!XiT=d ze*QkN2*wa6o|$P5Q^cJbe~P`^v2e=^Y7A^X&357w5VsH`Wm^!8R1G^^%A^&KKi#(u z3$bo_EAf#5!e4E`mhX#=hi1W)tQ}b3|E~oPyq&@HB*gk_dJxEDul{H=^t8qC#7Mr* zoE+iH4OR_gb0>_>LJ|d(LQYTjddFOsUxh5lp&&gbLdCWk_>!y+W|JkYyyD`e|CVDK z85tSGE7uG1t(5rwL_$a*7NZDJe$P25=2X*;>%Z&i2_7N5S$rhG`^7;7y0{Sjs!pIP zVDPKo8t6?&`wD!RcwllxL<9*jF(ZKdw{E?dFX73X2V*!`#sY(aaPaUT@n{{&Q5SRO zZf>LikIBejQ7F7w80DN46LZFS{Poi`Pr_ib|0==3w<<4b+SOBmp8)ANrv+{A0^d}) z7K(hzTMkowm8k>AUI$AbF^jH_@ijkb=Khq`7hGxHc(S(#47F}zsD7PbXt7^~jaTqz z;{g$q0ZuSc(L2B!lU#@AgG=$YpBDICRN|xM*x&!< zCXWgLDLR|BLp`h>Im`#Y&q^7HwNL2X%JC!ggJbg#d1Z~i#X4?(1aN3bG%8Z$djvw* zP|u6eR2z@h+b^OFQdt<0Fp7hnl%*ho>6pFV<|XuSpI3Ubi|NK>huy4el-vvdGP)noCb#8g*A21j0m?YyR*-Cih8- zw!vEtu)p{CYs4ZCIw8_`|1!%xR=AHtL<7PCWWX&5O^14bJOV~Z#A9U~4&E44-V9Ax zp$`H~&fbODGXMpDegS0C?*tOS=6*ZTD3_*Y)4Xm1f$YN0J0w?*i;WGl9x#Jj0*8cp z5#58!A{jP@9%Of{tU)aSsnfwZX=-PZqKAMG0A_6d`}fYCQ|3BQ>-}}>$&T&8FN$K4 z4o<)}$3rMiE=5I%uAfoYDY^c?YBeBie$b8{>kd{&NbakJ-Ko0Mr|_kV3VL5_Iu_;a z{W>b31FdxTDhs8#p-QH)rDKt!R1k?F>keQZM%iYfz8#%6_!YRKQ5!v&`<>PDQ&TtoUjYDhgx= z2!aR*(k((CK}rCKdHBIdR)w?ONR7|8m}HX{b0zuP7Oj5K{G#=z%FKEYK*8n5oBSn6D+32U#ffw??X8L^cS5-LZ~w*`V+1`^-w9USUF+6R~hjveQf zrm_2p*T6=4sH}zn5yJOTj$-Z> z-vrc<|LRL(A%bR71Qov=8oIUgMf%P+U9C^G+=mv$BV8O`cEl`a{qbay6hvm~W}YHl z@a`hHn?YP}#wP>4Jz0m!x(hmsgM~{Ozw2irK^Ua@`Zobr=%Y9EB=_cq_@(<;0G~Jh z++x_i|C>^)PSv=O`=3QIZogsOI|lP;jY-FUt-Z{G5QLFUa9}vl@Uv1Cmz03Dz0{6I zsQ*=gi<7R4gZ{KCzSqee;k>Gjbk-VbD6(E&ZZ~u$=)@4?jD4L9p{y+y@p-|yh%EvN z@D`61p~y?cH9x1RZ+O-g)O`Hx?pCJ)>zk z3J{g6mG;zXop=vS80D3i|Fsu@fU}whz3)n}RwUQtFo#-eYwPElJ4DmORf~67(>k@9 z#>5hXi&t^J!7t)EsJn^n5CQ|%)kdm+ymmW3a0)*t98f$&q@m{S#sXO*;A>y|@gx0= zC9XHIN+e?wzxl(w#{>lU_pBuIZ-Fr*9?3#U0kf(|y?^)|KeC`lc_f#oSQeVa+_mE# zvn-UJt2XZY`AH<}Yt`C0Ij>_*WE;~pJT z7={7}j@3N4`3(+{LMfs@yfk=sn+9Nt=21w_N>HZ3wQHlmQcUw-$a2z|9?hTHPqX^= ze_EaeO8spJPh+_?{f^r0vBeoRofb62@WPFdf7ADFTk`15!s5Gudy!81cWPt$g_SmW z@PDpF_p>jYKZ=n74emo(>!>8nRBN$&{KfVY1;d_1dWfzq73Tap4o}!4~PF%oRFa zhG+I;c#((;HFBN{T%}~+17-yNfA2D*4 z;ScudvaTX+=J)GQ+J3=pp7->r!X&~r_Vg%Mo3{*d)5uA(ld^SYO<1mr zx_A#39r9d@;#Vl4WV}7=v~q*p*`Uc$>8=Xv(phj(e72G$f{|Mk#%?mrOdXWu7-mn7 z309Vr2&sWpR9Qs@a-tdKeCiL^uv1fo-&}og_*h7-4+u)q>AIv zIPD(`)GSWE6jx{3=yT%S`G>8v0X+WXIDhWHKgT6wtU>SahBMOHAuf#2t6Xl;fAED) zTgao}+vVwF23t3df8a0J(0!}-J`0Nw612-U0GDXuQiNaag-}S#>?3aKu#53Aw*s-W@BrDSp;74_>OwECk!v zOZQjzv=eYoG+&Tp+WAbFRar=9v59%KdVMwhn`0$jW}cIzyDv_ztA4}KQT6lN^uiN zQL_S%ix)05foQJ-`TQ^-6NCmHfc0PWwy8KOBeF?(Rpd1v?b883(M$d%9BFvCzVg>S zIgJ02GT^;%)6PCn#J2$6kF~s4DTOyuex!bLW6!n;|E5EJ*h*_}^5g^ZLH-3FsVX=0 zJwMjozLlZr(-rtlq+Cb8sg*c!20yVU6(S?d^&}Q))4ri$H)BC(}@C znt@!J{Hdsj2*m2mKs~8^*mA8TXr55URygMF3Y@`VQ;)2wYQk!BeeZ;VTa{)4Aig-k@`MOxtZ zqf#MryXURu>t=;=X!_uF!rK2+EZnbrjpy|>Li~T9CS2nWO^XoBF_~IWgE_A3xmY;} zZxghEK0i0Fa5^|Tn!K=3f&rvQT+%8=>bI@a^~W+}{?n%9o6^?a4s?P453)jwyDI~k zwb0jQGNl0`c0m9H6Nvs7rnC?kzJ*S%in)Dm|2*{EW##3pih#dI!EiSXjW@>v>OAG| z)akyx|M1~M0Pkcs2Xp{S>XUdkp%7@;tma=DfaLhGD=QWsH^zH`B(ps3t+$Xk5jOA zMYH&4m{yzx91}SJe zl4Pyr?<5az5YSf*Of&!>I{-H{@n(~Sv_?aQWo2Lj%i+br9{ww7eCOvi<)eI_RTubh zfCkR45j4|7?-$mitaua0n_@+ENVvGhVXnsbh02_$LYlA*X;CgXxBOKM{-up2-9&bw zx5{~;cDon_GB$^zJVsgX6LsENpPo_V<-V%X6U!WS#)HJmyF}kz+L$v3iIeImejovL zS|2l1SbW<%-JO$3dXWIDnQe(@Z&9irLiqac+#RzuuwuYW=$VN! zZ1V^NtmI|Gl0LRK{WVIC)N2-M*wtZI79jzFASNl8Fko_4lF9(EdE+y^H0)D zC}DzyYu-H>L|YZ{39jdma0l1upfQU4c3UZ}bN(+4+I303_6K+Us$}|HMR1(c&*D<( z&$YVUZ_oIzhziD&|1S<8@NXQz2d6a;@!!c#gCG^0xjUo4o)Jg#U)w@Gp^@}B@u9sC zQ=Ve<*9J=DJv!wxZ%Us-6~mfx=|kz4)`!0=M%-d&m<~?RaX3M|H^%j%<=$)cNM{VM zoI`HN$cN=maOvtJT}CmxmC4XwSDDzh*UP+2j}l_*iV6$;F|gS;G?l&D78Vvj z!;qB&bUaL+VL0cxF$Z|)=_}JKDeV$Phys^|`F`mnVgT;$W;$)=N6sU0&g={hp>dtZ ztpmBKrR6`DC+WaO{{*O9ZPrRuwl9bRLw6zJsScOm=f)mNm?4`T_ zZUs@%Yes1$a#J%ioRzi*ae5hC+TfJrq~iTJI4HN?CA>g4Sa_=-G$JC1n~LhVaL$?J z;*+Z9$v2_O9c%PW|0(fis_za8^$vXJIIJfRq;8Kxbz|_-feu!>?wkvtHuTWg6O9ye zFPgZT8+o1)VORoF`m3AW$WKxl4NdKhJUX?|G}IBU+0>E1nMLTBnGT6gyXgLPFP;d$4)&WD+rKQeI{y4xMeYo_XfF7XT z16ZBRI(1RxN?-P?t4))?{rfb}w<08vrwr2H7KY+`zX!`v86qH+XytyRu)6Sw0|JA9 zk_>Wbhv-xf)?bu)@+;2`v1;0{TtOnD^HgkEjS=CSo%FRzdpLg6v$N&y=7L5QwqRrc z2tQ~8m~K|tGXs`XoT#8T!RKuISVF0BGBqjA<@CxOJjvDjs(lMcNMKfdeGlk_tzUnW z0ZF4Zfu)FvT(sYcL3{u`j7`5j589=M0@$%Xb`xYZr_O@~5mG0vzOw!>cWIB!skL-< zI7WO@7PK_^h=xs3909A2f;_X{e3e$j$K39OJeZZYFsx!V(d)0@FJg^%J`@3u3R z?N6lLNhzT~G-o{~#$D%)nqFDQKSSzuff%1PB5HJk9VY~jKkqyycRM;muA% zjgBZt1cw!_!u$Tal}C=uCKYsH|7o9>r>3~?1f*mq8qOos$=q*f70T4&K}`R89B+QC zvGKvNclbEi9w8^*BgrvO-R1qAu=ia;-^}!+67@*M&oXFDXg}1Mq_c;Pb^roDgN8eul+DRhWRpqRSiuG zs-w76Yk9+sN7?2R?Ok?3hV)cOYZ-xH#jG-fzxosS0kJFuT&?bB%fRY40mkULq~F%P zA^aTHqSv?+PB0SC(^Kk{EaY4-EI7n6EMnpucu*%aPlykkAw579fJELhnd8aHQouQ( zHt$B0Cm;>Fap*~C5w-ujMVDqlGDnZ{;C}O&eTs@O&5fT#md~S@dzrh{1Q!o4;7yke zCVY1{pUn%{W62yWxUV(w>g*vWCSLGg889A@V7=^J9*B$VEB|p`e*PkmVE_Dx^EWE> zlBlw@{Rw8qvi@K1zaUBV8fp75KUbJQKM)DfB}i^-F1$57g*3=Igqp=ha=dpz;(q$N ze@Cn3eaHr zpMS1Y9p_{~lZ{PH8(pSRTb5*x4_nW@gL3z=TUv|<2e131UbGv?wVyh9JiyuCwUx4M zbTj*8b~{a0zOAkUfxiXo1$@N_k_emy3tBmQT?cLpaeLiT_w$(4QzE=(d-c9cKZJ+7 zmYDHees1muy!qUQY=B91yZC zln6|Bw0{JR7O)#?zI>-n1ulO6^vSb7OKIaFh{<3&aFGuvb08(Sso~6{+yUv_Swd1$ z@ImA_7r`K-2h@CG;B?4TEr>G0{o(n&EH(8DsJh{b1$6W0sMj(G^~2Wk*z(d+4|6g{ z7b9W!sVp2v`T}((6X9U7L~daT*HC3wPdoi@sp#8aiTY8gAd)5R`QT!#^0D_;l!I80 zZKrC>qi=>Ank7``ygIW;GGn-FHP!7!yF66s{`vExq~T2A?fpnC!a5wPw}bgwUtz9T zY~G3w^vjdl^0xzlLnu&UK<|g5sSb$93>&~TrnDe$^rTltH~DMm_s+Zs-)6Q4ydpP0 zZ-bf~8ZDUBv9`5ky)$Y5iIHYiq41JSR&oESSJ&!2cf?v$BXJY)6x}gcqLrnUN`D3a zypn|rs1B65;BoT=>(V?SYH$!3jZD>+nPr!_Pi0nW&-9-Mx{KQzN)m&o?M!T|< z@?0qTVd$tP)pMWik5GaR`99_gdP&9Y4pB~EO6=+B0jP=Q>`CCgfe+RLZ8qc&B4dO~ z(?-JCdu;4Jy#*SdPd8r^#)ZR^9!6U_GBT3DqZ7=DF`%oT?tjO#2DXaJ9)%9_VIlDR z%{O?F&-?P++uy$RGED4VtYffIlnG1_IO(XDr5Fa;ghEnMMjcf4NVM~}Gkp z0ag&Pcwc1#VFw_1F5N2$PkH0m!^}H<93FU79Pd3y$b>YfireuTgDO&}g-pYOidovrt`b8+e zRNoE}bOHxY)-(DbeEAr$6k7jh&-nJXQz$o9mZ#5djHzN+vNN%}D%vSu7h4v68ED$& z;K`--veOzFG79~y8QGUFUtl1&;ZO) zlT}PXQYJQ zQ$_|)pPrc$l$5*+ZC`q1$>@d}H2=HoU zVLOgOX72pKf+3H%-p|H6H4bv1lpX~-&{U7w*0%HvzdKEu>b@)eWx0>;^KaQ5OGQFj zwm6k{0DU$E8tTej__N?JkvnmW;PU9V{zAbDH5WBfET`VU#7O`vpDShG8F0hdfp|_c zf;lfY_r-HK(!Bc?GOr|mf^Oou{`2IgPoJ)6=4*rjPK20)5g$U9!OLgR%EHz0{+R?^ zpZdN~AOW{+c1IOt5TKdo$}tp;Ok*H03(T<$jO6YP?V2HJmc2nNJI00aJfA{Uu)m&uP^4Rc1|{B5$yq)V-vW8~ zgWy)V`t&lBXT*>X=-EwkQE>o$MQ829OzfA(_3!VDDg8P)&P=$2(&~mtA}P0pZ7?(G zbX)}{werRw$~{XFzl`VQ7Gz>C;U_KJZ375ODAsIuV-o_|PFW3AE_BugNPftS=|4Uz0H57Cc(J;{X zBqQUcFJ_{2t241nAD+>sCO`v5MXTj6KLY)ijg1YFFbS(KKnSibV^y~Tvh-G?E-1Qa$F1~#J%zdKJs1iw|8^RNZe62B% zS&V&8W)0|NoJ+N^v2h3CYRv$sH2TzDuUVBef@13`EHcgycrYC5I{*p*I7_L&1OC%_ z`Ac@JrUdSpw3H~Vi1PAvNEFQHpb`erh+fIH)Dg{qAEUo^3EJL4stlOHY0g%Y@TfwD z5cQIo@mwT#5XUExM;|g}LVI_BGld^_C7)%Fp1Pt^nbMQzj>;A`yp?a@>gKsHdllZx zz|P_3AR-uXnXNC2WlS48H+gP=6IV}RCo3wnQbYut?GgK$9a zGBFz`XYiz(>|h>E^^8(*F|ABiL?R-f#_ z#UGsA)qt@E5mE|p)i8WAt3kr6)cr0t9P*m)!>hFv73UAMs1moQ=IzKp|{8qvKAy?=M3Qr)j$i<@o0K;*_uP zFTTNNI#WnTfe}jQJ#(J+9pu-t-UELup@2cd!scL4k01v}&@|E9Bwx?e(pR=NlewTk zZC!R{;cqaNlfceVa8<8R*AO;e!du6=@86}Z-chld{M|T)z#_m&HfR7T%!;WyszmF; z)f=ZW6SUp0YhWZtfY?m4xwG?uzlZr9Z|MGPISY>VjdMK>Wm)&Qtpr(R*!>8SED8*A z*fv`9B(Z|zC|b_<;TLo2HNPPfB|bR)(6HmR*pZhfcxIOCT;JnPW$L^0=d4UGOz^-AC3wu7wmNZ8D(quh z`4KZ620Twj%kc1y6{MN_;9<gLBZ3fTqY%L2~PSsKDDho5Fts0>=8C{cXxO5WS%K!0v?j9XV8osTkoEQ z(9MtLNJ2cI8IgNyy{3JkE7`YK;&0V7G-hufTviBZ+p9n~x!CX#Gz1%|YrOkaxGw#( zN+wi;dA=uC5_SCsDc#vqY;5vB#i-1`_k4KtE_vj&^Oq^r>{Kjxe@~h!ci7y4O0sR~ zooX1I(Q-Da5IDiWUJt+xLCJvvZ6d+WWH%2CIcD|gpmb$cTknkJY0-a#PI|Kj74YlS zP%7~&MFv_=*wxY_uusdQ&&aEsX2&{hgqtqe7jzc-Y}NNcn;>ns*(n<|B@`Q)4JKB? z(r26WQ;gsK)`h0eN|y23!p6q-hQ1FPsq33<(pqJ}eLQ>Rp2;YF^T~FCl_3tHhKaH9 z&^k>GyFQ_Lm{`R1JNa}l?BT@<>sMe4TZK7>2lF$Y>oKUzS>^V@+vpb=yg~q@@dTKT zOUcF->plAj|90ll#tBV%hc4?Tx4q45Pj`%gT9F-trSIycED?GG9%Gg&tyGdaxN;0G zdS(t7u4*`O-?QiBxcP8lQ))~mKMuKPiu@f~t-4Br7Mc?72?ny|sX1AGV(2P&J>9F# z@aFF`n9~jQA|T5Ul53EM?(cXdgJmgkR-f?ctA(bf^My8vW0-!`zi*bBhY-bb^8TAB*gEUG!2t{tFS9{O*caKnXSq`cdh$usFtiDw_5JZ6;*)=d#g+o zo>(YrfvQ#HD))$aJR_$1;vN0b&M>dyIxfd=+HmdxC(n=oghlXCX7}muJJIl)+V!G# zAUY27LEHR^7vABUhQinz(P!HvchGm(F&{>|KJ26D3dMLB-(*ATnt8nuUyW9irjpOZ zrZbN3$6P=AEsDGF##ZjwK8&gF<5Lm^U=w10BSAh3V|`I5?QrZ^O~y;+rcl2j34&9l zBn9l7-v^(5DSH>R6pEfe=fzA)fj|);Wl;_o*&>USeHXSwd2Me<1{2oD*06hFUAM6T z>~RNBljf%t8$Vv(KX&roMvSKVJpR-O?tO<6tCY--yXW{7i5;9nl`+m|yh>EG6Va?W z&u!v&iH|d8i*2ljH`j_sRGG {m!9r)X?S|9`kB_?f!OC4!Ty^QUW$t_e@VH5%FmMXpR3p5aJE5-o@>shoSc0heOS_bym0}< zoe<(?Xk&OUK3Xh}V@N^yiI7@B)1>3yh5u-U6y|;+Dq-5)aHqn}%yiB}^NC@GnC(US zMXJ?Z2AJx*`h^Ob296wPn%`Yh+8hyQ2zyl%Vm#tV!$q|*S8OjpUo6IY;dtKem7od z9Qk>y>rn7k(C)bD^9ZOFoI&lB#lD0SjlLJoE@pd8}mY2qCSq46j%FR^FAp?R~(eF!L`nPmHcPU zXgyJ2Z2}m;pkQTB(ZY4{_}KQ7UocLo{|>LP@cYrxU$8&R!OX?CWnuw8`?_IIau2|~V52eO9d49W2G^Z$GfgCe&gcL8HPc7z`7 zfXEJDC>kH@xREC#!e05YCt(`g_wQ;YjHz$Hoo}@R2s41l2RDvYCNrbM1bbr8w|^h= z82_G7C{|l-s9U9P7N6woS1rXpy!0OlCQ#+}=ROwfZsxL(m%XB{dIGmVY>}A7JoIYpJ)B`3APGJc z=pcp;`|0e=?ile$?3TICo_tJ<#5udyE7qmI+T1TMmv^u3WBBH;C7P$2Xd1PaYn4F4 z{N>DNrEtM+k*)CCU``&Q77!5;Iel8w7zMFGFu5s6WaMhS=O*~)CKeXDrf*bn+Be?b z9O3paZv3-t!h(;s4dbUANFSoIg}@4tIDc`%34;O_DXCS8+fIbV!)rL4D(1u@LKI_S@kt}j?-*U*eWREr%^8y2;wAg(pjElZGT*e`@ z?^R9wQ=Bp*gIM-<#&KC*-fu0hf=L+MG$xjO7g&{^z_2nNlNymA+d~MChh+yc(Ri;E zUrJbpy;{m}gRefNb%*~s)d$UU_D)Wwd6(!QW6hrTnNTE6>mCJ!pdBJ|1cXIAbu?## zlHqo#+?C#xb`5;?n%N$ov3}wvU0m(oFtk z6y~FFrIVdygm`mo-O#9j&L}Np^2CrX3q23HBD-1pKO0W#ON9lcozU81k%N)jto=0M z@{lTPrt5hFoZ-;UL{p;SfRYVke5FgVzd<6iG^w8J-fnKXv4Xx5EDHU5d=j`}=! zaOf?MT5WwPq}6_FJL}GvJ6PcyxU2*H;=ppL4N1B1@wnwoZr6l1274cx?%You?qoqr zL6K7<Dd{dm!U2Q+((e5XfKT!`FU3C{%bhQ5oxUMa`f1tt=hjPZQc}|Y+N8#$js_rC z0L0uSmp&QA#bvV5rsmA8F3F#-la<-DYrIs%(fu?%*d|HzhCVc08foV)Hcdf_Jd8d) z4YBqOkFZE;<7h74K0%_Ce1!N}o|+5Fxox5f*i1?f^{s;1+S=_aJ|s$?RWaC40lt@$ zAu$GtREx{17O`ZTLY!6}9G~~_- zLB|F6>YImjkCT(%p$vZjZ?YfdyU)Jr+sM(nCVJ99z+KP)vbsH9X&23vIR0v&X7AR@ zGT%JS{v}1kW_<=pb(py<)~!zcG33Q)*cIJp93yAx>5H#lr?d7vsLve*UyL74a_q?30Ed}?;ww1xdGV555Z0sdi- zsmhGl(?)O;xW=t*Y)~;1Zt|P~0X_`)tMFKz{2Vb3^K1a8*ni8F9_mE%3QUAxb}5w# z6g&l*_~YmzdKI{QxUm5y>6*c|9kKqpe_gdvvPcTg(8q&v~`>rwa!%7SL?nE1;WPyosfG?ivM7U&cF$R zAk=}Y2y5LEzKK!738hJR7SKoraaI!}@<`2`v{aGihwszd#K ztWoh@h1`!upogrkt$oi*c@_uEQ3DSkW|O-zY5MA0b>7N_vX#XI9m1URW?7!kJShRdS08eo)Mx9CvnS3+QM^G zP!S0-F~2rTd`(~|Fy#>(c_k!#$X;#O$B?JarmgB@nN(S~=8d0A$9>Uk)+=+Q8TsQ& ztjntOi-}viDc}XJt*-75y{Od;a8@gA4hUX=HXyP?IgHjNQO_p@0|>_O8w3l+5l4rB z;%3rReQRxva&2*O(XNo?np$V5_)}LnuD210LNfF4A>S) z!rNQr+RwqD&SF~dD8=#|6*PoRaM+)`R?Y>YM`WSTgAdsV`5BoBG48V_C&X|CMHJaT zna)u}_}zVf)GH3yIcTMdidlQFsEbhbQygJUXPIzPs|_OkndyXO>$}ZZM1dQ-OeQT| z3k7}O04EEJUk`V@kn|WGcz*nGhyZp*9{Sx!$S_-oIJ5Qz>wiudS#FRw$LCg*Dt9+q zYHBJ%fCywt8fj{3!d%2^644APC_yh>zMLlp)mshN7b}jhil`S%@7&BEFj~Ep9hSMh z4+0Fq#SocT3z;(QL|yy$(?3Q>1=(OQ6qI4$I+V{_z)ZNuV>k~KV#Cj^tE>XG8XQuK zK?~J|8*IGOV9CDI97s@cTwr!a3C*6{-kGKf_`LzVtsHZ?Jo-h6D>EQjH3#ls;N4Hk zbT9cx{^7?LUeeh=AG?Q2uQ+k8=9mX9eY~{7g^Srt@2~kD!%$NDO}kCVGp;Ild3jCD z62FDUZn&@u_&c~*%dfwE1Xiou$kLNkx@uX)P-vhY6e-GW@%Q{#SuvBFR9*Lt7y4C= zcLAoHqMzf_0XCIEe)={BMvJ@%TlbZkKZo?xSU(2F_?M&dj0WSxaRBvfEkIkso+D&Z zqo^Z^tN>6@Y8Nk>?_eb_gbG*hHK^V?&c~W5@_?!q(nJuHvO-LUw-5=e+8iO_QD;Kh zvA&)W#k53OwyFt55hC8-dIfm4Qy+i=?Ldu9d9~j zCu`y}6a={lano1wHSh1exfMUc%68nWgoaHfPNHbj-a1)rsU5rtmufl>xvXxkDoW3941%0k*KsZT+YS9G7gzO zumL!q35|wP7P9}klLlgzcp6HSK(9M;hlNEl08zO5ruk7Q)MJu>rR|`GdY)5p#_>a; zu=%}!US<$f-$Q&HqtUrmrYK%yY)pAM5dndDQrVtv*86K6Y0pqXS=zGQ-6v(expPGK z8BetE8q_O96;aU(d9n3NvKJM;sI1Ht4(VY-4HoKs2XI%D??)# z?ZwL4U2w(2z_P1gZ~PVf?c$YSEWf)WaJl$GIFgS&cegP(QI)PiuUsT~d836r{g-rhL=0`mSuGsyd=Lg}P z5&_b1ClVI}WBKww-`3kl<@jUJloHq_m%@aS;OPUsiyNhIa{-`BNgD&1lcp&`zvza; z;?Vpq&_Ba@M`r%qx&@YRl(3LtnZ~Khe3iy8%Osu;7!~XN7npJ@CRTe88coEf49_o^ zTtQe{70o_^Go0`URgemK60Ti{{BSK7KJ9=}t~UqTrb1idO58QYT<_K0l!}T9?~&{Q zmt1ed!8N4KrZn zAZ~?KfZ@(9vbZ$>zJ)$VJcba@vVC5?Lh!e#sS@Su4dC92j0HMS6JJ^ScE*|TUfxjm z&&G1l0%Fu~roNcN&!V_r4F9(+NFdgjNFV4jHZ?>GGConVG5X-A?I;Yl*{EuQ{ z*~aX!w@~c{ZNS9$A@_aMIz5EwzI^C+%f%(jvHB9pbuN8Wc?WbwFHDJ~eD9GW%JvN0b+rpTiOx!vL|PR+tlC~hF|2=)Kp&^Km&~$DAZ&pe;7z4Cgh)h z2qj(OmOTC=Zi&CjmM_DPBJIIP3BmN-2T*i0H8nN&hPtHOpi?OefoM!9^{9%{<$Tlp zuf#9U%)InH_|+(;`D{KD3UUb*)L{XZohn&c5Q8i70sNBA@UB5g10&yL?9iv&j$a{3 zY3#ge4g4x7A1KjKkK}~-3MFJ7C}Snk%s*68A&;1Q8iNr86&YOie%TYA-E#*nQHj{E zJAOCi4fF&UpH9Q;J31pG0~0NC3JBGM0+;uKyo-~g6G5~DlriL7Lh;jFS{zd_y?5NR6&qo@fGeOZxW&m5q52P zOhW`#ix*IvM@Ah%WSBgVPkj0dAD=VqY1|-8<|)ie43mEan-+qk{lDaE)>UgW7Q|`* zwg{E$24sdpmVRGP&?OjJkpAme42?`qFo9jJv*zKF%JedBKfRK-@sjfUr%Jxc1L%}D zt^rCwQ{UFGwRoiCWfhbRDOROg+%nAV>h9$od$CI)yGcn7FCMfRl~-Q8V?FKpQS|NGS=l-#86X6pnXb1l+_@#^;%h zgqbTM6r2CsONn5Ds7iE156q(K`?4@?7uc(^U3hmK`!X<}DZm1#>e#Y&7v9={{`xWd z(IS3CDB3?EBk=?@UT49@~PvhUn>$RKRJzCI%ye11hqv8OQI7i`_PKA>coT zxo2zDN=>%4#w?$HH0$>04KpX9z7na-Kc@K_wuJGzG^d~R;~2(?At+sVt`|Vp+t_#j z`+CPhI9G)Ito%`*sS8s9TwKaZN|y7rvJGOgvn{>7>!R}lA3Px9Lkp9@bIScSNzz$Z ze6^*oPjl5op}wvz(A&#v4{~mYPd=e>x;zhmL0ZLJ))SzrKU*w(-#DXxdNgWuyu>p@Au}NDAX44mG4I^@mqy zt5m%z%J`5aE~EUip!;NbV&c};f*~t7Y~zI*cxqTc1Uz;%`}_afU%meK-<)amr4(rD zB;oUJY`8XH5ccHs>OH<$XH73_cP4F)6oXiee$nhFi66xdAQ=#*{Sm~~(8Tk@MLb&J zO>#R^gdGbbKzO^W2^AUL`z@AN4*+!?Rh_Iq)h%@T;E1pX?PVAx2P7*5dV~I=r=x>h z?s^!I;i`ueW`pWwb#<#9YF^#(U-f4>IC6m!nPfEFbvWhsHs-Jd!}p6hYWC_PE_lex zJ_|@xOfDJtXES@+ox-psIHYuNqhOb+svaF%9@{iY=X8hglkq~PY4-&80sI81Z#mlwIM>4?BSdyf>{sGxSdH4v?Eb!tImeU<7FgHm<^W*|Rr3^8aFbCY)?TiaO~>i4aEj`u`9{yt4EFFd##v zqJ0vgjG+MWh3<)!>Ax5wErwP}ZO@zkeB=`Xs|V9p`R}!#+VQ!X?YgSR&Kc8r#U74~ zaGH~C>}Z|+LpzrpR0KALz`UbRf|DX1hGxY>u9{;QEsvC?4SbK8EkIn3rG4nMVXtBWGqvIC_|<+5fPHPL>i@x z8ABQf8Ph0)%2WuYP-%ESJJ<6b&+mAi_r3qQ?!)D(y}x^X*E-j^&b5}@fX^P=w{6oW z%~+R)^538nt*x<*#2BXZ{H?2-tT(&CW!8T(+doupX^^@=yUb&fy5e-d7Kc6wg|#_v z-Yobh-wEprV%g9o*uQJc*YK$)6`5D&;5enW@4*j$SIRB!R&BSP!)Se1t@xm1HP68k zrqjHRm3-`zyZV1tSA_g!M!8DmN+o}xbbQ0i2j5=vpTYGG#fo%X4@^DDPLIE!k+o~r z)+-8*`kSJxpKIWz0bXvSEr?YTwk+*k-^g@_kT1Re;AiszhK;8gY~;L<>-Uriq2zpMXpEk4&uDDXa^%~;SE5%$WDng8vbVI#X;`1lMChqB{?WJG7ctN5MwCvzj_h(J- z29F^^`#qy?=6_1P&=M{6zE9Z5fBruH3tA}>G_}L0XP&a6KH}R@tLh*nsOMpK=?!0o zj;;l`8;V|BkCT{9p3dRXC6qAd#8H*_v zG6SKRo~jQWqb7g+yE3>sXVr~K7Ltx1_LTQgd>_5&dPbPE5uhd-lr|#*+?#Nys zPn$PxJkDyk$#9VoA9wp5pRkYr{jk1L0W!!?u=dMYS{iCws68_sa@zaqdg9o2Oj5C+|`0>7Jfm?`{g8#B`grO!(%u2%DF+aS5 zhRg}J7Yqp-QbN^t@zV%`4^hraHRkex!T(4v#^3eGJETHIa5!z9xr`TMS{5yJ)BiW- zi$w5l=Q;0q&%8#!Q_?ZllkxGF8fAK_txDcBdCHVTar73MZczZPsq~?4r`rQW`r&V?2S>qPgj>p}sy7)5z09G@lzTpU9@z z{^tb$wj}3sX{Zt3=^DB)*1s@@{AXJm^Iq!qATLYC?MW%jRb^N;) z<2Hi0ZCPYp{P z*H?x`Mn*SlXy8xxZ(6qOD0&ZFdL3F%hJPGUZu_ zp~1wOv*asK`p3ts%Ur1&Eg@9A#ht6(eYay+gla{@vH!T0y18DMy^d{sI(u#3m6i@D zsQ*6{8o#Tn_q(63?RjB_udVGNQXKqccBF|zvipMn4~j*&?^48Zyzlnf>?EwMBKed3 zO@=nYv2WVE`Hbyp2`On1z(*DidJh$nhV-cPt$C{V`}c2Z6>+9VG^K@{-7py9REC>3 zkw1brZizOXTKATA)jcaHSw#ikTP`B5xzy>a2i=YhHwlZX45okf2nEHUDjD3tt%FIsK6 zw8e<53aepzJKqN^yE{0zu=ty)L`Hi8yax#2{Q2_?vwoYj$jr*B6Jgc#&%#?9S&#MH zD#D=ff`cC!gwB>SH^F|iy1TF>aOh$okO`S8ul;GTDoQfZkrkr++BU3twNadI`9IR} z8B2Tqzrevix47XL7h`7McUoy%K4!qrmo9U1IzRWSxB?v^6BoZ0FY#-Wn~k8QMydAo zRkzSphR4}nR<>SWa8yB>3wqOUJFL61#dY5%0|!~h+rBML8``zoL55n>R*?Qh2EhZ2 za7a6@DF{k5^%nyAF=ld-t=il12cA#YtiSXtB^(yX7mTWa( z{$RxM<2OA&Us_(M_N&;z?Oo(s6;}lVK2+~aKGcK$3p^@f-cpSwQsMCcJY#(u!!EQD zdYO6~_GN$xbt=)!JvH_8HehU|O}}ev=dI~fNxAO80G{dDyi@Z)U&8%yG%z^XrZ=BvH2^R%&p)7t1V*vM#WhAdd2SGgp$|v*A zoiESN6@v~?I4!d5Csa5f9-<7QqAVgFCXduD7N(7&nFzFEyy@pQP5c;79iphqPTH?P zFz?<%k3>i(pwO!qFKWLQd9ad};6QdDgvD~z?%lmx`>nW$?#-&w+aSl84d+s+>XDNi zZW+%<(4(S}nVDI?KViVOWqRm+Y!hvDPKwQjq8It>M+ErXyMChJ-!-ag@TgG-Ha}a; z5%kCq2LPgc&Y*oj-y{1(^x`w}uLWzc9sooGty;n-CTt zSBnXRKHEg~tZlj$qeR#LI*KXP%K;PII|I%~dm?k^~R zBhmm8#95@_v59ljJ2A25zUFKpzC4m>i#yTtN>>PBQfj&%Mmk%%!?6>k&5fbB0 zU%Yw+%ymPh1_xF?Ts8JKrQCWGDWSq1ofJN%ZscUKIdFu1QYphrW2(==>~X~2jddd( zrVM_y&7+;5pqP4r8Rd1!!!gl}l+BzTU<$ljLc9RwF|5iR?^@TlS4K=D0~{dQ0AqI8 z!hU2ClX?4Hq1Le`l}(pN2+I7R%|nzuri9D8`xj=D9?MY>o}trUo#p zbLSARUtdVj(BSrY-^YKb7;RLh0zz;}tmz0ncWxz~6ivZu-bcL6zl02nv3|`)qet6a zm!CkE%ykYsaNy2tNgj>TRB(Tjx7pcyWA>vxdC=TZ(!U;%J_qYU{#7R_D80D0^4OU( zU-=%Q@tqZi$dheTec(?*_UyT9qAmDuigkTembt@^wmn89oUv8w-#?N;BHrF@gimF> zFyl?+-Ph%#1*4e8q|soUm6M1^O^3nluv?bj6|U#u?%`oVwt)GSwm>3GTDWi_3@_*o zs+ZOluC5OXkF;)rzq=6%F$ix=Z0(vgC|vIkQ*!KpVVH0EgYSGKj|<>q<>h#l-D#U9 z2r_%)C*!YMSaAyhP)j}9@jlP?jZY>ft;|M22nWGrAyvv6sp`L8f}=F*4G}ETYDwEh znVlY`y4&a61@&H-i+?sW@;RDr9_$-P?v5K{%^G+2UQ4W${Z7JH?mS<FJj9z^`x!sWk3Y_HL4EP&)FFClF5KfcrCm~AzPyZ_+)C(WTz@>v zj5PU7CL(TP@q&lP50u$|>+2(oeZntDIBM`dpTB%zasqzpmRJYYH#Gc#VE|IT@rZz* z-xaw5k_WJNrf^h<0CT7yiTuP!c`1R~AzrKEvCHDmKdGm@fwVYaYhWC_p^dB0P+=4>{ z>ij4z)grG2#J&q%En(VO{Hbd`OfGXvg1*1Cv3e`t;L+ZGW4}~XY$T6K6QXST8Ewq@ zUuldGrLL*zK_4W_ywgz6xF>k8KXuhh#7h*!xSUtqZfY$|dM~3s{Pk-JE{H+JY5fHM zDVuPq+-e}mTVVX6r%#E(K*QauItf>{P^@q?-_}22aq=*nc@e3k=E7SKill_gC=ze3 zcsa_es2C^B)?)($0}4{yc$>HrMw`aR%1uy0wMD`}Uh&CI2s_Jz-MD_eG`YO&O=95} zPV(vTF$XcAF=Ec?U6+IdNKN$-Jr_3mBU&Qki8xvie5q^$8oPG!BIAxd&`_iPxyu7+ zsp?z@J?_}CV`lr=&{dQvcWmFT#F9ag@i`+YxNH+2UVNBtefk)Z)M5-{3=ILs=N;0U zi2>eY1uadTlXP%A-r05V@}l!^fE`rF7Si(2`W}2a#&LZA^yxW-0}10YXXhGS!Je)8fAaH1BSKKKl7ub@QJ+O&vMOS$`)azm6fk4>G1DP#m9@F(!!33wcwO^j+pq~ zr_V7I2YjTzM9i#^ASwSTO!~(2^?AC159PLUqI3aOLU;C8 z^;J@8VsxR1s;0+Iq#d*vaGusjO3MRSZM5dY0}(_J*@z%a^y$%kFIF2C`WPD0`*q-Mx+om%wdlzD?npQvNOVjMAZ}g%%?^ z&PQVF*ej_fp=mF8O(w!(y4aiBqmROfIu;+U+;`t3*eAho5bCq zTBbC5g}sHvp1J2f4VMslbX8o$va*+nGlvn!S%OQD1yxy0BIyTou%eCt;Zlp=z`Owv z{fBpzSc=|lppnrnpfau@oa=~s18PKw|IErToyU#R zN{OB`mJ-gjYu7liUo|zPEK0r?dJCTPXb2g$sVG-TL`ZuYe?Hd4-`-sRZR)@RjAGSh zSwZ_ZxgFotYxCy(rHN#WAndw!GliT89vi2^xcT*83S3FA>vDQq9Afzw_oB-Xvn`NG z>*>=OHf)EckhFrjWgXjzFdBNWEWkO(dtry)2v5Q!wo;28}1TiQdd&Ro%vYhzJh0q;8Hb zRUC)Tom*Rt1HdKa40&|#-bolBw3qmIL;PeE^P%cTX=u2&hRWr{l^$zudHvdTp^f9+ ziao!otHt$|Rts|Sr~+c-e?{jcWXu>kY}h1obNZtm6&9`oa1fSS0em=|1;~T3&t6_$ zuZoLjp1sbnnAdWWf<*xZ3CJT6g@_RG#S0zRyrryk1zk_Gu(+!JgI>#GFMJty8e zF!uJB?-`?aL}P(h{m*4My|CS+BTa0TLKU)V)hdNCYd!#Nt1mzVbkw=V%<{8LoFbx7 z82wjoP&flt#mP7P{Y&iV#;1c|^R25INVdCa#*7(oNI8UzNt3d0tV-|z6k}T>AVRzV z@*vPx8bM0!@RwsAY0=X=CI6HZX4bMXgdm>xVHpVuox89vKq0o#vcJgW`$AbEaJ%Ti zviYzSIG9UCt-gXt!QCaYJCMh4ubl?6*?}CHLrJEZoOkjuA*EWin^18FW20*N`pui- zE3Vyp_ud3e00^lT%dy;Hme6I(3p?S_Z)awTBc#Y{hjL$!vXdORz~UEvBV$6VJn{v{ zo1i3eVb-+e#7*f=LP~)Q?PP?BU%!qr5*b$rDlo_EDKx>Nb@iRK%jr6~F-yX4r=|!Q z31aSOzl$UmkGg;BWo(g(QfDQD9vf!0)tb#HSZYPGlzIyi_Jct;P+x%*9!u883s!Yn znC?rfLK!3+kQ3*Gkci(`by(Ol#m>%--$PKSm-J7D-TL1W|_vMFA5V8w)M-kh_t;0RX|213qfj^XJ#_4gAIwkr3%1lq%uJ z)nO2TjC^JG>2SjD-2{bT&SZvgi#$I~P=CuCDk&+kaUx4z2uu0!VQKhau`&FuBp_+5 zXGNDIZv=l;nk7%HlCL6|QDN@fS6@p_O~%b#$k_Jb&m?^I>* zdQG*TXL5B+7XgXI_1j#XgxMFw{gFvm9)@z7-q$UaVV43N=I3 zQ(PG+9MLG|rhJZg6-<`MMHKLX&co7JT{hfW8=HNXFOwTZ(D}SSBI0S0pp}681IhF=@g=9*Jw*K>I9Q%bzL(?D22g@@ z3|R>N_b&oeg~uHG73}N+B^F`>M{p{71^y3DlzA#taO_6X2yVQ-s_YKPVl=Un1E)Ai zhWZ-Pm=C?9|1W8w#-D30{G?<``5TRvYL_d?$^Eq)nbNfsZi_dlKP@<3BAx-jzm}JS zg5f$dnV3TI`7T~xuo(hw?8xg(C zk`VUXCjxF_A{()=EdiGLGU*8r>FwLMCM}IM5IL*N*OE}7EH?ejjlyjQ4Gv*YI&4jB@M z$sz_8n@E^MLnyp_=~CTkLAXDVlqN8dI3w3rKM8cmD~_=o$tuVckO^y)^ONp-2!f-8 z7#*Xkun?;gM&j&mO-;>q?b?O+vu64b*(&>Ty=Mtpmdx>j80iCJotkw_$8{8$CYZ6& zw5M<@mUKE0%#xA<3%Q&G!oEq6HjiF`oW4ui+;Hj>1Qf(^Cnzi|qpzn!$ButV%D)s{ zuwJ`1{G5m%_gJus7aozNX!n+k9z7a>7*3S}s1`YP^L^4Mtt({ON@Lb6t$ue8Z}GJt z@!+|0tiE((d;}|SPmvdYqZZMKth!eR0GP1Lg7kYrB!mDy*8Ta}qhvgYMYy?{qJJg@ zy}>WwW4yV4Kd^a5_!=&VFn2TbD~^g_hwOwT>>?F7*rA%kaKZZe;u7I!)OVJ1^x(i07#h)vTfWwq=W%t>L_@=1C{hRCQcA$;OeS% z>zaNSd%!}C?_T*|j$H6BMG}P(mf;A_#9`RrJ9aHfEdT+dOJ5I!~cu>@aP(M`8#7}~UsOO~a<4DR$ zaS)*cQ+iZw_VS{5@dp!O1F5n@Pa(t9W&JAXLh-|tNBZ@{gOQMmLoG?*Llj0XW(KQB zbq$N;*ze%Eg$U+fl<>GfZMe>5Zf@Mp5-M5Z$TqSI(F%15J>p&Bq397p>!H}A#}%48 zL^JHMcP`wg*E%K)xlE?KWWt~Y2Psp%Rc1XNkHlIj3_2=HDuWr|9ehA0(H)loF!4T{ zA=|~=xa)O(Je$lWhQ5Krx1TqU-*2pA2YNEZ~%J ze(l&2L`e!Chcu>b%Vb%>MqhLmQL~p{^&+_gJGM0cNq23qJh&>{cc%I7U+)E{QW_G% z07^XZ3i1Qb&mzN3>49As&>6x{QQ|Fn3YT2kHQ$p@aYw+zJ+6}Y-Q0$w`q|cTqDc3g zo;CcnN5U5^^I26RbVI+YcCTRJ2d zlVUDb_7r4yODB*Lh*M{bjKsB5BsD$lie+icq^8CT<243--`hd3u@xOghNDY^4`dhL zrL%%o#>0n+96jNC9;dT-@u21!g^ak|6hmH{384U%e^+|f&Yj3CW#7IMY-|{sB-^<& z!7}aCsd8~ktH|<6o91q!fWWU4+q~rc=TH!@ho@i}mk%(`9!qfHx7_)mO_*5Ad+TqJ z$VebE5)x{tbnuVMNSv@jDJd!9Cmh*5oJUS8^TkP%1JP#2ZdI4OxG7@Fr|0qg{d;lI zUZZ%KND0u%rS}%dCdCw6s~183CE<$E(VPM$9b7^+w;Q&rb4#R*W1dT13dtMvA*1Z> z0QCG?nxV9GazDaoxp-0=Q50ucsal2Uc`RJMT+Kl$O2r6vgFA*czN}-$-CXm`H*dy@ zsun@Z*fUr>Kfbz1&!wiadU+o}1kzS(8z_cF!6%e|@%m>tG-}^?J}1~wBu9;%bOnXG zfPPT)6$F#i7=L|#Q(RbBNGXjEsbi5_afPoy%YFWfdmi{m15tP?+^^tz5m=dcc>;Ay zK!6#69dhmY`2{$_b!los*j`$$>Cs+BQNzKzdOJ9dy9ds#4p}WkrQ&${k6E)VaKBhn z|D3lB$d5?Ld#L{gRLSqYe`klAQyPrN{Q1WjK}DWIm|g<1yT>GBuwp#kl^`wRkf*yv zuj0i@RuYx-B%*whJf5D23{V91WI1~ZQO?*){Qeyiwlo5AO`9bw|cUf=AY+ zvl0wDbM9P4ht7g&wpbQL(z3ij+9`P))4fgT=Av)gcgPw%<`orGFd ze9WMFW@UT$iMca7XVt3!TY3RJy25wW+mUckFJ`&t%^;(&XsN8KYD z;In5TlHYmgpAe?ztg-W97$apF0^o@gCkXlYz0G!Zy~KAL1josjHw%=djLvVcw6KtM z_vt+09a>h-vlbD+!8P#cP^5&=pH!nK$X_7Y_h#3(PPPt5qOL9*3ngo}X3bBkawu@1 z(#4XAIMk7blaRf8?}tp1^6&TI(uJz1)VPV%&4ieas6!oT6S~$ zidoXS`Bj9w5Z9?uU4zCeDek1%)B&##yM)Sub;3W$_&{o9Zc;)IrCoWhjiQ_i%7>^{ z48cInLC5X+o{7=OrYQa$H&`dra=0DYbL-oAi$?`76^>WJDl03S`)}UR&+h%rmd@S| z_40DSOv@tR?C!`KEu50+&~LexxlF%_wPD9Lv6~?+^Ff>x9`)L zteQEft7{k4L$;H5NuM-GfA*}#(5Lv>+uzrc>N!LKVU%z}=>?~O~lnj#r zfa}(+tL&Z=qC0vtoI7K!lB|W=XhaUwM4+u%vXNI%P>WsHDeDQf7lG0g`+x%M)1e=g zQVEm7?q+2z>AXRxSSK>(s8x6GuBoch($hPYtFLQ#`t)g|ejfN(b`pjZx^WE9)cv}3TkPsOX3?ECPN&quWpO2rBjo%g$`QG-hZnbb(zTJ6Nw&DW zfB(LEU2mZ-jGr786-D}RCNUAd9aiAtTA}eQ7rEl|=S7-o$m?A(6$pHu6URD;A&yQX1?(P)YM(`gfR1<{Ea`EoS^}yV``{Bcf z0s1SQoId^d5qb3J%bc8yY&oIHo>kYDb%aIomoxG4bkE#G>&a$b@yR-m2t+)^%_HE^ z{!w+$q0WXP{@ehtmR5lz+Ah>bp+O66-IM-!u?)!8DL~&GD^gkRGtZtX~ zZD1UEn#!|+){u3Oy)d{9UL4nQ70`b56t%{<_;_VS87c&qtsDQAfUB?)lm1GQkwNa7 zZ+_9L{?-N0pWDryD^||K%VgR}&YU?@InV=fEhnK9#%zx_UBKk zvi9JT6)V(7cNF~n{9FdX;M9Ak9Y6k>`@_z;svVOZH&IZd>_`q)pgmos2RNsA2G z*`QYAW-5mXBoLQs_`ESOFbJ0}x8K^{YXNLKlpF6k#x*YvCWzu5gOGcliIFt@5o32U zD$2iM)Tc8Jq~nCE5~_S~3mrRl%>5)}Xo?ggd2LAFG4H;8Tgm@iToO2Z4Gk;pP!X*O z%1mw2)%``8knI$$pFdTm^$d!M2~N(=Txp<`jCo7)m%Q*>NvDhyVDVmsw7!^GOOe$KhmrD!ypGQ7dGqFN z+Eh;o6N|tbU*hUF+Ub<2v!pRNc%7#wGTDQSoGC1PLq#BXOya4`6+HywPrNWdOsC-u zg8kIgCg^b5X!O17R)wEX=-s=z-Wz=!9*pOcns!rC$SB%cNAg~wi!I|fAOko6JR~Op zg+c!6OgzSWi$|eN@SAL9MQDbLV}-#9!wu(m?8xF4vtszg90|t7BjI9w7N;@(~ zjv9r@GVN>Xh*O@X3?cRIksUci*t_`SCGpxlF!c@?P!U*xyWjGIEv$jen#S zvutgbE?bs+Im2Lm&Tx?_?b`L?#_Gj$=DZ}GV0GEM%fp3=o|cxDI2L_y3W|wqFPS6rP5@mS)m3FohB{jY%jtk6ELU9Wq&S(4a zCZ#B~VK8yPFR;}L1~b>2RJBuw4s&=4atWL*j2|O$pOe{8-$=t=;m`0jGt!92muR#^!$btsnrSn{m9C(f%Ozu7&*&2-?m?CF8}_$zGu(F zX!K76Rn=D<$qPPN{CH|Q9}KN>Y)p*(XCXb|>ea)FH6*}^Tqsx9+#C(a>_yLos$*ib zkj+K#`{c7g!#_Vba>QHRuvtoUUSiz%APSdEXZ=U$S}_d8lJd+Z+$kRX8~@ z9mAP4xo@XQW@eespO02kJ5BGi2tWD=(if;EgEf{*ggu)b6B~PRP<9uf;F&XLQiv## zD}JY@rt(zTR@iJ(f#7c=Slz<*w{Ng0je2 zQmAW#`4MmsC+Uo|W$KKbUHr9sj~~-d(_5}%Mh^BlYt9_iZb2C5ceruad}VOFoLn$u z=#1_Z`qeQyG9Q$9^mpEUDZl`2Z~fx(SSWs!!KlY0B8aPTCr^?QTU@?G+UUgCyrQDZ zh+|L?SxN+mg)_^VB3txxF!|zpgZ<)Se z!8u&_y|T?+-&ou{=}BtQ955>E=uz^M3+K=8_32a^5EC;9kzBa*bTd4+54wUAhFQ3} zL7zfKli_x6-v&bU@c#WrwH9r?abuIIsVOQxJF_+lGs2G@Owfxahrmvmp&WI~a75lRJ5T zTfDF6=PJa4q@La%s+AOKzanJ-C=;ON1FHB|rBZ$cM3u!9%{ zwX~@G3>h=#CBtV?Rn3`mRC)71-(QZgGXU0i&0ikmCTd4N<|y;d6gC0GW@cvc@}U%4 zVb4i3GfMNYkBEp=j1RW~W+ipmwM%BbvVsfWi2b71>1}YBud;ARH^i=&XO<<$9GjAS zD57C7w9pAXkA7nZZ#&(2b*-f553PIetHtK$g$uK@+Xz)={6esvp-;n=W561E}E_@7&iDnw~;z^HID? zGbC^usN^0zeoTh47@pX6|MW!?(iZ_~|9Uw^1wRB)!D=e@6}LiFq0|{DVOzG% z6iQZj@ICj3hXZSttyuA-Y!&Y3+}X2etUX>|&wc&+33o%v!P&W-)5fc?e~6HX3XQzz zQFa@tHo<3mjhKt0;fZb=|LGrjX<0Y#U6CbEb_ZT3oX?m({o=K2_kXT2>k=Fe;DSaq z{UOYnLQ^DJ&skX+!9-l&L{N`a4NFY?%)P}q((DHnv>s^z&o0JE@@^NGrFFCx?Vs#P z{hKyp&X&m*MO zx9yI6TH4w*zkUIhe13lDkit84A)(Xh)+NXsTu4q&(_{SUbEi&;`$@pLK+=98$-Yfq zXfp_bL<_|;jFiDyq-_%ehC;VjuU^S??6`e=G*=BXW>v@5t#^Q#Z6$A0EdE>oN_eqM zD0Kr1!cXnov*$xiJ^u}^h-AceZTIfotDpM%kNZR&iIlp#aZ~{O^`*6@EzfgvyY}gG zCMJee34h+(h%@N$HJ7`U&5rIfIeC9X!w)~!@>(7pwLR;7^mADy+c#_0tRWJeOiY|| z*qwY8pJcDwMNoL+U%IIwD!*3;Rp z(uN2;iC)8ppCP}bcG!&L#4}gv-a>nXGpD{}e|32wrV5%M5l4Ur15>!(n8RxJro*>Xc3tc7cZ~bj%Ukvbz>_NmH zYE23rmoRQ%`0%ep7RCfo0cA~jyyDZcRb-mD8?mRZyvB8pQupo$Pn@6&ukPo^X}@Q2 z7*Ua}*CeB*h9(mbAw3F^Ph=plEaCAf)U!m&8t>)nYn-+~CZ|6lGPSW|-;|V;0Nf}5 zjLlq4qW};zE6ShlRy(ybnV4h$4 zWk>I_nc_LTXnN0u-DLEZY?H*$>%-RDiAhN;qQcMsmek?st01WXLHQ4ig>z=}nko;qtIeuj&$6Ek!6Y-%NOsGL~| z8~lg1#ZvgeH$L!805dZ)slVen5v^4NAT)*2QvfIO*Q4=SI&vpQE(wHV;-MhK@VU?< zGi`0j*zapd2|gXm^o4*zf(+r51S6|#6*NcUjO1(AE@_WzF_VfzngsR?;z^f^K1fG$2*hVo*W-$>mmx~I)(2UAl=omJ)~VW^@ZKL z0aTP2V5G2)^6HJmvXG#l8;mJ=R`^LMJ>%x$g6i`&x{ht*%Sf1$SG*iQSPzlLtXYL5 zA**l9=Q&}ePUqqjL5e+s%)zKk>s0#p{wn|8|Dfl(b-A7_IC@!95*h!LsMB3uzNnyJ z{?+A&LqlgHfrEZ)Httll?w4%V^qDiw^gCq?sDeWf+f5eU3d=0BpF0=HY^nCCX4){! zrcHB$8~T?+*J>KJYwY&vIX{RT`Ak9rD)sj7pWNPcVhvQz)ir#29rtMGCTc`vOA5Ex zT@4fh`cRCuV&5#RArx13*vL%QWDr1ckhCCGjuLW`xkKmx26YQ^5i70ZK+NBlt>CY? zoQT26n2}$?SAB=N#I*D6&tJQC#AhI1T|u%nji~BFTK*a}9SjN=i98d($F<-Autl8` zTCV_|x7Bh4hpxl>(kkIgCV~CguB12cYcQJg6_@HUR8px}_A1l+`e1)?&UHQ-zV7{Yxh8d@1-l7AdBdtD|?oanV_6RakD z>+!*(@y5-lBMz6K1sw=mO z7w7dk1df6O;aIp(40JSJFDKN^1%}_uTz!51d6+p4jpWD|FGYMiJ6zDR(b3amnxz-2 z3>dKo4=7nxlABdp`OcH7hrMp9mW()%t> zT~Ili4(=k_fw|YjVw*SAPEd%lYWF)jGy?Vxmp=Y!1utJdG=G7&LsAPKsH$&7`)4DL z+q=Rf3R^I zzd7#OHF{TK0c%GNAC7>^==bwAl6(@<*&z;Ca5c@AISrvOMb9KNmOr?+fWF z$l_|ym4$`6n%W)TJi+G&kDTTh= z8uLL6aXw@^Kpg)nrwx{dKD5#uJ79n?tyr@5h}i#uwA6`qqsb_1v%<^UqUC zD@>tKQMJ+Nw3lsfYS>wo-DZ*BA3o$Wf^X-4K|;(5g(fS`VcfXemM=+bV9j8NN|GsV%Yets?V&RK?OErN0an2-ulgyZtOxF8diE~-Ni zYJyXDWHQ^+l7YG34@Y$H>hR8^;lzatntw-T%pRZl6M~qsK5{B|m|Y!zdh8}nn$*s) zzaZOJXV+wF>&_iITue?zS~j}S9m-wNmcc;8S7vS7+Sy%tEMyFe3aUYg!zn=t+1rP) z+$Zvx!xfiYR0|VB`i(%n%WXe*&QkS|m9y$IUQwk5D}qsY844dHRQRr2aalK|qEpf$C$N^9x~egF%uOP!gCX{0N951!H7d>eTIWj1^70@s`Y$2SL->jf3*lawesaXp>#09_VxH(=Ep?aOwR0yjGb-JWVL+y zpw1PJR4~YFbq>eN7Hnb13HU7K(xq^djAfdv@=p=XoCE38~Gc zGj)mT5(Q?2aM3m!sgmEnKXLs?p>7mCytpdpczZnrR6kojP|GeUIAUjM}+gua&xO|YvVMyNq;K6g&YU4 zRQ?bHW8)Lbxx^}+pk6=;s5h#wiijvaZ`~?+_M$|U_USWccJJDSPHadI8H$G1vx1(L z*I?w6s6YTX2w|WsJ)o^8v=FM!=})@_nNygiS$o9aHGFj;pi`^&k`AH74WPvNQ4T{; z00~c2q)1(}@fI{8#XYe9;^-CrY1M=fs&M4_h*Y1R7<)|ZJ-3!dmK)$~OpKb{`xGC+ zVH*B$-A;Zi(Gn0&28i8OT2#3WXpa9eusQx2X&9mMJ5%!Ke7S$;&LCssG|K1HG#h${ zE9LJqBsEb{5yewF17>rB;G49x#8S+kL6>Z^UJjKAOyVu+5MWAgw9R#>Ppk>J+b=|q z_I@Y71OP$BmoKCKnr+&+v9JCr|1}t&SP-#q2P-C&mbBIZ6>1SFiF5(OBFMfNOS=@1 zPUZ%igin2Y+1Z+dq%1gXTE`Rxq4pZg4;cndwuronSjJzqw#JL@*tTt{lheD9!-9`k zRnyZe%FGNn{eh!FYqFj##p=td`}}+LPt#(3>q(3_uaB$rb=J_SFV1Is)z05{cYG=u zdnQAzU%i@@WNm*{qB2j#1jLwlY~K9&eSg)x@b6X%D8N52yW>X3enQ$=$fT_IKxJ5q z-9bUYC`T|7;z@jvnp_p#PpYRT4*`co&%K}4SN!UY?OVTk;BkI3Iv9*(^QKL6=FUYd zFnRLigv3Oabglx85%Re6SQg!X&Y^Am-{wRAgJy83TTC5StRM|nN0vh~b47&$-H$j& z5s%=Gw}C(^!Wueqd~FL87WXeWN&sE(1E| zl)&xu=-D%ZhQyK*KX4EQi6@sXP%~Qc=`tzlDR-rg#ThoJsbPPQMn*!kPf)%U=oC&3 z6h#8HVVneCjNJIx$R*O3$MpEMfzmi%O+Lt+7ZHj1zq`aUsQM}jF$AGG68SUYDD4t? z5({ST#PfEcj~6h@h=L=`Cs>fHfC;}CDiIZ0P*k+rJceQ6@8XDhe z;)8Y&adk0wuTy_x5WU4Rdfgr+d@9 zLjdI8$M5&2I5(>ew*b{exDh=pBrqKGX;p9I66kXsomz^LajqG$0(hH?xeI{rBSJA23@OQjK-A$@w;Z)sFj2^TkO-F-f z^Vd4IgftF~L4O0!o$-+cnn}AQWWB*1weIDgKH>Z!aZF51#P$HGpBs&olp=5vJA;B$ zk$AYc*gOItvsv3^NEcY%Lx+ZR3nI_UL(q{18wA>wYjqj^4$+7Tc?)PV+GRQPe+6EC zD(N0o*Edv~7^=mS;Gc0+QF@0CAI7j)gK0l!4n*+GZ^sZ}@F|m%H?-!3t3~yUtl)hD zcgd;KqCuI-9mOZr4=z;JD}}K>(RFgC$_4LuBz2#g)x&Ujc)yOB$_4%dG1o)a42}xOfh{? z%T6049#ZY>e~0u8fx>!vddbR397I7T@@X!GSk8u!B`HQgHGlqV0x#@Qwnhgb@)X5e z{4>9oe!GiTt}Gq22DQ~ykr7rUku3blv9 zkOV)-)oljUqB@d-;J$UZ2IF&3ZB!hC;PMh`FO25Y*d&E*k2f@hFaCIrOyb4KfD z)DQY3VB#K~D^YKqk*6G5?Cd;gNgu2`+9vG839DJLfE-N|zDR~+YrR{j8$?=4^$jPL zjOrH)Bb_6{Gm~U0IPA`y#dvm}kTNR};X8UVd1?QW)7Ux%MKUGwC9r?A;;?}OqbX<8 z+Qaxja#v;xBA5uoEBKz|+W`!E(`f(b5&L@w(TJt8IQ;isN51xMt#D z&>B_}mo3%=->$^LZu+?tijor}&2gHiLhfKNZ4*UM`XVe(5;90yUdS_83^lu4YkrZl z0W3Px#%2{-aF8CwVM^}z_-lZiW6ZjQ@8AXL9Oe_vCi3jm94b|N0uc%o*3%ADS_y{8 zkWe4ZyXl!|IsngwXY^@m&=s9WI8T1UVBMouUyGE6l?IOOeebtyf9HXFP2tmAoY`VF zZk*VO_+&NFlQ_4w5xHrOV?ZZ({c%|!t~a0Gv=dbvBO^|J)ygtidz%8pr?C3{V-!q$ z8^H-F`Mh$9cH>fCaO@V2FE^9TdNXIuLJ2Tx-C8vAcad16o(GsJJ^>z3DF%&D{>1H3 zSEF)F6!?iFk>iviNbYyKD%DOSXTLznp9GoM7&bPV^D(=ik^01_U&!N+j~+gRUjWn` zdAo9I^!^iExpiqA6;=AKLFV`}Hf%0)kQbd#piwI=kue)$efq+MCm{I)Ns~CbqOzc+4vBtBvUf~?Npp3` zlWM&Z@BFpH6Tbgi<8}WwY1^nQ&n6T4@1ImZo1awfH}TK9=7yql-~3F?Pd|(+dhSgB z{F{V;4*+os95}t9S2{S67R z7ViYzoE%GIoxrEn0E^f|1vPg z0WivMa8m4$5St>Pr>W3zc-%%@Ay5-}39=g)V){i}>03_KP27atv*%D{Wr&CK7zxme zjD$D~CZR0O)8fwgHX^|#stv>p!VcYA$6o5~<>Y)AG-Q~c@dpG$yWhiE{dcagg*rWdY}!?Qv2ka5y*H3hr#-}8 zK~7FoIf!~vY#I*YVvR(`voDpEai8`|uMx?w4I7d#UE(dtpx>|3$CAj-4=MENvzgC$ z`n1~mMgE!rfff|I2kozbzd;cZ>z-X$c=%a)e!&u)^n8ubz!@UM&kAuKy^S`B2oUeG z*f~KqDsfxMim1!>9W<@82y9K$TO}WYf-EOOf8}cWF-c{}Z*lR%QA0qoySW_;3uBm( z5)J-DITMrq{qqFxz2uf8P>f31dAg8trLC>4IE;mY6~Z9;XPKwQW54TjQZRX*mv`XE z5!TKrpVo!(K&S|c7db_5seJieBFH_oe}DDQpN!fasB2vCv$5%ipS88MbGEn^edXDv z45pwp_$W6GTjK83FaI_fW5UJL=g-FvTfB7X-8jETZ8tYh4t`5VXT=~K5F*~son#yA zo6{RVYU9aWRvOnHL{7P9(}8#~D{)I=@p!`DVD^!YIfn!W$5UcsP}Dr>9T<+<1##dB#M8 z*r*yWj+FFwCtY|&i3ZSp;6S&?XVwsAXtSLaZM;S{2ll)*1KF|T?XBWy2)~B>NM)d@{Jn|YU`+tLiE>us#z`D(J~&cuY{=(Q_~(`eM>5Sfo2UD<9(Fx^blsoy zmZtRPuj#eFez6-Q<55OKE+Y6fc`cKlT~2=)6_QS3+*M{fg)&=9Fh8YWDk>L0s$^uL zAf+h?x`g})>t?{>uE3>KXo%xf;m}cEh0!H3WHJyY+|IIgnD+t;$EN_{M4$LxG{|mi zQ2sJygt~e{A5mV1Nx{gcZkw-B^x(lxF@_pqfpzC&i8^ntKSGXOt)v2I7j5B!i4xa**`VuqtOVHp@RX{N~E z3bNx`lMbP-#q0h@aZqU1$H~*CwdiY{LUFaApJ05xRa2-=9;~B7&-OWF?Vu>cq)e9z z=enZlL^sBmsG#t+W;4;a5cli6)A(wjE*iiyUPU0E_3_ZUS3-TGzy7KWvvMUb=0Z1`sySty~eIbphw4x%*J~6hqpx|zH5hZ~5A9A&I$9Mo%@z6SG$In7v zgz!RoZd1#wc6HrwvMyKFqTz=UhdCEXB)Y#z>ig4kL(obHXCB;Nsud#aPDn6yQEXI5 z9Z#hM99OVUX8RpplVX(T4=Dr=56#_kD-S>Zn9WMMppuxt(3=P7LslEV3?<`&Idg*6 zD~M-Ms{N0}Db-v2ZVf@@==HvoYI#w_PGra0hOdihD*)@=z01=?Bk}1vJVVM`^0X?E zVk}#`O-=o&en&@_@mP@ClrwQ|h_cCH2uREB-n<=^RcUo~>BDZE8&@1=flIeFBGFI5 zzFIFJ({xYzqHCedhZB2ycVtFynMqPByjd$(T7>z=Brh1!P07Uf^|NOlq`d`6lsj25 zo?p9VqM=x0UmZ1dHRL0-ODf>Qr-Q=cm0 zlh=M6BZL-4gF9_vf`U3kK7*bXu<@O^zutMwo|NY02& z-`_42hoH1}uQ=Mcz*&wM0W@3;naEtgt5<(vCs<@wWuFPNGB~2*Vnb$V-5-HV3TrE? zOXHJs{I1#qIZL(BHN09IuJ!8W%j%6rd~q*pmsgWD_Yk-#*$&m1cWuwJ@|5e>ZLGX5 zxa@tII-iT-@giM399p{6S`!7KHUickONY7zFwwc7?XZwr(8AY9Hc0y z3Y3cA^KUo$ub`AbYtt+($8M~OB4>jd$ReR;MF9#_DyeiOAI<~dz|L2dwUJdU&}FR6 zB!ZunRrae_24v9D(OV)uYg041c+gmaTF^ohLdyB`#`J)v#=vI~4k;5_SzBjaQ`QQD zb(HVX1Cnjq_U&{>=q7%NmZm!h#7^2f@y-e1<`X9} ze`B@9804X4(2PrUBw*}McR~buUt74@p(2L z1w9;2bWvp8P!gieO9_b~mqiD;h<*@s*r~nx_NREcq z02iop9{!-Hu<+!>u(z9(J)23cnTD{`K~nlGsRwyF?3I@Un;AbVwQt{^0a|4>^#y6U zl@{>&WS`A0j=@azja+n41-*l!zJwHs zav!cr=r%6k;Q@z9i2*N(ysISA|peTqFT?+zwJLGlbS_qR?XqpA{dgE zhP)+9MOe!0l#8Hz5I3rK2l&E+2lL_H!ZaO>nfZV6vk@%Z;5}_^s27U@<((dZXWL9AK2YnN0t6*Ym7$#`KWQ81 zXyWSPqN1S@Zx#7=A?j=db@*A0P(xZ#mRHNl%2H8g$PgtfOi&!RB+6cgMmfYNUqtO@ zViKurNERG3r}Nc)wL57sg1rdIignu6?+W+aa(~4fZMWT{Iu_=%*)=L(f8SIrA-5-n z^7G71tA7W2;vWRm(&t*Sl42e@R*prS?@v2MNR~)3@soCB9)*3rcyVOpvp@e&YiAyo zbKbxGW(;O*nX$(RQAC!atc3_slory06lIAbwA+`FByEyP+OCu#Nl`J;P!g@Ol%=Z` z(MD-`Uf(kJbN`<4{P7&e(?9oZ4o9x*`~7_0%lSUf^WD&Zu9NRMmRbJUCW&66o-pYI z!;@aUm;h(us6&|u@&L8z{=}Y9-9p!0TX~Ohwxt{ok%#mF~2+ z@87-KQ2uq~MBnGh$Mg{mwpNsu){mPffEtcL!(C}Y5_s}V8R@>EI9^%qdbPRP!Fm9E zlFEC7l`MPp9tjb7vaMU&VN*S++?@N&cYKQEH@*JrP~I_+wp@ulfSzFG5$B-*yuu`{ zvlwpOqn7tn=3*JdaKZpgtY>o^g7e~^T(ksE$QuaI&qU;jSC~1apr#oHc;b*n%RT%w z>7a84RCotRzh3%t$HRQw{oBJV704JoHrRrc2(WJij2@LC6DXES4;oZ%n@FKgrlJuc zste$m$~=y6(V!p6=GNAf23+ULni|13mst`s0ZG7Ono$~~gt)lpaT_J$3iNoJG-e#n zAiRJs`WC>6klG6j!6CBF7sN(Qs+R)Q-@9g?VF+E-la>RB(lNY!Fu9{xF1-Xx3FdZt z9UL$RLy7#j=j}(I;waX!n=F0(Is`g^jEuRpHNv7#A786et*0RFUux}(eSh|)4eG6v zI3JKrfWIi~DgQQYSo(I2Wppr)ICtqESz}U@!1f+j98DT6CHrK>@zr6LBtR$Cpk^t9 z#qRWCzpv~Omb+T^Vmg#N%_(+Xw{Fc&dglAoK(ga$zOw7ARVCUCDL5=F!WNI#T)Y^w zOE(A|yakWHIT606Pa{FkV?5=bdVqdW1}^O{(@>Xg-m+zbS+rN8COjWEFvt$!u4s9ZaQy=4*I&f+knu71-1PtlhcLnrAXXVkO@7}o+vZ%4W zhVwy`$a~fPuy%%UCQ}Ey=01B?Ra&}Ws}9H2YyKoRIKBWtu6~}F_Kc@Snmkz$Yl5BB ziyqgYhHJgIUm_XpCr03F01n`MdSy4t8)&i9f;g7i#9W22;ce~)@2&Pf7?(1*y zzf5fld9JNKLhAM7l}DM`mHkC)nO%OFPVv0&$&-EJ=TAKlJkJv_{;3$KDaz}w3iIJ2Z z46#5x1Zz!`;jc0`ZQh*8V(XuOLMAB1l}$cZ{~KsKZguW~4F|xRKdAze!7 zMYZklS)uU(dr6meIXwq~PSst<@SToyMbv)uLntbdUsX2XH}<1XuYHrMDA+)EZ{b1b zJ~%2AU}>t7Qf^^kggxazn7L+1{fGA#Di($fJmEaDV$8$erhyHtU;oL!e11$86=ai> z>aKpv4t@epsrW%yBze+m;N0XcaRQUQi-qc*k0S;wTe2kN55RrNp=upP^X*felM;!F z-@z@SL8PH5@%;sVe6jdmdEFodqp6@{3m4v_x3EimfxFNpURqOi3*&2apfVRa-8rrtTB5yl&xQkLe^gEH z{iv?4&T9I+&^}Uz0$svLlFlKiTnMoNmjx>5P7qP%SKPqeHO<$yy_{K=xT1|IilygB z%OhG2;qOX*>Nt`A^raHb^Z5aLcudAtjx!)=Up=VNl{ z+1a86o9)5M9K0M>U|c~mRrdAkWuNxY08m42{E>6Nvy+c5bfs*+nL+hxtfzNy>`#O1 zE5>BA=m{T+-o1D2*ul(n>g376ns+WufIN+M>uqJ_kPZsFwtmM*VyT4FIXrV%4LYkK z0_YgF@{={b6jp)LAHTJM!tEEL^XA{K6v`Yc`m9(-U8aBO2!QLv&!ir?DSRX_f3Q)(S5_&nW`_sO$Ef8Ztg;$8R$V8Tf5F0a9FuY({Eu9Xb$KYE8jo6u_Ki69vW8+Br+E~ zg_UFuKz`=Yf~V(DTM*s{n>F0s(zqc1)J!q&UFr~3NX~m(uz-+Cn3GY9l&4O;*ywX? zjj*Hka~CesOu?ZnxuoBmuJTOA7WxW+v`Hg_{dXk@LxrDK$#2hg^4b*jb4Y2uz3*KL zj)POL8kBu0E&H7tKHr;&;+lwM1DU8ZgeMY0dQEe>j=8Q~{cpk)8|gOVn?KgDaDMI=~2gT(ac5JTu+@REM;$y^nqg zpeLkkFeHZ;7BYu?3bg=&&%-E}p&ROylHS@7UMfE6bhX*Kwe_`3vsIq#idna{58a8S z$v!-D*`HHp^`cot(&zJ8FN#`F^8^lr}gl0lKRW!|C&&=hijA6 zKR18WwvKU`#M(bQ>@;W-2MD-@>LS#a2y#9)G$3I2N=%&5QTCK?pZ;*vOs;$Q8R)x! zG>2*-We3qMX$q+K>%N1B`R$2kVohV;y?ghbKm7>8RkpNgnSvkQ)wGcQ%h%BYpZ51( zO;nf@(=GbcslNP0duvGw@rQ~_g?e66@^fROrLqQ+HcY7fpn0H4o;AC4Q3|%?D0bXI zad)SFeOcq$4g$AFwiU>b=ts}go+jNkLQZZs)(Rh5>TTQJVntQ1*3J;DvaGBzA+rJKl`j@*)bcPnU%1o==DNdJcx;aG+@Te`jy(JsO2*}p6rp*~6d^N-3z zlzN9PydnJ5mZjnJr+r|U^|& ziC3;uhIWS~wh(CU;K9k#N^GFF1p{Uzb?k|bfdPE(SD*Hvk6Gq6pYSt({{F?IlVJX< z<{jLJbmDq&@Q68c0-O5oW`-uf1Wc)Qb=Max_G3mv^kRrWRDyh=ZPNzuEpT%O?f+pt z906MMy!t7dXMbsG!X`p#Xv>qgKFw}@DiTzO_+(cnYJCo2?3TyiDKl&}zS3$``Kp?l<(J1Ny9hLj zhZkK>Kn)BC7;19R`OT4$vv$(pEo+}cdamAEW!~OeA59!U#X(ZkN>&fLSF(kvFBTqo zb1=2J5>zpX5q*dp%5RqwMbbizoTs?*eW;JW^{BX@C)6oc+ebkRoBHTw&!_mfGJtEM zXwy4YB)9ExWNfTuT<^VX<_X?ju z@HZI=YH&>B!g#RK!>xF$cl@aKeq+;S&+WMyl+t5f1+jiZgGL(?yv$nq|gF3aLhC_b$C{kgUL=~Zeg>f-#;CtSSOx4=>D>E-L59xlgHJU&-9 z?V1_5_2K4+OScuO8J{oTd%nEMA;q-()}u_Z?FUCy{#mzZKtC^PtJ9~iQajR3jm

  3. =2R%-~|q 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 CE}`83 diff --git a/docs/uml-source/DataStorageClass.puml b/docs/uml-source/DataStorageClass.puml index 4c4c61f498..706a02b37e 100644 --- a/docs/uml-source/DataStorageClass.puml +++ b/docs/uml-source/DataStorageClass.puml @@ -1,17 +1,17 @@ @startuml skinparam classAttributeIconSize 0 -class ":ComponentList" as ComponentList -class ":ChassisList" as ChassisList -class ":CPUList" as CPUList -class ":CPUCoolerList" as CPUCoolerList -class ":GPUList" as GPUList -class ":MotherboardList" as MotherboardList -class ":PSUList" as PSUList -class ":RAMList" as RAMList -class ":StorageList" as StorageList -class ":PCList" as PCList -class ":DataStorage" as DataStorage +class "ComponentList" as ComponentList +class "ChassisList" as ChassisList +class "CPUList" as CPUList +class "CPUCoolerList" as CPUCoolerList +class "GPUList" as GPUList +class "MotherboardList" as MotherboardList +class "PSUList" as PSUList +class "RAMList" as RAMList +class "StorageList" as StorageList +class "PCList" as PCList +class "DataStorage" as DataStorage class ComponentList { +getListString(componentIndexes: ArrayList, getDetails: Boolean): String From 1e5de24ae2b396dd7923a789497510e05df51b33 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 16:23:53 +0800 Subject: [PATCH 314/420] Ensure PcDiagram correct sizing --- docs/uml-pictures/PcDiagram.png | Bin 135235 -> 135243 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 410b42cdcd75f63bdcb2fd5901d01966f87786e1..e0b4eb3efd3ba9fda1b3937d776e5a02a18100a3 100644 GIT binary patch delta 887 zcmV--1Bm>?pa{#L2#{F;Zjo9afBKZDP_^k^q-b~5ghsSgXi!Ki?NjA|n^+|_GN!BU z<=@v_3?^ZdqOB^$J|26{IgDYh5`nl#w^7eXUI>j5M_aHXlq6#zI9a6v-v*5On{8u8F%|hrHPZsThhoWls6nR$9UZhc@|PqFpkzZUns|#Cw?JC{?=A`HvH-tApb0& zXp2X3A18FJFp_v2uTm0;5lk|kh^nPk8m_T~NhU6XPUUHR{SdQl`#=kh1DnNfBRQ;4 zd1U2TKTxB4?bN|YceUCzf63_-A^kzE<4-NN+E!_9k-XxFhC5iyNg(5%BZgE;!49YL z9;ze(<2ccLvc!gC6gHq0O0XTV;H8npS}~T07CdG@FmFPM49XsdPW;rKyWaeMdcS<~ zmy6qbM=irwIFS^emfyYU$zesMo}$bvO^Lj6U2@%wegD>Peac9Jk2!qQOnW|`O&3j#Dsy+0ilPZRI}>zb?^5q*r3fvB10A2G zvr{)&g6{HkBJGb9j$ASAwOH%h*CMf&o6+XPLDlYjc{5#1=Htb6Q@uvx|4P~1A=>_^ z|K&>IiToNAURbcje_O`isw$T@2ok&`IuK(VYV%!34*DT8)jphNiI1yqYS##wIyqA# z*5bht2g=W$a-lG|k|^HdMtO7;?Jwtxu`|_$m-)JiuXvdaPTlp&ues8?D`o#S926%{ z(uK)sS5Zgq^nn{K+Yrn8R?W53`#}M*pLuIQ4Rs&L4-5#3ezy}oDDBR zR6Mvdc*Q&+jKam)@O(Ht``llq7{=)uhL>=DF_Qn6=ioa_$d(62-|=Shos{wbLr9XM z;gM^WK37x z%fGL=7)-(@MO#&hJu{v;=P-u3iUr~#*@Yb=ekL?R9PPjkQ5=tj;AE2seCspnk)Id_ z9iwCTsSmm%*X{y}!L=)s&2|x^n2O9(?z8}Rox9w1WpoOoqZ{of`AgzFe>z{ct79`3 zVy>#?yDDJD#1rNlhIo*LX!|N?Ii6)s`CA!1!8qFD%u%d0O}w0n{H>&NZTQtOK>k@k z(GHK~IZo(S*+}eiyh%tXMsS_tL{zypNwCGzOj2^G=}czp=}F9{<9#hS@@*Eqj^whm z%9N#MJzuTnTGswZSG7EKf1Sa}Lwfy+$DfL9d938zKzYLv4fbpiC%%k(3>i`-1v_5K zU6)0C#&N9aWQiw^QBX5&P>k)6`Omc~)`qcIG}t5d1M|8mmO<&`(1D-XiAt5>Alf9sf<{3hhFy8b5U zwfk=ZukKh0pGP}geac9TPbqv-Onb4IPL_3!s&adl3Ze-*IumqYZ({Fgtq2W`11+DW zv)4Cif%f!tAkB{yPFykVwOH{x4p zwvx!o>mOLNya(1Af~HIg{ejPEtWqLA@MPEzD<~Ennos@7NLqOtu z;Fjn6#vOV=RIp5_AZdRrB24dYz9|Dt=nLVD?j%^_?tWGUe0XPF69FFP5((VTj2rxj zl2FJKJ_}?w$jL6c7``7GQ$)9kRAU5~O6oFk`lj$4<1a*HnDAg@uY=D6htC56x6cCt Fd<=TQx3>TQ From 4f2129048c60f34d7d7c76e2bb44e115d74788d3 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 16:26:10 +0800 Subject: [PATCH 315/420] Fix correctness of diagrams in DG --- docs/uml-pictures/BuilderObjectDiagram.png | Bin 14611 -> 14631 bytes docs/uml-pictures/ParserClass.png | Bin 11773 -> 15780 bytes docs/uml-pictures/UIClassDiagram.png | Bin 22067 -> 22030 bytes docs/uml-pictures/ViewerObjectDiagram.png | Bin 14762 -> 14776 bytes docs/uml-source/BuilderNameObjectDiagram.puml | 33 +++++++++--------- docs/uml-source/ParserClass.puml | 4 +-- docs/uml-source/UIClassDiagram.puml | 8 ++--- 7 files changed, 22 insertions(+), 23 deletions(-) diff --git a/docs/uml-pictures/BuilderObjectDiagram.png b/docs/uml-pictures/BuilderObjectDiagram.png index 08051c05cce0579466f8a17d5a941ac09513329f..588a2bcbdf398b3ef4593748d360de7a8b008c94 100644 GIT binary patch literal 14631 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 D9()oQ literal 14611 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 literal 11773 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 IKClS*A15}|CIA2c delta 7388 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�s^LeWaB%wn?McjUr2saZ(Pn~V^Oz(&2^u1uvU zaQ`ucvQkM5KU0cdmd)&{x$n?1Gs8W-%h}j2>DEO|bB#xrxuw%TdG>7Hxw8~;CaD~N z(UxmxLpitZlevMzM@b;kSy&Awctam-&KXV*du}Z8V)iiZ@GG+GSU@T=n)yRYx>g#7hm9*=iGRpQ^VR7aHup} zOxAgteICuPwTEjp8Zl+?yE!Q@@Ed_&Cz)f)^_)P&a&~quJIT(vQ{cNd>B>h`HhQ+X z;nValdQ<*a=qPFk9djB8aGbYCBkHAi`RLf#p5;wzYp7_;5VSJhazlXQo*ZN=f}{9f zfdTULgCjq!*lxn7sHm}WJ8o^Ir1>|?xeByuwgytomK6Vr0w!RunH_{GHYE33N7HR} zeeweFefImUyqjK1u4neUxgowJe{sDVhqEv-YXEkrVZYmH7F;z*BW=Jh+JKQ#n@mX1>^pwPgrT#Q z}w8EX-o8TaA?s&m`~ING?GG=7(Bq!TPyZ5cw?F;UbpY*WFcS!M)$A$ zeMAQa0lRFXcm3*?D#@kuT3G7qBo=hBFf*`0`}O)Vw>smp~6(r=pn zAp$>VRYL}U*9I8)bh<8R+rCNf zMEv`aX(7{9oKhfYo<}Cmi7t?&IOQ%Vh^B5tpM6Ax4IuEJAMuIexbm7{3Z<5P_?KM) zEGghmh9xDoYzt-Hy3S}04#tmMTu?qxqK!CkzrLxcEcbDHp*K4-^U3=Aa>C-aKOlDg zFlcK*&dV7b+(afkXTTk6 z5@?gizj+kV(iX@|UiD2)tBL3Ccg f6iW2ScJq`t2bSberd2jV1U^dg&mI@bn!fozNV59t diff --git a/docs/uml-pictures/ViewerObjectDiagram.png b/docs/uml-pictures/ViewerObjectDiagram.png index 1b4e2a23faa3b8c75d1bd8081ce663756448fad1..0301b8b98d2768157fbf63cfe9f0b3044b0bf741 100644 GIT binary patch literal 14776 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 diff --git a/docs/uml-source/BuilderNameObjectDiagram.puml b/docs/uml-source/BuilderNameObjectDiagram.puml index f5ccc00a1b..7f10bd13a7 100644 --- a/docs/uml-source/BuilderNameObjectDiagram.puml +++ b/docs/uml-source/BuilderNameObjectDiagram.puml @@ -1,13 +1,12 @@ @startuml skinparam classAttributeIconSize 0 -class ":BigPP" as BigPP -class ":UI" as UI -class ":Parser" as Parser -class ":Command" as Command -class ":BuilderEditNameCommand" as BuilderEditNameCommand -' class ":ViewerAddCommand" as ViewerAddCommand - +class ":BigPP" as BigPP +class ":UI" as UI +class ":Parser" as Parser +class ":Command" as Command +' class ":BuilderEditNameCommand" as BuilderEditNameCommand +class ":ViewerAddCommand" as ViewerAddCommand class BigPP { +main @@ -36,22 +35,22 @@ class Command { +executeCommand() } -class BuilderEditNameCommand { - - +executeCommand() -} - -' class ViewerAddCommand { +' class BuilderEditNameCommand { ' +executeCommand() ' } +class ViewerAddCommand { + + +executeCommand() +} + BigPP -- UI BigPP -- Parser -Parser -- BuilderEditNameCommand -' Parser -- ViewerAddCommand -Command <|-right- BuilderEditNameCommand -' Command <|-right- ViewerAddCommand +' Parser -- BuilderEditNameCommand +Parser -- ViewerAddCommand +' Command <|-right- BuilderEditNameCommand +Command <|-right- ViewerAddCommand hide circle diff --git a/docs/uml-source/ParserClass.puml b/docs/uml-source/ParserClass.puml index 7328222a43..859b7d7e64 100644 --- a/docs/uml-source/ParserClass.puml +++ b/docs/uml-source/ParserClass.puml @@ -1,8 +1,8 @@ @startuml skinparam classAttributeIconSize 0 -class ":Parser" as Parser -class ":Command" as Command +class "Parser" as Parser +class "Command" as Command class Parser { -parseViewerCommand(commandWord: String, arguments: String): Command diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml index c7d015e534..c4882f4acd 100644 --- a/docs/uml-source/UIClassDiagram.puml +++ b/docs/uml-source/UIClassDiagram.puml @@ -1,10 +1,10 @@ @startuml skinparam classAttributeIconSize 0 -class ":UI" as UI -class ":PCBuilderMenu" as PCBuilderMenu -class ":PCViewerMenu" as PCViewerMenu -class ":UIState" as UIState +class "UI" as UI +class "PCBuilderMenu" as PCBuilderMenu +class "PCViewerMenu" as PCViewerMenu +class "UIState" as UIState class UI <> { -uiState: UIState From 28009ce204c95412d3a8583ee5b0e00bacd9b338 Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 16:29:22 +0800 Subject: [PATCH 316/420] Add @@author to DG --- docs/DeveloperGuide.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9d65faacdb..1a6aaeaf87 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,3 +1,4 @@ + # Developer Guide @@ -37,6 +38,7 @@ The program will first load the `UserJson` and files in the `Resources` folder t --- + ## Design and implementation ### UI class @@ -63,6 +65,8 @@ In summary, UI gives crucial feedback to the user such as the menu of possible c --- + + ### DataStorage class Below is the Class diagram for the DataStorage class: @@ -107,6 +111,8 @@ found below: --- + + ### Parser class The UML class diagram shows the features of the Parser class: @@ -122,6 +128,8 @@ Overall, this class diagram provides an overview of the purpose of the Parser cl --- + + ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) @@ -139,6 +147,8 @@ Overall, this class diagram provides a high-level overview of the components tha --- + + ### Command class #### ===== `ViewerAddCommand` method (viewer mode) ===== @@ -156,6 +166,8 @@ found below: --- + + #### ===== `BuilderListComponentCommand` (builder mode) ===== The `BuilderListComponentCommand` command prints out a formatted list of all available components of type `COMPONENT`. @@ -199,6 +211,8 @@ found below: --- + + ### Object Diagram In these object diagrams, a typical flow of the program is shown. The first diagram shows the flow of the program when the user is in the viewer mode and adds a PC. Then, the second diagram shows the flow of the program when the user is in the builder mode and edits the name of the PC added. @@ -216,6 +230,8 @@ The user can enter the `edit PC_INDEX` command to edit a PC and enter Builder Mo --- + + ## Appendix: Requirements ### Product scope From f060db9dd3667c9a1ca7490a8dbcda7be8513f4b Mon Sep 17 00:00:00 2001 From: Prince Pereira <74498975+Magmanat@users.noreply.github.com> Date: Sat, 8 Apr 2023 16:34:28 +0800 Subject: [PATCH 317/420] Add getting started and acknowledgements --- docs/DeveloperGuide.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1a6aaeaf87..441ca48161 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -5,6 +5,8 @@ ## Table of contents +- [Acknowledgements](#acknowledgements) +- [Getting Started](#getting-started) - [General Overview](#general-overview) - [Design and implementation](#design-and-implementation) - [UI class](#ui-class) @@ -28,6 +30,19 @@ --- +## Acknowledgements +These are the external libraries that we have used for developing our application + +1. [GSON library](https://sites.google.com/site/gson/gson-user-guide) + +___ + +## Getting Started + +Please refer to the [User Guide](https://github.com/AY2223S2-CS2113-T12-2/tp/blob/master/docs/UserGuide.md) for more details on the input/output of the application + +--- + ## General Overview below is the overall architecture diagram for how BigPP works. From 5b41f0e6eae6ac83d6051636a318efcc5603c791 Mon Sep 17 00:00:00 2001 From: Thomas Jiralerspong Date: Sat, 8 Apr 2023 17:12:35 +0800 Subject: [PATCH 318/420] Fix PC Viewer menu tests --- BigPP.log.lck | 0 text-ui-test/EXPECTED.TXT | 50 ++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 BigPP.log.lck diff --git a/BigPP.log.lck b/BigPP.log.lck new file mode 100644 index 0000000000..e69de29bb2 diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 88d90aaa18..22d9dfaf31 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,34 +1,36 @@ User file does not exist. Creating new user file. User PCs found, loading... - _____ _____ _____ _____ _____ - /\ \ /\ \ /\ \ /\ \ /\ \ - /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ - /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ - /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ - /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ - /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ - /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ - /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ - /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ + _____ _____ _____ _____ _____ + /\ \ /\ \ /\ \ /\ \ /\ \ + /::\ \ /::\ \ /::\ \ /::\ \ /::\ \ + /::::\ \ \:::\ \ /::::\ \ /::::\ \ /::::\ \ + /::::::\ \ \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ + /:::/\:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ + /:::/__\:::\ \ \:::\ \ /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ + /::::\ \:::\ \ /::::\ \ /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ + /::::::\ \:::\ \ ____ /::::::\ \ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ + /:::/\:::\ \:::\ ___\ /\ \ /:::/\:::\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\____\ /:::/__\:::\ \:::| |/::\ \/:::/ \:::\____\/:::/____/ ___\:::| | /:::/ \:::\ \:::| |/:::/ \:::\ \:::| | \:::\ \:::\ /:::|____|\:::\ /:::/ \::/ /\:::\ \ /\ /:::|____| \::/ \:::\ /:::|____|\::/ \:::\ /:::|____| - \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / - \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / - \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / - \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ - \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ - \::::::/ / \:::\ \ \::::::/ / - \::::/ / \:::\____\ \::::/ / - \::/____/ \::/ / \::/____/ - ~~ \/____/ - + \:::\ \:::\/:::/ / \:::\/:::/ / \/____/ \:::\ /::\ \::/ / \/_____/\:::\/:::/ / \/_____/\:::\/:::/ / + \:::\ \::::::/ / \::::::/ / \:::\ \:::\ \/____/ \::::::/ / \::::::/ / + \:::\ \::::/ / \::::/____/ \:::\ \:::\____\ \::::/ / \::::/ / + \:::\ /:::/ / \:::\ \ \:::\ /:::/ / \::/____/ \::/____/ + \:::\/:::/ / \:::\ \ \:::\/:::/ / ~~ ~~ + \::::::/ / \:::\ \ \::::::/ / + \::::/ / \:::\____\ \::::/ / + \::/____/ \::/ / \::/____/ + ~~ \/____/ + Welcome to BigPP! =================================================== -PC viewer +PC VIEWER Here is the list of PC Builds: -1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete -2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete -3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete + 1.Prebuilt-PC: [beginner] - $917.28/infinite - Complete + 2.Prebuilt-PC: [intermediate] - $1710.74/infinite - Complete + 3.Prebuilt-PC: [expert] - $2339.74/infinite - Complete + 4.Custom-PC: [pc-1] - $99.5/infinite - Incomplete + 5.Custom-PC: [beginner (copy)] - $938.27/infinite - Complete What would you like to do? =================================================== From 40a388c8a31373388c74be529dcf9af6b2877348 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sat, 8 Apr 2023 17:13:43 +0800 Subject: [PATCH 319/420] Update Individual profile page, fix bug in user stories table and ammend PC class digram --- docs/DeveloperGuide.md | 2 +- docs/team/RyujiKow.md | 7 ----- docs/team/Ryujikjs.md | 52 ++++++++++++++++++++++++++++++++ docs/uml-pictures/PcDiagram.png | Bin 135235 -> 135192 bytes docs/uml-source/PcDiagram.puml | 22 +++++++------- 5 files changed, 64 insertions(+), 19 deletions(-) delete mode 100644 docs/team/RyujiKow.md create mode 100644 docs/team/Ryujikjs.md diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9d65faacdb..121a1d4d31 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -237,7 +237,7 @@ People who want to build PC's and keep track of their builds. |--------|----------|---------------|------------------| |v1.0|new user|See usage instructions|Refer to them when I forget how to use the application| |v1.0|user|Create a new custom PC|Start a fresh PC build| -****|v1.0|user|Add and delete computer components|Build my computer and remove unwanted builds| +|v1.0|user|Add and delete computer components|Build my computer and remove unwanted builds| |v1.0|user|View the components of my PC build|See the entire PC build and which components have been chosen| |v1.0|user|Edit a PC build|Customize the components of a PC build to my liking| |v1.0|user|Select and unselect componetns from the PC|Choose and change the components as i wish| diff --git a/docs/team/RyujiKow.md b/docs/team/RyujiKow.md deleted file mode 100644 index 1ac6a867f4..0000000000 --- a/docs/team/RyujiKow.md +++ /dev/null @@ -1,7 +0,0 @@ -# Ryuji Kow - Project Portfolio Page - -## Overview - -Hi I'm Ryuji Kow, an Aspiring Computer Engineer from National University Of Singapore, and these are my contributions - -### Summary of Contributions diff --git a/docs/team/Ryujikjs.md b/docs/team/Ryujikjs.md new file mode 100644 index 0000000000..bed3b92d23 --- /dev/null +++ b/docs/team/Ryujikjs.md @@ -0,0 +1,52 @@ +# Ryuji Kow - Project Portfolio Page + +## Overview + +Hi I'm Ryuji Kow, an Aspiring Computer Engineer from National University Of Singapore, and I am currently enrolled in CS2113 where i am learning about Object Oriented Programming(OOP) in Java. + +I have developed a product called Big PC partpicker alongside my teammates and my summary of contributions to the team project Big PC Partpicker are as shown below + +### Summary of Contributions +[Code Contributed](https://nus-cs2113-ay2223s2.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2023-02-17&tabOpen=true&tabType=authorship&tabAuthor=Ryujikjs&tabRepo=AY2223S2-CS2113-T12-2%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false) + +- Enhancements implemented: + - `select COMPONENT_TYPE COMONENT_INDEX` command + - Added functionality to select a component for the PC build in builder mode. + - Had to handle various exceptions such as invalid components and invalid index inputs. + - Had to make sure that selected component was successfully added to the PC object and properly displayed + - `unselect COMPONENT_TYPE` command for builder mode to unselect a component for the PC build + - Added functionality to unselect a component for the PC build in builder mode. + - Had to handle various exceptions such as invalid component input. + - Had to make sure that unselected component was successfully removed from the PC object and replaced with null. + - `compare COMPONENT_TYPE INDEX_1 & INDEX_2` command for builder mode to compare the specifications of 2 comopnents of the same type + - Added functionality to compare 2 components in builder mode. + - Had to make individual command classes for comparison within each component type, this was done to ensure code readability and also because a single command class to handle all comparisons would be too lengthy and unreadable. + - Each individual command class has to handle various exceptions suchs as invalid components, invalid index, and also invalid command structure. + - Each table of comparison had to be formatted individually to compare the specifications unique to each component. + +- Contributions to the UG: + - `select COMPONENT_TYPE COMONENT_INDEX` command guide + - Detailed instructions on how to use the command along with an example code. + - `unselect COMPONENT_TYPE` command guide + - Detailed instructions on how to use the command along with an example code. + - `compare COMPONENT_TYPE INDEX_1 & INDEX_2` command guide + - Detailed instructions on how to use the command allong with an example code. + - Glossary + - Parameter Glossary + - Format table for glossary to include all parameters used, explanation of the paramter, type(e.g. string\integer) and also examples of the paramter + - Also inlcuded all possible inputs for certain parameters that have limited acceptable inputs. + - Command Glossary + - Format table to show commands, and thier format along with all possible flags that can be used with those commands + - Acceptable Custom Component Commands + - Show all custom commands and the parameters that need to be specified + +- Contributions to the DG: + - `PC` Class Diagram + - Overview of the PC class architecture with diaggram for visualisation + - User Storeis + - v1.0 and v2.0 user stories for different users + - Non-functional Requirements + - Instructions for Manual Testing + - Detailed and step-by-step instructions for user to test our application + +- Review/mentoring contributions: \ No newline at end of file diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 410b42cdcd75f63bdcb2fd5901d01966f87786e1..935db379fb0f0e4d0159dde8fa5add53d8afcca0 100644 GIT binary patch literal 135192 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 z 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 z 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�e|a$Yd9qCF&U-yj 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

    (()d*!2RZlr2s87V?n=UnW8!luJfdwmPqx3j@53 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


    CuZk<)Ute_(TWNHR?PX=_ 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
  4. =2R%-~|q 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 CE}`83 literal 90919 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

    g!2jP&Us{Zv)vdV!Xk>5caha^Upq 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%0Aa+=5_XlP!P0MJB7OKZ3@Lj+p|klgNo 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%0D`Hp|f&`%`+|I$`4IL!LD13yeoGRf?YEQ}3l)cH{ zH1r>CUq>M}T7Gk^Xlf87{2BwYW!054>W>i!O@_oIO^?vEnvqfVTf`UQY~DP}iZzbz|c?ND)LGfR7Na7}>KHnt0tW zWIp;>VE;b5b1agUm#bjE2^OtA{=J-2(W_Z$XN2xbry!Z#BQR(U7lJByYgRC{;nD~M zqX(kK{WK9^fYpd#1#n>))i2D?hl0E8d^ubcuQLyMc7g4HFf7PRZ51@%2Mvy$t?gv; zNYBs|qDHecCe4=?7IrZ;^=+pYd6AWcQKJ9@-JvFY9QW}Zu1R*Z%iK1dKQrTR%tfTH zOc101TXT|{dV24EHW75C87FFLM0!9ra;xY1t^_8tx!2re8ZS-A&AR^Q1 z&aynheSF3H_p9^#f*_$l0lCwYVxK>MzUS__%8-k*&w(rOmyQi=hqe8GyCVb#iJQOq zq}+0Fcwj#Vx>LCQzz}Xuv!0-Geyg;=a{G@`m0A8}UY_YiSkfE&S&LL`{J)B?a3qa& z63@aTb$=@K6yQ>mSo;uqZh0~HZ8%H--`G%DA`J`#>SX@f=G4yBKjg_X7PW3<)YaGr zP^|DNuc&8~l&pah;>LM6k?C-5$Io?5{*^%H{63V@5Om# zWwP{i3n9d>crJst0vRjb)0_ej^V?Y~+#DDIGpu04*W5^d)_XlcI>N-*n30C2Jpx|C zOK>rDlNC`u(*zLEBzgWGabr;2DEB%0qx{RAj zBjN0EF_4Hnl1~z@U$_mX2I$;W^3*?Oel&qz@mTZBfNm$umJxXhx9jaTgYur)@G~X| z(b<`Y(*Pn16^}%2k{gTG*W1^QhraFajvvD4TXvt>$c^tMCEi+F;jz?v`p-$#Zhs42 zua;k)@XJSHL-z=2G$Mo5>R-KzY==Cdm=O+KyyJ`Z)#jO=y`|eeUoUf+L;WJf#%2NR zwW9!|h@g~-GTxC8bQTv3vR2BkPwGruK>R2>P4i22*%jvJAN$5#w%o3m<$;k!% z^l=-*!=mxgFb%Oh?=!IQ8VUV^-~?=B{+sL!9U7m!ZDoVWyNnbh8je1Vgl1lEG1oZ0PT>Fldz za@mk!(W-UJ{V)uPs_~uWYLbM@$S`ASAHKK()NBRk&9h-N=-QyvNivW){ z%0q-R<}Kf?tt~jj&0U8XdEY_K_juguxO1W&_Wg1XG~$SE#qkLVP0#Oaq?-c2fpbDj zY$(Ucg|N&nFQ$kly(=+oUJj8IqS*!mVl3`BP`ecw&{jIben_n1Sj9YADk&`mR^s9P z+Hlwla2ks{PN3~lnN<+p-Iejjy@epex-$lpql;s9O|>2`J9i1A(!iV+sTaKCZZyhs%UDBpVFU6p{Yr|9WB=KMfkd-o z)<@bjd3(}`&ZC)-{vMbB3-~Sea@3Q7pfR(ASJqBbRMrNa^b2;&PC{Yk@0-dst-iNg z3<7_H@oXUi9iXPEvA?pt1yB`QFzGtu+Q^ScLpFEB&2)S^OQ9>oOW0JTZHKuY~Ryu`DxDg~53d{v2+qBo1*gPT1 zVHIpCV0(a)^S$@szH6IjOW_kx9^D?VtF5T`36G{Gj%5xNad&5D;Pl09bd~26A!}fi zYe?gKYiA5#8M&1MTnG=dl%iGXWV}JJ$3j)*xm{9;kJaW5uS70%amAJq^TlQ?xZ+3m z=U~JfsI8#ti}{@U^eNCwU#jk1;xUs3ahM1Y)|>&3b3K{=v9odiFh!(blgAf+sQX6i zTu{H8yxn`->2;8p+=JW#Pcn^0;ALfhA@)Ak6&|qnQA})tgYn2vh$TlpjH(L)F$;)^ zNP3Qux4xIb9J|A3dC#4d8IDO$FFbTL%)MKDexZT(-fee<^9guKX5g-cZ4DSk%X$gv zS8zP$W&D{Het)kx7sS6^ps#8jJeJx0(}zr4CWvDo>BI&@y_^GpnD9)1pH=PjM~gn; z@O7zp)qHQXH^z_8nUg)TGQX118M{IWZ4O3aK|#UP)D(PUsvfIDH|hgu=0!J}Ma`H1 z(o@Bn`u%C<9-CGKZgf0ES~Qv;c6C%pR_%1_L(y(%?P2)MFR;f!22y|%D7j{H z!&?>oIAZXn53dcrbT1Glb{~`gThnG9W#v0<=3{1A*J}v$Z37DZ5TFM3Q#&)M4Y~%ul;I9ekvExyoxpln7j=K{Z*zgT@ zLaol}YtX1hN}IN5Q7Xa9+yO$SK7er)BKzOy)7&$Stg4X65~L6y5IIUU zLf9!Fh`Zm1C!qdbN}(lK$7{aYtOm(uUrX4zw5phG!hia+{XWiJMt$5g?XIFR_9V$g zf_LLFZbSv@W$Z;UhnTi5_kwXzSQa47l|4e`uw+DaCch25Ox*>bebn$oaLj%}_ABH{ zKJE;c-QkBeVl^O2zbhtX1z0NOTGg4i-q1Krrz>mSovKM(v3!%z<61j5hr@(F~*nA*XDUY z{Kb+s>qXk}^lDtIx>~fl{*yPVe&>~&&S-ioqZEoD>m!O8_YlePfYoEC-g`d-7@p@c zl2U#DG)GG_7}r{OyEnJC17&m$O3ot$a=wf-`cD(QCNCR(QPIPoM zV)TmL0dUgf%9T3@d+u##3Lv}>`f<{05i=V{db`G}>uLcI4@l?@c#h-t?%-W}bT5SF$0xnda_P?#_UQX~-)=T%`nx<<_amGX_h+N+ z#jtxzz^ok_({xP7P0@zvQ#=gBOGFmABM%MCCVs$l!!d34aG@-ZdA5QnGRyvyLgFjSv;q^dvi4X@4as zCkW-v)e9JO5@E$WM=D;RmsGg!2Oxx(;zno@Fx#vaw_@+T-9!=i?j<>O~NrE&DP`w(xb>tV|pd{6&Jicnn^@xx7p<(SV zqv>qI{dCsjav8mOq9HIau%)F1)ZOccapY${mD!RJFjLn9oEgx8*CdZ@5n~!Z5cA_6 z-(Nwc;HWSW1!+gP1))oKmT!@=5ytly`w?b6C;jnQ8D-oEyGVFDLv5?rV9eCa3~pAV zug*NWN(}nhKh8ymc;p5_&wj(oN=aEc;Hr?2kUmhYSj`C4dNu8VJ1OB$I{hmF?KtYD zJb6&3L0&1iTsqp@!2(C19cGnW)-_er&1@?~eYY-jUdXbkuT%XbE!@i&a9{6fTub~` z!uYk8^cK6X#`g;whJ2P-aVr242J=+VpJ3RV6u?yjGLgjz zz{1|Ig8G%^B2=LJ?;RnXy`~j3fD8-+-~3nFaentT%eo#5CT4n3q|+%pTfs)UDl^Bn zp)))$KPsH$n2^yWSM#cD#CT;1R>`g6=FE5-DnHy+F_ktfaf4b zbTQ`06A74c{DV zOB8@uOk=kh%4sQo^XIuVv4Ts*$_9V)S>A1a|M=>Xh6baM-2h~+Akj|_b27(N6Nd#t zHId!@|Du|19ALSuDxUNTAJIHxdKE}gFkQXQTsFK6O0p&M`~Q*2>hII{*%e2n)(RJM zy{C<<3+>7Oh>rnxR0ez;nVEj=M(uv&yKN^`;m1+Dw}F-v9b6CJn%PNH0XjBXEGL_dI-8zCZN3gNR@lPpKT zsGmXx`|g$jBMYuvX%FyS_ONyK$v+>TNG`Iu!u*o`>6-X+>RtTNs(Uy8hQW*$uhfq8 zgfnGm5gK5+@}f_B1al|Et8w5q5yFi$f7`NRKUpWi#9Omp%}un^{#opkd6R0~CP}!V zsM6{oGF}DXGNTTZC3GCC>5ujiY6v_@jg}~g;@?>D{$4Z)=UEjw&y`O|imCRte*PT# z_z?o=1#bM0sFSJUE0TcG^YsfHaahs@|BJ)=^yWV}tQgnpb)GcBi0#+~wFNJQ%pN+n z>5mh^4I6a=X!4?9So8hOW&x3r3Ni;&iOPxdAYR7Urw}4Vrfg(htHWD=4{eT6&2{5L z1cz%p!Q_jMq6;;-d&)Bs9`w(wICSMr5D+cvh7Xx(eCs@h<%^(uP2}VZ`1F`5`SD`| zV`Cz1?jgsG;tm*F1N^68jn(PC9yPUhPi*O)X812-m_c)n2+ZMO7|!DBw}7TR4Pl4} z=v1&SmfTLCfgA-ve6K$Qv3t6E5nebacGE>U(fY4hj6(2bAfvcM zMQKXNwJ?7tjd*IO*Q(rs6Wv*PM)##@a?I(~%X$Z3Kw9)0g^XLEDgw~R){z9!>di;T z38Gy^tbOD4~8~6~eIm!mxnQX&C^v*RhG{ zBbE5EcrKl(_{lRBd4UTIH^13CO3>@9TxXV{&K~-6fd9+HLejC#keEqYm(k@{3y5AP zgvyxEN4@f^jzwGh$e_Y~YBPixR}WGO-bp5ee0%Kk_5S{^zY9zt@IMzg%6lXrbnjmx zH5gxcnn_ISL$wE(m$%gjRB>C#m`AH!!D5B5P1q+_enK_MBF_g%_2h#e@?ENgYpMd01s>vshaH`u@ZKT zI-kuflRfH3pj~x~`d^$ZOY(T=9cX5r-Z$#@tp#8Z$ym93`8bVqsNu^cwA7qCIFi76 z5rBHKW^SB7B4F(VL*ZW9Oy<$y{Che7D?=HsT_>2nyQ{%=}uXiV3# zf+)!Q4)1aXFMoleAHI90vF#q(%KLa3{W?*1F8HsYfB`YyxQ&yBzAO7~eY{j+;|^HK zY}bZ({2htC$}Be5FB~UJh{h88KL8rTLDL6E80-Mk6^b)Y-*O)vm;>F($d zb6HFZdg)i4h<0$en0jB6V(8JKpBy8GzbT53{o>npS=4l<`SnwER-|1zSM1Jf-MyMa zZ=vw=R}wmt))lNv?}{<}bz#!l)NAMS*X-PDzpbINSb`cl1F6%s$d#s_ODsOVzdSJd zZpESRf#2$ z!^4uf0$7lU6A>XH;JO^(ePL&}gePZ1F_mvTz9xlMB8{dg`u$f10e!T3UMGXZ4I6Pqh zyyG;B_eh##4cg*qdky>E%D%SJw?%`1KRj0!o9 zJ$Ud+zql#sjF$^81y^;(F9_3$x1^B~=Z?dXts!i_Gg9Pt@6km?3o>C28lK|e*m0dE z-S%t3*rCk0t)CafTSs0%a|SRd%$>fds`}>6%t@ybgBhTwkiinKri2`KPs-#!qj!x2 z*}EZsX;rCsedv`i_PWfkzxL0bD5bv{?mysGfiJr#U*HnqeGnwcM9FJRFh38)EA!cr z&!1&;8r*+bXn%ez>_D5q>yb@b!$l>6u}HPZusnD|a!Pp=+dZlWPn?_eLRL-=C)_?f z9$TUaSY=|;eV@ejZD&G&I#-%Um_}|x7%H-~yzv@_>?n4HCL7EM0_|+g5SPd^md93N zE=y*z62#4dp=_UI@WT?ZpT*KOK(6J+Qc{(9uqF-kJs`JjyZ>fUm(%5T2yrF4Mm&!)Eq(6TOxBLoIC_H)#gts$Af*2;Jrx z#kRyOe}8|#1Azm{^8rd8E?S^5#sQjaXz&#*VZo*h2nYZ&&1M&3Bl^c%Yh*B0D|ZoCH`VtPmd;OyVTSOTK4)b@j{Op zAefOVlMDlI8lv8{wlav`Q5X}Ql5D#hs3CHNjnQ}&dJqT(2K)@2dPMW$A53h1#WlK4& zFT=JvX>ixQ9{~@j{Y5ZeE~ogrpOnFp<@%=OO8+C_XuB(v3S3eE(sZX7gVBcY*}|Zq zkWzpz!AJ{QxL2>10BkfRldg7vsUzT1v9><7saeSaTY<m}`7}1?rjKE5OCkVd0eu|0 z)HqAN_!amSciyRQNx63>J|J8Aq>>jXO4d4)2-`wQL1QhZebV4yY%9gDGUUG{3_N~l*FdrMT zQE-*8%s^m|A|q>d2w@KS`&p7a3kTIC=oDa5f$X(xli&<5Z%8DEd|{sA*I1?|-r9J{ zm%Q{tSVF#gwR#x9YmOYR zx9*SD)>fF&jcoybGmy%%O6$J%*j$hgCQ^ODRx;Hnm6=6dZXQDqI?grN6X69ERwnhM z{vg7ar8?ZST2)2*XYDJn`mAB*Eqpa6PMiqUzJ#_lb0MMV%|I~nr4W5|g;6uy@Ri{D zS5m$iDTatgCXNOqTbK`+X^47Jy7?56Y03>?JC_1oxFTyJ%78G;$S@tNaX&aX0IVV5 z0>XxXl4w5sp`v6!`u>!^xsHo-zW<|%#vk9mTTne;{k3ZGMp{H9Nh%Dty4eL=$QnS< z>pGS&Ee!5+(}#(P{o{it2?(B6;|1;cpa%d7LYBNYhf_?#s{r2t#u-*D{&PHq^xi2E zH0-O$skgx3nK!r$lSn1wrspiOI`jBE`>seXQWj;4SE)pAZo z2%6hQK6Ta(oW-Y?V_UReshsM;Y2o~}y{)LMY;A1~;_&#ZVF}`S0O3+N1nZ@_BT8eBJ zsZ4vmmyyqv*42%f7Z>qveI)huI=Y)&{@zWX%G5C`_yMN|59+Dr^$XoG`tub)<>!CCw-w+DhR`H*A!-NC1)4C9YeOW{$YE9@516%g(VAw0 zWQ=oz&}0o;6}c8gJ8Q*)15x9NAl`yL?l<5QT4*RKm7)m-g5fb~vHC8*vj>B6qdN|9 zSKW{!T*NAe>Nij8@Jo(X(0*!zqnGkw`U7}e_Ml znED|P_j$fGNpF=Ms7uP8z@vF%{1+`XwTk_SJGfPWcPj>a2-nUb>zJ>E@?78;MX#QT zS8H`=7~O*~H@t7p=_|KY1Qo-q99!qren0}ZhKG`Gmf$)VN^{?**n1Te8GdO1i7_V)H5_X}qs1=vq2 zO3Ju#p~M401z5kb$vO&_1<`Zomcn@f5h2em$u=b6ZYT&$NjJ16WM21>Q1yd&;$jeN{gNH@2*61?B6>KUGo8yILz0PaO<^8521X8dJod>9+hDqJ+y`#7X6B`CeG|6 zE$>$&b~L^&8Af)cMCHG|+M?6Q98!>^{6#e6ZMChiSv+d$N9-h_NXt@8KEwUA`pLZf zeBd46l4gPu9B{@^gxZ2q2)=lb9Kth|wM_IN4o3p+phrq}++0-?YQF0%VqzYk+1PlU zH7$?K5>3z5ny2BW7q)NBTbz6JG9jB(qB?r?o3qyR36PUQ5xNUuD2WLPvabD|Mb!~xjpN&5%!`|onf1sq1oKunIJBhdHssKwyspP&g&A{5Xg3PUcy zqur+YnQyXxau3Ra0nBg^(|lEKYj2-F=%*4?v~Xfo=o7w4SBN|>D+EGKX>l*VeEMW? z?b^lkg?Jxb%G*U!l>+o4FM(dhg7~p!F;{OGmZ40Tb*yy-4UbCiVoPSjs!u=EC zIENRYp*3wbDT0r6jx&tyPWJFA9rE=gt~Lli2lfxj)#+(VlvY`77Nb0BxuqyY*xoet z*_GaqK1DFW1MJ60PW~`1PVT|UWJhq;VLrz4IDU6H>=Po?sT93c9sllgm+g<6)B}&Q z>mD^PTsY%Qt4ESAIg!YLT5jxI_`o^buRNpiNPXD(;+@D<9QrAjw!tW}w0eF#U;_aU zt{FCdVWsfEY~KzAuwri(s+R zvKR&q!07>Dnq_R+iR`kn4G6Y`Tm&}PS2lWC&Hl_TUnvtXFDQz&Axb$7a?si|pY#o0MDz)MB2ww)@B10p}9HIak_>hyFbGBV67lg|>3 zA$t)=1j*!G6X1a|x@ZZY{l=iH8_tiSx!QHGa`jCe3=BSjcS``;IJnw+$BlY;(QXyu zb^5t4v~dNY18P+R<{>91C%9*LA^h7q-HUTsp@j1-^v*!cfi)=)Vun7O7t2g%IoY1- zfhbX-qFhunXk?~S*{aNso>Cph@aG@P1H(=eXq--h}QGOw`Wb9KdX341{+;xQJE4qi2K#o zg?y8|CQ@*D!`Qc&Gb(-kEYNchz2zt$L|cLVj)MK3g>-i0TDkjK9YUR9Z13Xt?@(Q} zb#-}xr7nbN>kOEJ=gV=YJdxtzrLMxLnhU`8;F18rZv_ZMmjw#*@&HDgUs`g2JQrc4 zsdE2!Q>FEPo2oYxKbJnA(D=xvY(ZekYgkSY*aQ{u@KsY^=A%jM&{f?!AgP}#Vh&+L znje&UEK%R!Aa-ppt*`03Pc31np${Ws3|vr%_rD-nyVeCL51d5~c6L;*3ZLV;`0HmR zwfvwrGGG2w8oX~C1ePxU_5ah-IQ^@oxr%J`t5$Q{TepI6zQcIx;8Y_8pggLbg z#Fro%4=?`^ZZ58n(9lU?c6|y9n3UyzYo4`J3Ur2XZbl<8k9!vxnvI_E@ebbc4d2X= zdu<(;0&Dde!F${0Z+WEz%@W&PU!vLl=K^iNi&xj1WbX6u+Ggy3C^J_XeP!cLm-_aG zVTopabl;L44|V%U3^#Ob|E7y2J&NK^UNP0#8R*7Y8p` z#1=+`9BjjUmrL-vPr&uf5Sz~s?QsAMh5)q9Gqtx`fdc|#p3D_roA>SQnd52?_QfE? zvEPBDWg9^hhOd$M?I7@a@uXnp&Bnu(N%;{qscKAcfH-imonewnFf|8tPJ4p#hMnH z^Zsc2fA=poFE0-=ls>YBVq;#Y*RBS<7iQIiV$%}d?qbmH4})-lZ9E<#lZ~rg&QZfX zZd7JNvR(WFl+{dP&MH?JVy}{z=Hny1;j{itT~&f-iK*|jI|a%SG&Luc%2~&s-~xWc(VIA^8jUmfqcWpB9cc zt?u8OHt_t;sY}jytda;5unInZj*gDcsf%+l%}XU3gkMlRQ^ur_5p z+v#xZjSlRG7h3R;Aui_v{QYgDTbKz52|=_$0Yz8xh3@fjrn2gqPvF>3ee&d@kG$-F zz^^wuC&}fZ;rgznaEZXQpNYX*&+n)sGjY~OwU7Wj1piEGl5Qjn6eo=UFa&z^-kT>_ z8)bwi#WvR0!=s|W?fc`$56*lHOw8w7XaV+P!^0{CvLIi71Hcsz578n7oKC_~iw7{^ z=*w|XRz6WIs}mR$L~2-%rtnL`%Q7UB8YdHqYH4X7m@5vEHBXm5X|Ow(+yAQzWTK;p zytI4b)!_K}$a&0H7Db)S<=fYn${#chF zw3_18uu`;>Vv*wGsU^D~B8Ih2Q6`UMMyV3>#hEzRSC2lH7Uqy2mZ3bEzOw6h*gG!^ z3xgF}q)h)=^#Eki*VvFnFV|Io8338$$`ZpBqH+1fsj;kr?9ur_DhefL^h+!Ee6y% zsxPgOg?z_$8%JQMcJLvW%cklF?;{9u1-|g9u=dlp~PWQv;-EW4`jE zByUC%MQv^BCYaG7VvUt+-+2$rD=h=5HHjwEGySOgBpfGX-Vk{@a4WLPDX)QVR3& zp{S@%9BzPO)5A}omen9v0gB=VYyE$%;vF~VXE*3f$VX-YVFw-8IrE!%Xtx_! zeuNk;iGaWmP|+~gPyPYPbODA~q0CWi-6UdWHx+dZ3?3&Z;OS8;LSzz zP6_~e5pH?;J?0(&TSIAwLDB+|(BLY-jQ;`dMeyJuQko~R-jIZzNvIbS;-PWr5;9PA z_)$?3_;@|0^I95$xSxDe{Cj0j;PRwYUKbH;CE#Zc`2t5;|Lh~EB_KxM#mM(ibW9 z380bK3)qD>si>&Hy+8N;`%N1g$Pmm~`qX^Jmdpa7pylM{VeGZKWR}ys44)YNNqzj_ zTL6~O{v>gtJbG6fNNOCfY&Bh1LY+e{Xvwkps%S4h+x^EupyG6L#cFQkq7&i(H; z%J;$q%2nYQQ%>F1fw|0{;1+>02Ll5Gpk)x~Dw2PC=)#27=Ym$Pg@TD z-?2(3wtYrSQ6D&xi|c~ilFiQVZ>Z>xf{rD^3Fto|3V03kuA;p1}%@dXUh-YFuA{<1f`t^K-W z72(ZMR!}$#@s!^AIpyV)g29!#Bb zVEeo46M~*F`V^j5Fo%LnS1x7ov^#uHurPB5m(biWiJX+D?cU*mvrFp7S-4$-)Haaz z@&uIkli9?x)CSLP+!ap(a!j(j(f7Z$n;YD_Z{NLJH_py`{=B`d%~VoT4zl7)851W) zn*H5KtqSPNvPGQEh^1oWi*3+7Xg2+lrKK*4jSy?NK$3k6);^o&b?vc21dGNyKJ~1d z!lvC)9~r5sE5UUQGY)}Vf8Kvf|Mb+I;V%mNzRcuE`=AAcp`q`FJjY)!Cz$J9fc|@p4D-Y*svQD>Wbaot8^N~3=FMZ*U` zg|Vldb^DT4kORBTf}~q$U3PV?Xf^j^AeomR!7BqfFyW#IeHMhFwuvj( zoP>6yBH-#-M$c<+bR$@PH+Pi+ZMW1}rOC{;2#ASKl}F34_}16d(0c@h9zZz7X-J|7 z2{E0$^#da$+J2#;(9pdMYvHF>AE~pCtpIZN`Hs(i=mLqVrx*2=o{1T(+95S73(H`W+r#~(l0&miNvpBk0+^iEv8!v~F#xTae~Tj18pIREC}cgpIM1bH&ZJTM@}V(h|x z5ks17YN{9XJ5a!gu-NWGAAZ;4CKza;Cb~mFL@KKmg21D%D3I|s&~o?(1iXu+ON@_i z9xD(|0}p>^s(9kCX$tUR^P6wYUch%ifPkko@t*kBj*csknh1bhiviHG5E}a;8$y&g zjfz4|oXTfX_->ZYE@#RIk9qGp*gk!H+_Jrql9p!D;OUbQq|6nY#0mC^;q+9H^Vmotlnt~Y=P9GL@N7e4=@skf;0^g?j`waAg)H4K+%l{o%!LzJEXXS#`Jz;3fuwi)X0iV8Exf1Q z;KKl@hM0(mH1`o&9w*+=#v_x(0gzZO+weZe0Z6H!Lh zLP;x+YIzN)2VwX4FD}`=GIdi^=KVKVd>{yzdjWI;Jc;ll+^yTYyUUOc{OeO!V~+Hr z_5zHrfPLQafx6sl^d&g9b|BB;%`&CTGjbA=Mh|lS^MCFwMk5lIkm|2%9cBt9E53(N z>YK82a6p$8X-x2dCfz~l!HG|S0eAg1L&L+_sKk&gG3$|+pllrGD-A|EsK4ur9dIw4 zQV7`pmyk!n*YW;6#9XMPuzIx-jX=j_zeaYwMX84D522W4zw-5EC$ngV>M#x@L3x4} zIW@`)3y!ceE%q)@Gy|MLMq!TH^HmC+t z1#SB#CYZ7AE)1NWB8LlG^ge$@Zm#k{x?Ii4KkEiWtfzU&<#^3q&^*JtWi{?1^O2hy ztCdmTP%$h<@#rkJow%}*{pUkp5eskl$d#b_(ozejjLwGMpdvLryMGc2>8@Uepjyh{(L;450buPsh_qJUOGL>l62u|+ z1eRW~ET-YUOsMAA>^g12G5j{1!v7Mq0!Jy0NU5 zy>J)y;H>$P@8>ZAIS4J1@QV*uo+~TN7PgvaUdFm&lMbzd=l53?A+I>lwr5N*s(*j2 z&)JQ&#GZxgm$3Z6{y*fj6S#&!mjR%xLbkkD3A6-bBp|(>yL`_6OO=qc^dU_DML+!8 z;G7vZ($NdqgL(l3otnI|gXlNVHo-sY1+g*Gx0qFbw>tl<;q^0FN3E7S{a8_SNIn8o zbtO@T&w!L1^r`?XQw!OVJ3V^%&~v5n1Ydg-{dG-EKFA)LvOaYyY>K?*Kggl&9U!54 z&e>qv$n1dtW3Z7B63kg6hR$6ZATRodz=~F3>iYnRz|7vz)ZBokChYKZ%Y7N4DIT|G zDb|8kK6P^;I+089j{6N83`|UrwtlsQ>k96oZkX^X#cA!Dqfd7llO&*D?*FdzG6;Nq zz(Nn{OOP$3<9!9LMvcekpH)>|>!U^oo(Q)NLXIt=XUiI8RJ@gbt-5}UMLwQYaSKNL*xYUVA!CQcxLn3 zb3KEpi{G-UIVVfpv^v+f8n*iI)FjsI2_ZcZ#hA}7`UgWFo% znzQgJL4eCdEy32k{E&+)i&A%n85&@^yxFo_p+$&4$u^0A=}1Q=_&h~LKaG$34CHBn zc;%D^iqWv#9+GGRZ9NcCA;;umi@Mg{#QuU_J%$gA-Q8?3hrrKYB)|>N4Y2~b^CEz5 zWc7fe`H@kkVOid3+v)Fdd^<<-z^BBYG~mdY@|ymH5ciBe(J8_V+TxQhNRm<5Y-?=a zKxJTlQ@F@5zD@cbANJ6+ zK)a`iN53rNha-LobeogeS*MZfVC%4?{(WI2m(+YjR94^>9AS$+L@@*)fCh8;^)bcs@*PK!ENckf5taIy)jT%~1aHmy#EcTY+dsqcPrW3OUzAJ##P00l1QFoq?shW7r~umx-%347H8jAWdA_(& zMP2<_K7kSkyy$el$*x;sqQGmx!0Z2?!omAJgd2%Ps+i@HMUInlCAwp!f@@?$Q2Mf$ zvxjs<-D>B&qtI9?8Lvn!`MD zlA8xG{X5Nz8=?Rdo|&D6Nv$%Si2E86;Z!jHHYZ%=$IVG+fVB=0tzWl*T9>1FiH5jT z`pX4VC*4CO*1mHESC1}xh3mo~?+}`jJO&Rf9H#|N$Fas)d=VppGVDleq^=2Q_{FVt z(;`dxQG7td<0{!>_0$gQ*Jxx(^;DnU_z$*B(qkh;INmjXii(2QNRrFoOa|`2a<)!} z)BRxP5T(xSAC>WXs~2ORK6I$;_kp^3v0EEswmUr?p1|U(1yx0Qf$Y!x*kyH$Gy+oI zKw>J~MVB9+e_$s8V9qn~g`d5T&J7Ci88@vlLW^FTUJtHcIf(!A6q6l?P{ty=-|Pp6 zFg1Lh|FNe4_f9W00!RT**(DVf<`3|lg9K`9Y^=Pz9O~cz^}WS%&<{iY3)HFu@{>Wn zk8gumXsFO6u|*Q*QKv;3@gJ#4_}z+N@HEcV@!u5I+8+u_0cW+j=hLT8&~n_iwN=&7 zu&RcM5KN0~*B_SJ4MOA4?CwixM#z@5y-Uu8J^VPRZFp{n(@-N{vM&B(m>I67>3N;M~rs%uk%C{IqsD++gB z8orbLg9qR(oNd-@_huwON@BB-9Sxnh5N^&Tjvb53>?k>Ki$BP9Yp$?&2pio #BQ=zZAyI!F7XfO%S}b*AjE&=1~Ub=V=1 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≈oRGlw{A_kFg6q{o~!H_fP_$y}MISFFlPkKpZf? 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 literal 278425 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 Date: Sat, 8 Apr 2023 03:23:58 +0800 Subject: [PATCH 298/420] Add profile picture --- docs/AboutUs.md | 2 +- docs/team/profilePictures/cs2113photo.jpg | Bin 0 -> 120349 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/team/profilePictures/cs2113photo.jpg diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 2ff6264847..c885a9501e 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -4,6 +4,6 @@ | ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | | ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](team/thomasjiralerspong.md) | | ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | +| ![](/docs/team/profilePictures/cs2113photo.jpg) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | | ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](team/reynoldlam.md) | | ![](/docs/team/profilePictures/cs2113ProfilePicture.jpg) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | diff --git a/docs/team/profilePictures/cs2113photo.jpg b/docs/team/profilePictures/cs2113photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fb476a042ff98306a1210385d0b52d414c934b1 GIT binary patch literal 120349 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μe*NTbo3tCvC!zHk1$US6~WR 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

    9brMke0jL#EuVPN)rrTs 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 oV6G1^?L$4lw{O}KQ8 Date: Sat, 8 Apr 2023 03:41:05 +0800 Subject: [PATCH 299/420] Update ListComponentCommand PUML --- docs/uml-pictures/listComponentCommand.png | Bin 51856 -> 36171 bytes .../Commands/listComponentCommand.puml | 46 ++++++++++++++++++ .../Commands/listComponentCommand.txt | 29 ----------- 3 files changed, 46 insertions(+), 29 deletions(-) create mode 100644 docs/uml-source/Commands/listComponentCommand.puml delete mode 100644 docs/uml-source/Commands/listComponentCommand.txt diff --git a/docs/uml-pictures/listComponentCommand.png b/docs/uml-pictures/listComponentCommand.png index f01067239d87b1215fe706b9efbbd41f599cb13c..40894ad364ec798e6d9935cd984dbae318b11879 100644 GIT binary patch literal 36171 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 XwEteLFV?nz`0(D{%JOl$4Bh@0hZjK} literal 51856 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 diff --git a/docs/uml-source/Commands/listComponentCommand.puml b/docs/uml-source/Commands/listComponentCommand.puml new file mode 100644 index 0000000000..dbf47832ca --- /dev/null +++ b/docs/uml-source/Commands/listComponentCommand.puml @@ -0,0 +1,46 @@ + + +@startuml +!pragma teoz true +hide footbox + +User -> BigPP : list [COMPONENT] +activate User +activate BigPP + +BigPP -> Parser : parseCommand(String userInput) +activate Parser + +Parser -> Parser : parseBuilderCommand(String userInput) +activate Parser +create BuilderListComponentCommand + +Parser -> BuilderListComponentCommand : BuilderListComponentCommand(String arguments) +activate BuilderListComponentCommand +BuilderListComponentCommand --> Parser +deactivate BuilderListComponentCommand + +deactivate Parser +Parser --> BigPP: BuilderListComponentCommand +deactivate Parser + +BigPP -> BuilderListComponentCommand : executeCommand() +activate BuilderListComponentCommand +BuilderListComponentCommand -> DataStorage.stringToComponentListMap : get(String componentType) +activate DataStorage.stringToComponentListMap +DataStorage.stringToComponentListMap --> BuilderListComponentCommand : [COMPONENT_TYPE]List +deactivate DataStorage.stringToComponentListMap + +BuilderListComponentCommand -> "[COMPONENT_TYPE]List" : getListString() +activate "[COMPONENT_TYPE]List" +"[COMPONENT_TYPE]List" --> BuilderListComponentCommand : formatted/filtered list of desired components +deactivate "[COMPONENT_TYPE]List" + +BuilderListComponentCommand --> BigPP : formatted list +deactivate BuilderListComponentCommand + +BigPP --> User : formatted list +deactivate BigPP +deactivate User + +@enduml \ No newline at end of file diff --git a/docs/uml-source/Commands/listComponentCommand.txt b/docs/uml-source/Commands/listComponentCommand.txt deleted file mode 100644 index f613ea4cea..0000000000 --- a/docs/uml-source/Commands/listComponentCommand.txt +++ /dev/null @@ -1,29 +0,0 @@ -@startuml -"User" -> ":BigPP" : list [COMPONENT] -":BigPP" -> ":Parser" : parseCommand(String userInput) -activate ":Parser" -":Parser" -> ":Parser" : parseBuilderCommand(String userInput) -activate ":Parser" -create BuilderListComponentCommand -":Parser" -> BuilderListComponentCommand : BuilderListComponentCommand(String arguments) -activate BuilderListComponentCommand -BuilderListComponentCommand --> ":Parser" -deactivate BuilderListComponentCommand -":Parser" --> ":Parser": BuilderListComponentCommand -deactivate ":Parser" -":Parser" --> ":BigPP" : BuilderListComponentCommand -deactivate ":Parser" -":BigPP" -> BuilderListComponentCommand : executeCommand() -activate BuilderListComponentCommand -BuilderListComponentCommand -> "DataStorage.stringToComponentListMap" : get(String componentType) -activate "DataStorage.stringToComponentListMap" -"DataStorage.stringToComponentListMap" --> BuilderListComponentCommand : [COMPONENT_TYPE]List -deactivate "DataStorage.stringToComponentListMap" -BuilderListComponentCommand -> "[COMPONENT_TYPE]List" : getListString() -activate "[COMPONENT_TYPE]List" -"[COMPONENT_TYPE]List" --> BuilderListComponentCommand : formatted/filtered list of desired components -deactivate "[COMPONENT_TYPE]List" -BuilderListComponentCommand --> ":BigPP" : formatted list -deactivate BuilderListComponentCommand -":BigPP" --> User : formatted list -@enduml \ No newline at end of file From b0108e6e0e1b660d146692f33325743537b6a6db Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sat, 8 Apr 2023 03:49:19 +0800 Subject: [PATCH 300/420] Update ViewerAddCommand to follow standard requirements --- docs/uml-source/ViewerAddCommand.puml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/uml-source/ViewerAddCommand.puml b/docs/uml-source/ViewerAddCommand.puml index 69999c2c49..7cc9a3e793 100644 --- a/docs/uml-source/ViewerAddCommand.puml +++ b/docs/uml-source/ViewerAddCommand.puml @@ -1,10 +1,10 @@ @startuml title ViewerAddCommand.executeCommand() Sequence Diagram -participant ParseViewerCommand -participant ViewerAddCommand -participant PC -participant DataStorage.pcList +participant ":ParseViewerCommand" as ParseViewerCommand +participant ":ViewerAddCommand" as ViewerAddCommand +participant ":PC" as PC +participant ":DataStorage.pcList" as DataStorage.pcList opt "add " ParseViewerCommand -> ViewerAddCommand: ViewerAddCommand(String arguments) From cac48b8b6b58438583a900fec5beb9c6c326d930 Mon Sep 17 00:00:00 2001 From: typingpanda Date: Sat, 8 Apr 2023 03:51:02 +0800 Subject: [PATCH 301/420] Add object diagram to DG --- docs/DeveloperGuide.md | 57 +++++++++++------ docs/UserGuide.md | 58 +++++++++--------- docs/uml-pictures/BuilderObjectDiagram.png | Bin 0 -> 14611 bytes docs/uml-pictures/UIClassDiagram.png | Bin 21840 -> 22067 bytes docs/uml-pictures/ViewerObjectDiagram.png | Bin 0 -> 14762 bytes docs/uml-source/BuilderNameObjectDiagram.puml | 58 ++++++++++++++++++ docs/uml-source/UIClassDiagram.puml | 4 +- 7 files changed, 129 insertions(+), 48 deletions(-) create mode 100644 docs/uml-pictures/BuilderObjectDiagram.png create mode 100644 docs/uml-pictures/ViewerObjectDiagram.png create mode 100644 docs/uml-source/BuilderNameObjectDiagram.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b3a2e92eeb..7b59b3b207 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,24 +6,28 @@ ## Table of contents -- [General Overview](#general-overview) -- [Design \& implementation](#design--implementation) - - [UI class](#ui-class) - - [DataStorage class](#datastorage-class) - - [===== loadChassis() method =====](#-loadchassis-method-) - - [Parser class](#parser-class) - - [===== ViewerAddCommand() method =====](#-vieweraddcommand-method-) - - [PC Class Architecture](#pc-class-architecture) - - [Command class](#command-class) - - [===== `list [COMPONENT]` Command (builder mode) =====](#-list-component-command-builder-mode-) -- [Appendix: Requirements](#appendix-requirements) - - [Product scope](#product-scope) - - [Target user profile](#target-user-profile) - - [Value proposition](#value-proposition) - - [User Stories](#user-stories) - - [Non-Functional Requirements](#non-functional-requirements) - - [Glossary](#glossary) - - [Instructions for manual testing](#instructions-for-manual-testing) +- [Developer Guide](#developer-guide) + - [Table of contents](#table-of-contents) + - [General Overview](#general-overview) + - [Design \& implementation](#design--implementation) + - [UI class](#ui-class) + - [DataStorage class](#datastorage-class) + - [===== loadChassis() method =====](#-loadchassis-method-) + - [Parser class](#parser-class) + - [PC Class Architecture](#pc-class-architecture) + - [Command class](#command-class) + - [===== ViewerAddCommand() method =====](#-vieweraddcommand-method-) + - [===== `list [COMPONENT]` Command (builder mode) =====](#-list-component-command-builder-mode-) + - [Object Diagram](#object-diagram) + - [===== Viewer Mode =====](#-viewer-mode-) + - [===== Builder Mode =====](#-builder-mode-) + - [Appendix: Requirements](#appendix-requirements) + - [Product scope](#product-scope) + - [Target user profile](#target-user-profile) + - [Value proposition](#value-proposition) + - [User Stories](#user-stories) + - [Non-Functional Requirements](#non-functional-requirements) + - [Instructions for manual testing](#instructions-for-manual-testing) --- @@ -194,6 +198,23 @@ found below: ![List Component Command](./uml-pictures/listComponentCommand.png) +--- + +### Object Diagram + +In these object diagrams, a typical flow of the program is shown. The first diagram shows the flow of the program when the user is in the viewer mode and adds a PC. Then, the second diagram shows the flow of the program when the user is in the builder mode and edits the name of the PC added. +#### ===== Viewer Mode ===== +![Viewer Mode Object Diagram](uml-pictures/ViewerObjectDiagram.png) + +When the program first starts, the `BigPP` class is instantiated and the `run()` method is called. The `run()` method calls the `runLoopUntilExit()` method which is a loop that runs until the user exits. The `UI` calls the `getInput()` method to get the user input. The `Parser` class then parses the user input ("add MyPC"). The `parseCommand` method calls the `ViewerAddCommand` method with the name of the PC as the argument. The `ViewerAddCommand` calls its executeCommand method. This adds a PC named "MyPC". + +#### ===== Builder Mode ===== +![Builder Mode Object Diagram](uml-pictures/BuilderObjectDiagram.png) + +The user can enter the `edit PC_INDEX` command to edit a PC and enter Builder Mode. Now in builder mode, the user can enter the `name NAME` command to edit the name of the PC. The `Parser` class then parses the user input ("name MyEditedPC"). The `parseBuilderCommand` method calls the `BuilderNameComponentCommand` method with the name of the PC as the argument. The `BuilderNameComponentCommand` calls its executeCommand method. This edits the name of the PC to "MyEditedPC". + + + --- ## Appendix: Requirements diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 9bbabed534..42ef83f357 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -7,33 +7,35 @@ ## Table of contents -- [Introduction](#introduction) -- [Getting Started](#getting-started) -- [Commands](#commands) - - [Common Commands](#common-commands) - - [**Bye Command**](#bye-command) - - [**Help Command**](#help-command) - - [PCViewer Mode Commands](#pcviewer-mode-commands) - - [**Add Command**](#add-command) - - [**View Command**](#view-command) - - [**Edit Command**](#edit-command) - - [**Delete Command**](#delete-command) - - [**Filter Command**](#filter-command) - - [PCBuilder Mode Commands](#pcbuilder-mode-commands) - - [**List Command**](#list-command) - - [**Select Command**](#select-command) - - [**Unselect Command**](#unselect-command) - - [**Compare Command**](#compare-command) - - [**Budget Command**](#budget-command) - - [**Name Command**](#name-command) - - [**Custom Command**](#custom-command) - - [**Back Command**](#back-command) -- [Additional Features](#additional-features) - - [Compatibility Check](#compatibility-check) -- [Glossary](#glossary) - - [Parameters Glossary](#parameters-glossary) - - [Command Glossary](#command-glossary) - - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) +- [User Guide](#user-guide) + - [Table of contents](#table-of-contents) + - [Introduction](#introduction) + - [Getting Started](#getting-started) + - [Commands](#commands) + - [Common Commands](#common-commands) + - [**Bye Command**](#bye-command) + - [**Help Command**](#help-command) + - [PCViewer Mode Commands](#pcviewer-mode-commands) + - [**Add Command**](#add-command) + - [**View Command**](#view-command) + - [**Edit Command**](#edit-command) + - [**Delete Command**](#delete-command) + - [**Filter Command**](#filter-command) + - [PCBuilder Mode Commands](#pcbuilder-mode-commands) + - [**List Command**](#list-command) + - [**Select Command**](#select-command) + - [**Unselect Command**](#unselect-command) + - [**Compare Command**](#compare-command) + - [**Budget Command**](#budget-command) + - [**Name Command**](#name-command) + - [**Custom Command**](#custom-command) + - [**Back Command**](#back-command) + - [Additional Features](#additional-features) + - [Compatibility Check](#compatibility-check) + - [Glossary](#glossary) + - [Parameters Glossary](#parameters-glossary) + - [Command Glossary](#command-glossary) + - [Acceptable Custom Component Commands](#acceptable-custom-component-commands) ## Introduction @@ -367,7 +369,7 @@ PCBuilder Mode commands will be the commands that the user will be able to use i #### **List Command** -Usage: `list COMPONENT_TYPE [-COMPONENT_FLAG LIST_FLAG]` +Usage: `list COMPONENT_TYPE [-FLAG]` Available flags: diff --git a/docs/uml-pictures/BuilderObjectDiagram.png b/docs/uml-pictures/BuilderObjectDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..08051c05cce0579466f8a17d5a941ac09513329f GIT binary patch literal 14611 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

    )QBSo}t1h+eCbaJ?7 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 QjBmw|Y|njHZS9-%4}<)2IsgCw literal 21840 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 G2~7aNqNgzc diff --git a/docs/uml-pictures/ViewerObjectDiagram.png b/docs/uml-pictures/ViewerObjectDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4e2a23faa3b8c75d1bd8081ce663756448fad1 GIT binary patch literal 14762 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 literal 0 HcmV?d00001 diff --git a/docs/uml-source/BuilderNameObjectDiagram.puml b/docs/uml-source/BuilderNameObjectDiagram.puml new file mode 100644 index 0000000000..f5ccc00a1b --- /dev/null +++ b/docs/uml-source/BuilderNameObjectDiagram.puml @@ -0,0 +1,58 @@ +@startuml +skinparam classAttributeIconSize 0 + +class ":BigPP" as BigPP +class ":UI" as UI +class ":Parser" as Parser +class ":Command" as Command +class ":BuilderEditNameCommand" as BuilderEditNameCommand +' class ":ViewerAddCommand" as ViewerAddCommand + + +class BigPP { + +main + + -runLoopUntilExit() + +run() +} + +class UI { + -uiState:UIState + + +getInput() + +updateUI() + +showResult() +} + +class Parser { + + -parseViewerCommand() + -parseBuilderCommand() + +parseCommand() +} + +class Command { + + +executeCommand() +} + +class BuilderEditNameCommand { + + +executeCommand() +} + +' class ViewerAddCommand { + +' +executeCommand() +' } + +BigPP -- UI +BigPP -- Parser +Parser -- BuilderEditNameCommand +' Parser -- ViewerAddCommand +Command <|-right- BuilderEditNameCommand +' Command <|-right- ViewerAddCommand + +hide circle + +@enduml \ No newline at end of file diff --git a/docs/uml-source/UIClassDiagram.puml b/docs/uml-source/UIClassDiagram.puml index 7ff7337c69..c7d015e534 100644 --- a/docs/uml-source/UIClassDiagram.puml +++ b/docs/uml-source/UIClassDiagram.puml @@ -38,8 +38,8 @@ class UIState <> { PCBuilder } -UI --> "1" PCBuilderMenu -UI --> "1" PCViewerMenu +UI --> "0..1" PCBuilderMenu +UI --> "0..1" PCViewerMenu UI --> UIState hide class circle From 8fc6d20c470254c4e2c5ea0aa4226a460ac0b407 Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sat, 8 Apr 2023 04:00:02 +0800 Subject: [PATCH 302/420] Reformat PC class architecure to be more readable --- docs/DeveloperGuide.md | 1 + docs/uml-pictures/PcDiagram.png | Bin 253470 -> 135235 bytes docs/uml-source/PcDiagram.puml | 77 -------------------------------- 3 files changed, 1 insertion(+), 77 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 7bd8df34b5..aa2b60e95a 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -126,6 +126,7 @@ Overall, this class diagram provides an overview of the purpose of the Parser cl ### PC Class Architecture ![PC Class Diagram](uml-pictures/PcDiagram.png) +(Note: all private properties have getters and setters but have been omitted to make diagram more readable) This UML class diagram shows the classes and their relationships in a computer system, which is represented by the `PC` class. The PC class has several attributes, including name, isPrebuilt, cpu, cpuCooler, gpu, motherboard, ram, storage, psu, chassis, and budget. diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 1e8534b555297d83e24eb36e8b24438003e0d595..410b42cdcd75f63bdcb2fd5901d01966f87786e1 100644 GIT binary patch literal 135235 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

    (()d*!2RZlr2s87V?n=UnW8!luJfdwmPqx3j@53 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


    CuZk<)Ute_(TWNHR?PX=_ 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

    Y)%6Xsf1h}W4CQb_xJ1K06`7}#nqhTWEd4+ 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 vzw*}$+AX$2{=)TfhA)d6aobV diff --git a/docs/uml-source/DataStorageClass.puml b/docs/uml-source/DataStorageClass.puml index 0bffed32cb..d1e8103127 100644 --- a/docs/uml-source/DataStorageClass.puml +++ b/docs/uml-source/DataStorageClass.puml @@ -113,15 +113,15 @@ class DataStorage { } -DataStorage --> ChassisList -DataStorage --> CPUList -DataStorage --> CPUCoolerList -DataStorage --> GPUList -DataStorage --> MotherboardList -DataStorage --> PSUList -DataStorage --> RAMList -DataStorage --> StorageList -DataStorage --> PCList +DataStorage --> "0..1" ChassisList +DataStorage --> "0..1" CPUList +DataStorage --> "0..1" CPUCoolerList +DataStorage --> "0..1" GPUList +DataStorage --> "0..1" MotherboardList +DataStorage --> "0..1" PSUList +DataStorage --> "0..1" RAMList +DataStorage --> "0..1" StorageList +DataStorage --> "1" PCList hide class circle From e5152a4fba9cf9918ca4eef8c593925a2be028e9 Mon Sep 17 00:00:00 2001 From: "DESKTOP-9Q6JJ25\\Reynold-SL" Date: Sat, 8 Apr 2023 02:52:33 +0800 Subject: [PATCH 296/420] Update ViewerAddCommand to include the activation bar Update ParserClass class diagram to follow standard practice for diagrams --- docs/AboutUs.md | 12 ++++++------ docs/uml-pictures/ParserClass.png | Bin 17470 -> 11773 bytes docs/uml-pictures/ViewerAddCommand.png | Bin 27523 -> 27306 bytes docs/uml-source/ParserClass.puml | 9 ++++++++- docs/uml-source/ViewerAddCommand.puml | 4 +++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e6be10e8f5..560460df21 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,9 +1,9 @@ # About us -| Display | Name | Github Profile | Portfolio | -| ----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | -| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](team/thomasjiralerspong.md) | +| Display | Name | Github Profile | Portfolio | +| ---------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :--------------------------------------: | :-------------------------------------: | +| ![](https://via.placeholder.com/100.png?text=Photo) | Thomas Jiralerspong | [Github](https://github.com/superkaiba) | [Portfolio](team/thomasjiralerspong.md) | | ![](https://programmerhumor.io/wp-content/uploads/2023/01/programmerhumor-io-java-memes-backend-memes-125b7f839a0c6f1-889x1024.jpg) | Pereira Prince Matthew James | [Github](https://github.com/Magmanat) | [Portfolio](team/PrincePereira.md) | -| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | -| ![](NoPhotos) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](team/reynoldlam.md) | -| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | +| ![](myphoto) | Ryuji Kow | [Github](https://github.com/Ryujikjs) | [Portfolio](team/RyujiKow.md) | +| ![](https://bit.ly/416rVBm) | Reynold Samel Lam | [Github](https://github.com/Reynold-SL) | [Portfolio](team/reynoldlam.md) | +| ![](NoPhotos) | Keane Chan | [Github](https://github.com/typingpanda) | [Portfolio](team/KeaneChan.md) | diff --git a/docs/uml-pictures/ParserClass.png b/docs/uml-pictures/ParserClass.png index f05cf0c669fbb428994b9eb2117efbb4323edf5b..3efbfdd410e027dd9a5a9a2615ff5ab0facac18e 100644 GIT binary patch literal 11773 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 diff --git a/docs/uml-pictures/ViewerAddCommand.png b/docs/uml-pictures/ViewerAddCommand.png index 58ebda329d2059c4382793a7292ab7841b713bd1..be63b98ff7a710257d509d1828e463f496fac672 100644 GIT binary patch literal 27306 zcmd43by!th^e(yyB^6K+5h;}xP*Pe#kk}wy0)m9JNH>B=Do6-Q3eq4UB?u^j5=wW2 zDBaz6Y{2@y@BGfW&pm%!|G{VNz1Ny^%rW0F#yj4*{BFuh9K$_}i$EZbN!}1sKp@ax zArNRe*ywO&K454T{xI5HSF^cedC$?zz|aOEVPIi!U)RP!pGwb>>aLB=J!@W8)_Z2U z7B;r#W-NCs&FvcMDB%`;#!6~7Kd&Ru;64t~;fm&_y_X4hS?1k~e}rO4tGz4t=#t{2 zW75ZAw~m-o-I~NTs|}Tt+?u1KnJN5~eCH^R4Qr#o+WKtzo&4z+yeBe?X}joqo|duH zw{aYsye}1`bTxU*i2qTv8*j^z54Us;a{a_EY7ivgwkH_YG}+mBILbQB2)(`+7E|ul z`1Fd=o!kUt%}k}wFJp~K#nqn8%ij@=NW8I}Q8}8YD!qEiszGG}w@KwS_1FHZC)9F! z&aYMbR^=KL-?;9w<4IC+%$M_HE!~-o)9>9y*VP$!{6tgchA5_6 z#})ip#-fL8)6=@+F;f4d|}bQPbeq)tmlItBI+6@)uXKueNsyj>mL;e!?ln~ljN@%11j+AC2CYR}z6lWW^izFqN zlLql{jQOM+PUMPc@eF2Tww&jr=n|BaLvEw%=NW$bh@V7`K-^W76cbi*(4LOLaUgEr z*uyZu!6AH>qwjU`Aq^Fu=cV(w{D@(4XZUY_z6`wI5jf@|=AxnrDz_ zt>Kt13-}Y_A&0Iw7V1ADc)kMghj8TDG&q_EA(kEi>f@_~&hUq->OmI<{G~o#MFD@X zt*BPv&oy6+T-0wx&i!BfDJ5Z_O)FAYSGUw|CL}h7&psr@p#GV@5Al+sxsKKD_6DPJ zdeh4b=g-%0J<9%Q(@4ncxTx>s@_WzOmdY=e#_wyR1Q| zr>eWNxgsekSt%2Zq8^ZOf%26vKfi@)-wSABhJ zWwPCQZMMvQPFqwd?f5w?7WZrOm3XX8Sy$b*9VRyV=iDS>Ct6dO3S5w~vQMIgRkAb; z@O6BiOSCn0zcGs9GG`<^rEg?3SS)ev!lv2sQN*nMrRCS?0@?T!{Ayi6f}3|URI>DM z7>qZ)v74yCq`j`bp1lJ@wmJ(3-61MbBB*7_;nuA__uVDRo>%U* zv;-SkJ=29Y6D_pJ7fpH7$x#*>Wljb6{7G-|*HU6G% zx-2(KAixrJI@x?T>~S&7w%5y^Y34v+CZv^FBhs{Vzp* z+;^sQ@{8Y1y)LbM?QTO&Rr~U5T{u%pa`Nk2ZxuGLUsxJz3yFc z*Oe)8ZcOQz5$ zSV3kSz0R4@%277UGS#7^j|H<3c|O;ccGCRGSHpfP)4Z=(-VFDKG?(Ro%&y-_x|ScX z!D?ltr7vuiZ_QqCUY+jN7upyN{ZhV2=;=KB_Omj-LDMVI(A~8`cS;HhSuRI01C8$) zD@SM^RjCrY?`;iM|M=jAWm!5?C?~ifX682k0c-i*1$*kPrA8r=mvLtqlO30S5>oQq|s)%Hi=_4hB}VE%gf8`Mh(6}yIkfyVzGj*o59G&WBTsv!#)XY%*xll zzcFf5@To2b+jZ^h0*OQLCNle2)FZ-H2VX7kLi64bWQI(xWFt#{_iHV_+%z_`uFJU>gymi@U!#g> zkSVF!bZCkf_V)I!*qO0x7tJWt4K=>0#4do$m}6?>vWULiHk^Cl(iM?HeBJb&wC>mD1RNJHcGJm5Q$;y3i6juU zq-3aO<3^o*d;hzCPcfe@w#Es8g{qT!wx(SX_ph&d==p^+sp6(=UZH)1 zCrM;}nwYq@4qYDEW%ITj*>0En*r!X`_sJ95Ex;VYsO7*DD%)BGT}nJ|+w1EK-%g%9 zSv^|?Zh75TlBC}+UlPlf*!>=J!ueM{kLo{g&~qW>S|>}`v(kKn`%dXuIvfv`ZrZru7+6k z6B%C>M*aFAZ{zZ*=ETncK8#$|s_7zzRnA8_f&zkjZm3UhERFdPR~&h3+R0M(WIIIU z(48VVO`qK>U#w%Aojy;y11N{G$zxipPFtGe?0iU)UT~))ysUYWs#VE^XPj=Hj!M3X z=f3@o@?)40I<1z--Re7Qu>#IwN)I2JJMlywtxldW*3hy~<|HNxiGuKy^i}-v*$Md! z>6-w7IaB^Df)`MxAULn`xcCl6g~v1&VSNNENs*Y^0uz5r_5j_;1!OvdA!+#9fHQ06 zI#U@0%o6{KR~MuB=PLHfQ{PW#Pu9mkoWuqU5*!@g-i^OYFvU&BMFe zRHce3vK+lFY#Bz4vH6ZmU%3NP*YQJRWpQzFtFUUyoYziM7d*}D(tB_t<=R_fw*}r; z8lQ7&qo3f0s_`nm$ei$Rl93`O43EdKw^Hr}hq$5~Po#nZI zk!EyEXz#7l-5>WaA4_k?k2-)XuIqB65lu@Qcwthrk$fNk)u&0_vbA`Tig;N}a?*JrDfBSixg^}wEW-R3`rF*+uwX{Lo zv60=XX1Gz29L6Wi%hyK&T9#6TcKrC|1XfOUlX02dBqQ=Qk@0;dG3k>kwz2rVGfR^$ zVWj>Br@li)(RATvD0{BPi8+%rTl}am6RBLGYSgj;r*M>o4x zMA;*}jBlFZ_U0Jd_CN1X!ndvT*FgpkX5$6rWU+jx^u|l7fG|?oWIslh+aq1@K|w$Y z+13vNNl_mLwF( z3pYz}<@guGA{W^nI*_@KRQcVPz{%p1oKsX#7;mF5N)&&ruqS&e^fiz5kES=LX3h`X zdg^1y;!|HDEXw&YdBWCSy(szoixW+GsCfQnGm%#%;=S_ri+eG=wi@|&sb}psynRbb z-=`B5B!?f{M$aQaV5<~b^q)=Mw(!R9>3eHE_PD_8LO!wdyV$p2a&XkLl@3ka>g%a(BELedpXw&!Xvp9c4qq`Ua8j}A$~l0(|qB_mr_vtGiLabX0g5e>6Gm$)`9&(8#D z1;^pzU$47GZ`}@_r~B@8Jl;WL9iC3;e5%p^u~#F{|8NJc~j4600M7Fq5yJ)u2zn7uP*`n`Q}H$k(;Y7Sesy0+WKRxxMPy{=xC~I_=fDJr*9G z?^D@9WZQ!-)@%%E%_KVK5(LMcyR}zm1$Z6i@8srM4G#}9Yvk9}s3mmb6a5*QR9`FJ5oU)EAO;YvK3L`vJT&A7R^(8j5YE3Dl1>IS5=eb z$A=TfJsY9-Q!tcHUs{)j!Ai9`(-!3|Pq5!!9G%c{b9~4VOK}g7ibt>N>Y6=4zCwxM zlJi2umkZmMR+a8rog^h?n6B6{r$h3tOnq+h(w35Hy&mwaRx9sKr-Vdj+4pC!^PfL| z8y3sLqHdt%uWneXQR`PGs50nS`%?0aE!f$Gbv2FbMA5RNz~nozAE27)CE~-+sR-_Qt;_6 z8h7HkD_Gc3Wvk6GWK?pMVd~hZ*10+5LFkxwoLVa zqZ@5$Z^WWnvIl8RUe>XeUoEnm;pH@GJI6sEGka>7?gH}+2@w$yGAh}>R8FZw^X5*; zebNRcR+KmI1qcX4E4=pZPq>~j78fTO5l3;GPS)ko>(_lW%rn%Bmi;9`Tnsv4oK9!H z)To6-MqZly@;vm4d5@XXyZ*ARC{lK98qIY|m-)T2g-`b#i@684r##SvBEGV1!Hz(D zWz}!0W>I~8PT)bv&SE|3+Tb2uhL%{AiE0#waiQ+VvBmL(nvER-cZc0>qZD#}hrqg4 zIk}gw>%@;9ceyt=kjT;6T;nkGKu1BOjV!YYSB93)es*;tg)f!BWM?ckYPag7oV;s^ z?hEdUT9eW5-Ms73UhQQ=gCCx&@^?3LNPMb!Di_S`tj9@_xqW8L;Im2a<&(5=c4dHS zhFJKrKTg!tfpzyFJ2}Vme08a7A@PY(Mq(55e7%m~JJZgJV;+1t?& za+X|A4gBZZ^B=R=E>0Dhw5w#ETJk5sN}loE2UV3dPj@WXPx&1$NiSzRD2o+te`+(~ zSKGMKQ2(TzN}kU+^72Ohl(!IrJ@0$IV-eS~Z>KKpZpCrk4ZeZ5z&BfLS{Fu|q2fxF zkygt7O@h49L_SEQ=%Z2G%!$>-@1_RzDn))8sf(JH26$1AC|AU~mNDaJnV6=SQ{5E5 z=k-XRI)tH{FCeZw8SW7~{1NtsT&0f;ge2m2;^vSV1_v}U8&Sp9p!5ODvIsXa7Tz(0r ziEAsbV>M-S#nvpXhVP)$)C@7BQatgyaz1u9{OsZv6y7W)+v_o>cUmlMqf))Mo!2Oc zxspmu+S4nO>lB>Y>YVV>2bJDtuAV@}$6?Cc&X|Ozl8aZaIBqVhs$}n8=3bLlR~+=F zEv1pp_Fj^ovYt>f_=u+;fko9xH`_l>?OV0|V3=-t?<0sVGubgr+3zs%3c*6IM zu5pvTJzZI~YL{=Ks07(268=4rm{a7NL>H9J%aIAH9h#TdZGXCf*lj-nfucHsZo%#O z3QLNG(oD@YZqfv+xF{edE=X;y#&l$Eq-vE$DI581wV163=xmFBsdnAOFW#ChU+cFQ zst90_xdMDSkv-hEED>AD+C}q_0a+|n}xnhb*>2t}q-O0!;U-W+^&d0NB|3b!i)Q_Q#43(r}%CVzEXtTmcIZ_0_hxdXs3Y=$*=wj5lU1C7Ncgg~-V{ANW6GD+`B4>e&^Q z-SGwciY+EjbPrOILv-r`M=-b^)332h&N!zt2yJ*vpjj|J%Rf>#L*13MNYM% z5!-freN&FPeDnIpAgAiKmruphCC?*+vTWoZ9VcfHQdPCLH`=}|@siDH`Qcek6WWU$ zE(_IfZ7vPx!~S_z8=pMcmL_2^KlFLjB$k42wrs7uE_`pxC$J-XPe!FfUXxv!WkqIX zKje6IC1Tpu-jjLoByxW zd_C!sPI;knMj_<21*Q@N6x)%TQn&q%=*^ve$!l{?8|7wbYa&g=gF)7m_$PK>xiq1j zlEZVaQO#YkW@>Y+sU2(78F5A|&D6R6ccgR0p*gH^R1uj4w^>J1iI4jK#B zH@y^{I0Y=<3aZ0AgntzO%usGusQxZtex~}HN3z4Aa)MW4$>1}>gm>GE^@Pq_AO4#8 zk=(Tt>q%JmXwPi8Vb&I*KerN|F2nqE`i~1o;=8i7N(-SkBcAQ*z__a0`LxhPP54fI z{*$!UiZilOdYM=rWVcmT4y?7j@)Y(wRPwJUa^TBVbVeN|@Ck*Qwcwu5t$7U+7siko5A15QJ1 zoht0L*aDztj`1YZ$PLQ#bp;B$x5$$9G4Ml07X2j(Nm2_73+n3Xqe3?0H-Se;NJwaD zX&HUe0!0>f0p|xOS)Z|J_2e1UpJvv`)TtP--SKVYU&1%I#KrY2VYDrXCf#WlauX`u(Z;mJG5%J$`qH5o3-L(si1wP7swcF^E z^_y$UpU0UWwXFdsvb{N#ohAZAQjPUo*;>dB6qvzbb>zsHkg6)N9((9?Li>W4LVj$e zQ)lp<;~O(|p=YV9pU5nydkUnxosK1DSRt{kR}0zY znC!2;55Q(aVlD2I=vCKv0zWkiTG`lW z?^srko#nt*R9Qv7;2?5)Nx!u^bCPLmecb`IK3wv=N%pyQbkC;AxGlnLH`nImK516Z z%fS%j z>w-pzIafn~7VN?lOsaY}z_mNPyzRCbnvv(zIf;Xd*a2mf;RD{eN1}1X%PEByv#uH5 zN;q>33lS})^Mcs-7=OV~xa_nSx)9^O?BJ#Y?dr&wHB>sA7jvxkvWHRP z8R{S-z3k4T@V{#wiS^tE+5-lgjYnPoKx-EE{cCO$Xwf*o9&WgJ>>qLB8(XNQZ`rZG z#vSq8Mf4x>rTEJznVuy^@|+g{Y%*ZZ_3PJSZWE$1eB?E;Zd>%1sK5zzY&j0{#5bfL521staRK zge7O3JSXIKt3&n5SMi)Xwt1eVvn2s+hRaT#6E#@nX!}t8yq25$!$iRY2_T7C*x6f$ zV6#~*{rI}K6t{O~yRbD|r-EAaQJ?*w>!{Hg8uha}k;-byZkshdevpa6c(Cnf za(kt0?HvHu2=dFeT*fUApRm~55XU{aEE^}-Uu3D1J_xp@bXym`YW%r6fJB1ijnm5H zF)}V#UZqSmE3m4CN>_=k=~zR|g$oyIQJt%|ot{VV=&4PRt;d5X1e_Y8c`B3X(xF|b z;by~%Q~IPYOj0pslW1va2~;Wa+1h2`C$%paRbnD$q6*`=l6W`7)Q=%Vi?ZXU_FjCg zt$leDq$w$~F(5Cv6m1ivIPmZo0-MxkgX?+WMX(S9lj`ef5Onmtn%Ir8A0R4>_BK9N z29N>QFWoA>x4phFN-F45yuR%Yx&+w#jY50;-Oz(1=ehsN*tNL_uv{*dUy{r3mWW6t z=niUkCo{5Zp5<}t*90>tCc`Zr;CG`b(lI|t3O*BW(Uf`>&<_?~Jn#&4bpAJJ3Eqv! z%*=#tc+1J7Sy>aylDGRZuLTKrcXz{Kz-`(g)U(06I;IkTem}AW2FqKt=8%5;| zPFb1EIRbl2;uFA_K9)?(anjWV8YhF}=d(eYX*L!H6DcMd{jJdccitv~FLM2sLUU zp}3AIV`F2`QcY?*fvblq-iU92cFnWkU@9|FFQ*8Zpc^R+vg!f}{>ozpTgl9k6!rP4 z>E@h>X*R`BT+gK`e>+%c zt_eg{Tg3c#F&R@qYAr?%)(YsiLRhmQc3tDXUK?H=6+olG5-O} zq9P*37zZL4gN36^ux!RaTF_3iJpMEZLV9I#`#ZJnR;dz*x|PO^Tgh0#5kJQ zR?1$ZdmC}nyexy`%xRWeY9PwUmHZr@&GHQ0Z4@JWzixrJ(tDL86|j_n=1CT`GJ^Y9 zv`Un0>--$La&%GYoK;;-&3ND2H}^uCI?|O*d-9F-TSKm#Kku0zm&U5;{NuTiw$lWS zu5@Y)%HDw>jFNf5;kQZ-o4l{O4Fny-u;wh9h11Y^jC0@R$qIxVl38S8Vq%eROM=2t z>?*QayZ{-Kj&zb?YVh>*giXKX{M@cs)aUrJ7|pZjym~KwxM=0RIB0up!0DhF-1Azi)OBkWhmHYD znNVldvOCY)Y{TLm3a#2RR5kPOzN}EQ|M7+N#T0|oC+LGCrA1$?8NklOG~Q+|>Jw=s zWnf?cebF;FjpI;>lmRgZf&^O4pA(OXiRsTbR-F7a-Th{xOoopih%AUPI8jcvAd+oM zl}~ipSVSrRM*QeTb-10zU;2y(J~ZzsPGg5K3B^f3P*7uC9otS{X;nj1A(eJ=hWeWy zATcvUSpXm5l@)6SZEdIH(&)u9FD5r}bUWuqgXJu}2F74Fu|A+J-0cs=?9wXng#gk)sS zfNh3`hR^g~LaUk(l}dRvp_Gx(>SuGBp`xRs0h zR^L8>_F>SrQ%nEMomj6w4b_Ey`~eI{gEt{D@mMTGlVhZ8qo7}4U*8EBkc)w`YL4*{ z{+%z@e_Q1}HELYaSV-Z?AHQ-s2yt?SXBSx?xlMv_4{~6Z%GsU*QwxjP$5uff^6%_B zvZaN`B!Jo(&4XJgFaDX}NIt)G>5`1Jbb!DA*~_=zgEUsF8kaGcZ+9WcJ^HdPIw>d} zM@MTzlj0`7#0r!mqqtZCKDCQ0jRBM=2B?E$LIBs((_>W0EH-Iploy^0=`w|41_Epd z=dqnH|45Snqhi^Op5z#tBq4Pp&i-Dc{gPqdFzF$&v4W7vfC>OrqnV6?01}j%)<8JJ z{&_+vq%k#jQLFf&6 zrJ7SJ)}*_&QzC)w{GsxAEIqu@J?0tYa=pG%PH# z+YGw^!;;UXoY-cGY5gj+;nI5U@|hQAx?-j2706PP!)3t_@c`2M~EEqKio0BsYmrv9jjK! zMT5Ni-|KWcp)v`%mwvt{MUGNkxCs(qb#OV;N-pzT<`TAbWim`*T{Nw$6SeW6I#Uv2 zW4jM>l}h!OB1abbfJrQjN2*gIdYfTq6Cm!9zz#{30yR*T#H_@Vb5GeMnHC|N7`!P* z)C>!x;0*{}cM}+CP+x0n$7*~vXfEb}tUQS?%dA{FJ&X59TNx}xU9^~l#2C;+QJXg* z4US7kzs+6ZLWY&fqoM96e2CF_>~ zn4T_tVQ+i~!sxssAM%Y`V_jF(J0EM9_FOH1_+`Dj?a1q&CKADGziJ12FT9h&i3JNkYNxQ|nLKV2Xv!x1! zATS{)rlG-y!ioO;`H{)?3=l;G&wZ4J!a%f6N?zFmNk+oj+McPtRM4qytuu`*)z?s5 zR_uEF_HCACQL<N4_Tt(#G>*cm)0OD&dXPAe__&#LykoBA{Sb^`_wD9rSc|#QGVOb8~sD z344eR5r+kBMtV#Ja{t?2xOEb)GS_TBk=^de1u7I3M+c4qcl^Kj5pV@Q@0sW+SFWJ7 zlUjQG6K3J@>54aR=71Fc+vgxM47(v?BhTai0v*)X@&JfI0-gfd1_Zq;pUf(E8Za4t zFAxd}vg2LCK;BGAD-#(U5_00?$oD+S24Xj z7d@q#AtC(o<%_0e8On8+EzQg>@qGLC4IJ=p<}rTE-|NNYq2q+`8A|Jtb_Q`jWWq9% zlF+f1fKwDNAsPGgi@8V6iKJC)Q;}@uSIOPD(Uor;`V##f<)0P;CK}t|l(V1OI2q!7x|RTLia*Y?wt{rF3@`T*lk=LP2fIGP^i)qgsPM;F%d-%EC|r~dg{ z=n-K0x(@y2D?rFoUz^6j`rnRJnspV*4^q;6nJBIq1B8c98*t($k9bwkTNqogE4)S7*l)i_h{xM*uw-kX>UOC)Gq8&g1Gu_IKB&YJenFD#FcK zlWsaicyr;UR3)wnSFr$R_W=P0oWI*+b?RWq)ovC;tBD zw@`fcjLJTr4MxKy+J28wK(>L6#+_k{fS)2@!`ta4v*Y+jE5;!pgZtX@dW_%2tRt#F2Y93>|Pf5}~@eSJQ=#H~<`!-_xiC ziAI(9qI0L~+Y?Hx?XJ4jB}b5Y83T6q0}tdw+(W_RGh;)sfewvkB~M zPH6WqP*dRMSm|MOIfWo}>Y`t5VYzhaR?h7YUIc>lT>lG}`B7$Hx$71Lk6PrQVy<4b za)ydliB0Vp`cI0vDb_Fl>&_0M(|*vx15G2YGbnfAXhHbPzP>(CbE|hjoSbM$3c%ku zg32cu;J!)L98PHTIDZe$L2}xdh?R-kxJ7?$w%=qKmA0M{a9WP$v3`hTzND5D4_K&| z#vBdx^b9Z~`uh4ZGGE|~l>XO0iQSt@{TVqqmzkNF85vF9d!WH~CYDvKeEls?@Y!Vm zk8wh1|ARC4Kr`;%3kqLa1zuLj2L<0@9-tt~1>RAwUUX(R{BnlVB&;hF`dZ;5>2bq8 z#Cut@kd0x5Xu=nD*Bw?&N zjrCO-`V4$X)S0)XXk22e^0NX_M?MP zzn`ErEqbP9>*%qw!2?BLY91a^JlFRJP}u7s3Q7)y-kkD2EhQOB3su+c)0@BDWgl)? z1rQ)u5GDmG|D`)Lj8Nw~@5p>~K#TSlrPcol-~iQ^>2X;vyPO&a`osJ5G9&;Z?`q?# zcOYA;s*7!;Lpj~^V8=gEd`{qD%jfFqW|LTbL1yN!^E!iz8>5L&DydJh?N9k<8dZkL z;QH~=G07k8N$=1E<50`1FY@Cj^v`)A5V>ndN99EQ7*d;ejIgIKoz?f;na{-Y#@gK?h!j8d>k4sZT{^!5FqHV`!b zm!(k7aX6O$qnU;I7~W5u5+D2Ym<(77=4emA5@qP}K}jWOI~kT~H}w7i;G0s03iFjK zRs-)GD;+zv?3-uvj_2UPlBd>kK0{#_J%Vc45z-g_^&v04 zCFm!BF90*s5hS!*3|~PV|JK(JjsSr|07xS(?Boog*bBJ$dpC^dE=$q0vNc-zN{GS*MP>mQ-6Fe*j{ z^};Fh{!;slX6S<8cvX3xl^4~n{-c?VRVMeR5s@x(9d6oZs=rYEmj~)6 z{1qoIwDYpC%tCibfAstJg@*C*yH2+Vxh|{%ucWNgR9{y&*;9~_11Ij4Q)J2ieP?up z2*H65izOx`KnGO*=FQ6v^S9GF;6N@k-CH0Bfl$)G2hyYcu)(h9{?A5^BQTLrU|jdL zi?IBGQ91+|p`pzap>9qLq%*d_!9F|rwV}bHC!Zk;r5a&w--M&+D2|**HB;>a-{;3< z&=9?(%dRIE{AuuhJu|d}e|AcGTq_^q2(?=W0fhmCU|6htAlglQz=N>T`%Zs7f|42U z;xI&E4kv*J`y3OeQ~&MyXUx!?2NocVk{N;X3)BzyZT$`Cg@BOFVz~rsrVGwWCw7_x zTNJ$Cjp&8m%$F}RmzHVv0SQXUgFJd4WtcBab!N}CXGAnlQRH91DQup?G406o3kU#3 zL%YCQUu&_|w-Y3rf1)pd`r*Fi=pu5G8;cAJYlHL`f)*Q|>)}@VRj{J=&=eoO#&~N* ze$yT_q#s{7b|+5+{Sf=9R^L;f`GIsh`#tf!A^>UgZHaejouFb!8-$nvr}F>-KHs8= z;iEjJeVD|1bYb`$?9Gk4H!p;hgG@=}N2$%k`8}>U4daAgW{W-@g|n z+wI%9J74*a*wEbc=+9AkkSu$M{A(AX5nVLW8;nacK|fn8QDXBy}Pn^To!s{TX3}T zOEgcY*#esWjh+?hN@D+CA@s_ZsBMlqi3ch38?VN}0iZYWEHaY*`fCuwP;YC;ems~T zw1Cj}LAre$G;$~xSVnn6(^l}q{rI>~K^@Hg{!2>W`NG05%LuL<`q6tlr=QlQmBQPB z1Rf^&h1zNEcX(YW#70mP>>F@2@pbSnp3~8DY}8BpksjPD_Xy(fvwx=@`-?b9|9|jx zNCiCD{L8G%xmJ%l2_EG155N3$qNFxG%Ei5f7XYcB4QHvC#OJZBk~-xACApZF-Yc`74__ zNa?PTY@M*GaeoH@=q6cw?aJ?sPgrywjFC;hvH;H|{GGBNZuOf9UD9N5(<10sp~#K> z3BWx+okq+Clp)}gwck0fch|uuCD9p|QMeH%~6XA&74z++ZTSh7pg~rK#=|Nii5^r*YDgH)k}m@?QrGqp|}fF8}32b@AQA4 z34nsm1Jz^P=gm>X&f##N;Q7z*19R}JO?gP1XLAK! zT``cOD=H%s=)_{c-|;JBlKje|o+ozoZz)zQw*cY2@QWxjNT;R51b_a;#KgB%EXQL) zS8Wd}V*MaecF>jyKz^YPuL}SiG&oX_XOY1iEC5>K!#e+!tje?CP(~ftyKp9*hUWTJ zWE4m__oj6AoZw{wllYQ+-#BIpCmzVeFxo6bQ~PPL0_wdYva$Rd&?{GJObYxgg+xM3 zXJKT7v*u5?-5$!C%=W!CYKVR*TK_){^-jPEhmk5AU2X`oZQl3_v!kQ>>cUx>y(V}^ zHP0~G4>%fu@*4E#HqiN+;4tTc*9&BQyoxL}ccM~E@t+prya9ljlB9FSj(iH>EAK17 ztfwbB+i`NZ4UbSqkzc|TWwf1Nb3!0l4V;hq9|a^6h_{LEvRj5Y$ztnNJ>jf zOG$;8w@7N0IfbKi#S2*IuR}(mkM7K{l7DjX(5FvI1|P5u^ebHJrG~el}{E{wHf!AKN!9isCc{G-8f=F?eB!I*Q_c2 z!TO0&(B{sbs~L{ezKR241cgasx>2hG#_n0j5L*Ty6#4bEK`eP1^8@`(IaK1};^L41 zdxv(!00|LlCo9_kZw5(A?rT;$b*%6eh+~+bj}329ad1b1M}QJ<6squjtrcipXnwhb z%1(qGX%I0n@%4=D1D#Gi7rewm01|wtLY9|pcCWox4%wGJB*of^P#kP!lk+$S1^aBg zR1YlS*4ms7yn_LHdLW3CyGjXi7GGa%-2l~gplvpKOtV3PYi(@}yqFd=a;fJlje9OJ z=xJ!2wM~Y;HfTNcqLcf%1cK8PtJC*dSia@vy?FyKwvx(Ng*JXY7wjI?tBTgw*WsO8 z>8#PoKbHt$h6;1PM#Fe96c(^L?jxQ)u)(M_Igz9f`wwLBEwcxmH(u7GC=hQyx^fiV z1B`+qS76!TB?qsV4Dh|k4n!3DcgD?K!_5zKhj;qC;I^bVd9oF@IKAupzZ#S-TQfzU zE*BI14X`%{v8c5`cXZpug&*l+Wn~4D@CPkk!6?B5?sPSE_RDbeU$FQ9_^rC6cfpRH z`1AtUR}MrP=N2*EC=4C=Jv1CI-yf}ka!+{*-_|yD9o)Z5g z3l^kVM2LsyEzqF(#XbXGH$4x>9HN5zn{!@X6CM>2f-Nm5NZ~{vf^iT8Tzk-dO>2!s z?`6I z?SDtO{|lj+er1bl(*3b$tjIGtKVGvRXaXbhp0I*8|CPCYn|hwIAyd19YZ z1&~wV{FLEz=k7aDKm)5E`{>vW9&{Xw0p=6RL6ms8g$MX$ zhylSU!2*!>@b-{0oeDRh?RgAGIH+ecT0_JJR3(xV@S*llR9!WD!YdLbE5EO8C-mw* z2{=;hXsQ+d!{CUCG^V(+VOZ?>GNq(@i#jm&gW{Ulw$RAVdvc(HA|l zsU9#6y6N%d_FIzc`M%FqK2FrC=JMh>+A8&?H|BZbZji8QpVRsR1u#T3I0c<(_i?!i zWNJ!uzmfsN-`xI1&QcT=@};qH4qDQ{Cjh%j7kb-?>QLvE6lE9fagYTTM1R#X{At*b zrOX^k_w5CElT9}8^vPxu(L(OKwV`yi6!2;xgDq$rfDrZU6+KMHM+B6y&!0~)&LSkI z;l*rntMFM`vYAReh3}6A$PEJFeR46uPq1eOE8=W2V5Oiqz#^bH)c|iatAO`UzW$LlW=K4}EB1z;Ewp)DTMx9aXZX8E!qV$#qUvuH3&} zy(S~EN5%CSu~Ll?95bqOQBhHWPCOi}l4;a5;g%sl%A3r9z49Ym3fXNzKWJ!V)Eb`9 zP-Dq5E+sEQzh`szIaVtM=@3en_E$WG91)eCc@3myTr>9dW_=394P)@-s?VQ87iLT6 z1n1vlydK%xz59oFdJaz9RI!BQOhL0Dw!<3LYq)Mjx2$;b?8TydebBE&FIRo~6r#oH5w@hbw&vE53u5|V%m3#48PDRk>l;iPfV(09!cUp}hUVMN`i zT9CDwN%wh(dj)E4c_#8D*?WEG`@a9qIcuH&tYOW1pPBc4 zp6kBv>-qsvOCX^6#=w}%bGfXfQ+d>XJSG4gY}O_81?OaDmA~OdLqii05s@T#984cy zTP!70wy^g63(8PfwKmnQoG$2=*J$y1!?fD8kE4AlHy;O=nOo-=Rzl+Im-2{{J_Gv| zgnM+l&_N0S+5ll_b?m8n{aCIN;YM&rJeT@=Sy0J>BlG0=DBUOG9>n!0r_a>3$$6}# z{dtYgYa~58`>1c*DUcmDPdx)X(szL;3V74hES&B?E_ojl(#vQ|R`1Wq%{}olLgIUnG}6th1V`>X2Y7*s8$eg%|)Egh2$x zIH<9Yy$A0XJ+gILBNx}WZDVEg!f>EDZe{9V%eUT?8Gx*S6Br+^eP~&jYRQ9TE#ok0 z=e$7+%x2gJ`Y`^cKy*bRc=CH2HZJc?6D}t|NXQ4%Ekm&K6G26T8ZObraSyYAyAI?U za~|l+1H>gKU$BNt(6AJ9u^qJFlxaty>Zr6rRy*!%smvYc*)i@a$1O%qS~`{Oso?LW ziupQdlnj_6{!2CXm;1?wfabeW-teW;ZwEJT`6I-@%uNCIb#bh)K2DUqg?v*BsWc_5 z-LoeO2Ptb*jnlcrTUxPT1w|z#pp6(cn))&g4yFmIf01dx# z$6Ewns<#)&Nl(WSpa=&oWlx#)psBYc^;Hzq|MwSBKJY!Qfj4#9!_~-#j4@c({Dw%%>4OZWY~_Pkaxlk z4n=nN`H?#~C4-U`NO}HJ4d1f``!H@3he+9n0S#*Wf>;*-BC8o$i{S1$`JpGCnEnM45i~-++1ym>398 zQFxARP=NVAhTz=UGQ)~dzEQn5&j{BcCxb8zAFZ?Y@?AKbFP>ijgS~g>B~j5eIz0*n z4Tw2j5NEB&@f%14uCHJ=`$dM`RdpqJ+8{dCtbjA&v zPCluey#9y1*0Jnw@$rcEmRRwW0*+oZC!Ab~QfL$IH^}e;kmd9Lk;bOk4uxgCBLvnC zOFJUqTKb+Z)D8eaz+Z#R;>4gs18m5@#=e13lJdeYK}Caq!!G`2O#fTh{18p}w^#my z`1w16zlFzvGX0sCG-wvuS!;f}f?O=t&fMYDBu(1ivTOp=kqrppE{OXJcg4=V_l9>4 zByL*ZC};OABz8CQ-#LwAdo!J?div$zG?3ffF>qSmi?Ag$&s_2;o&ax-u!z=|NF$PP zdA@}a9M0@L5&&0JYaV?}UyNmg4!*|c@$9cMx4dm@3#pdkKmDG(-SAKX)uN!Gc~QXW zA&BPd&jNY^h~|IrPO=gOlO3^tjY%W>;07iBUjs5*_@6|${Xa$R|1L%CGDwp<58^j6 zy*Zu?SOK=2`(p@oss0s^Yi;%Yf-eDB-9jTiYc0AxsDZB%A|mZ~8HS3-M{54a$r78P z+~of~1!@X{IO@090kS1coOY=_CA$xF{dJ=I)ofq;MMJ91X% z>C&{(Hq`7>xgc+J*LV52`jJ8!D%b;b9PlNNzHw`?7VBT83laAw{2GDc-aTysNr1-M z{{!*m7B^q>lkv3~v7L<&bR5>ADz-8VC5sLPtfSNcG#9zKz3)TY!_v92Wqw#!!sVRCpcjr@QSh;d{(>+F_Ra%+Y8z&g0Q1U+fb%RgDWm+oPg*!oz#> zK{3MwxIe|+6O&D?>Ed&Sh~VRPlH)06C*jmk@2!E>GmPu5W5Q3Jj*ln@50y`uuYk&W zh?aj$v^C55_-pH*!*^!T8@{=iy)@_}22h?=2J&QbV>4r2=1dmG)x zOAyYZJsx5_=MDtlmr7$-dzhZC5gMvO^_nux`r?4aan{^8_EIhHp{#kYAgGew6?=X0_zU3-6)P$89Y z!h`4v|8q>hedwN$j-%YOPgW!p*!K~7#g^LcUV~%Ci!Gr#+%9}j@coP%W{@lt651B< z5S7EbKxxbl91@X{o;OA-ii(oAx2F;_%_eifCnB+++wSu0LEg0_2M6Y|+mjOUrx!Ca zuH;kf=keu7(fXUEW{uF>G~N4%9-)y6eMNV8b%y|0(R6kEyq3@n&Nqr4QaiEa{s~he zk|O8tiIoUfk3ge&=R8#>43w2Q>nNt#6pywR7o{#7`FGU(VYfKY&nsW&WXd2xGm|66 zQCGDJoOG}AL5eVFYthu*P$kpFXl`~EkSZfBOaRO9+`%d-F_L<}!bq;XTZ7ixgA`+@ zze+h)g1QtQA|%UJRmulUpWj%q2$&S+&IHw z6z(sibelA{aw%BFnB6(zzTWdCP_P`5mXey`ykv(G0)e<^?G+=x9n@T$z57LgRL=Kn zjMn8b_kI=L6;{?=6($1(fJ?a^B3Z;XW_(Yne!^D79IE8nW7eKyQw8XB`>eTj_EeMP1hE-4=jgGSM$e(vGWsvU=qt=~y z$>pJc*j1dBu!*VQm=JWy48+n3QWCxF2h18x0zbwfI}(#uobMNjj%8#v3g7s5Vtp92|*(JJ1v?Y%rMK!R*PC3rXVAVDr9U^ zQf~Co+dBg*cxg5Co7veocM5T`yuEyq#=3KuNSSy(;Pc>q z#2IGd@Rpt!`{M}@(a9(=FM{cvk@q)eU@)8a-q2?tFzbGuh2&1CMcHjH@8-QIE~ZzR z-(0Yah?I`tyDmKP7}LEjkd|_Is4PrU=##b6Q)S94F%u=INB(}$^guoK)9Af6M3V2X*Iq8eJ7>~`E*kf;bytPc4(D32;rE|syH)497rp`V|*%uoPb zkeV*L)fVsvmL4L&e={*IE-g*QXDDBKX-`1f+O+_@!B$FR^sos zdtmPFY_sbkd(Rc$`cLC^cspDh4*5Eia`K;=QwPI42YdaUahu<5j6VhJ?QfVX{#WSc zLoJwma;0ppao=GvrA`8IhT+|17k9n`aUZg0wgV(DLSq>f4v?FhqU**TrKY?t{rtIQ z@mvON&CLXj19R_ctlDRl;El&u)cABQ&e_qqIDmtJtxOa5^oQEKj88Z)O#57zz)0Mc0wGf}0B)Y(194vkgK#`D}ar`UaeYvNGP5h_E`C zG~ZH=vO*(^La-9|?ul_oWyVAWJtHF{3ybSFUPgIx#(*xN-`;xO`Ii)S({)tTSfj;T zG~ruH!DWQn4Q^}_i=<8nJ26IzQ}7viaOJokhPvB(v)ir27^5zo(b)knv|C}F4@n}u WV0ZQo@{Dlx{Z&;Rl`3Vc!2beAg@OwJ literal 27523 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 - arguments: String {abstract} + executeCommand(dataStorage: DataStorage): String + setArguments(arguments: String): void @@ -18,6 +22,9 @@ abstract class Command { Parser --> Command +hide Parser circle +hide Command circle + @enduml \ No newline at end of file diff --git a/docs/uml-source/ViewerAddCommand.puml b/docs/uml-source/ViewerAddCommand.puml index 297d1f2ee9..69999c2c49 100644 --- a/docs/uml-source/ViewerAddCommand.puml +++ b/docs/uml-source/ViewerAddCommand.puml @@ -10,6 +10,7 @@ opt "add " ParseViewerCommand -> ViewerAddCommand: ViewerAddCommand(String arguments) activate ViewerAddCommand ViewerAddCommand -> ViewerAddCommand: getArguments() +activate ViewerAddCommand alt != "" ViewerAddCommand -> PC: PC(name, false) activate PC @@ -19,8 +20,9 @@ alt != "" deactivate DataStorage.pcList PC --> ViewerAddCommand deactivate PC + deactivate ViewerAddCommand ViewerAddCommand --> ParseViewerCommand: return success message -else +else else ViewerAddCommand --> ParseViewerCommand: throw PPException with error message end From d629885a9e4389b72b3e4a745e2e78f251f3e23e Mon Sep 17 00:00:00 2001 From: Ryujikjs Date: Sat, 8 Apr 2023 03:07:42 +0800 Subject: [PATCH 297/420] Reformat PC class diagram and complete user guide and instructions for manual testing --- docs/DeveloperGuide.md | 52 ++++++++++++++++++++++++++------ docs/uml-pictures/PcDiagram.png | Bin 278425 -> 253470 bytes docs/uml-source/PcDiagram.puml | 17 +++++++++-- 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e5c3e4ff83..c5aa0ffbe1 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -7,18 +7,18 @@ - [Design \& implementation](#design--implementation) - [UI class](#ui-class) - [DataStorage class](#datastorage-class) - - [loadChassis() method](#loadchassis-method) + - [===== loadChassis() method =====](#-loadchassis-method-) - [Parser class](#parser-class) + - [===== ViewerAddCommand() method =====](#-vieweraddcommand-method-) - [PC Class Architecture](#pc-class-architecture) - [Command class](#command-class) - - [`list [COMPONENT]` Command (builder mode)](#list-component-command-builder-mode) + - [===== `list [COMPONENT]` Command (builder mode) =====](#-list-component-command-builder-mode-) - [Appendix: Requirements](#appendix-requirements) - [Product scope](#product-scope) - [Target user profile](#target-user-profile) - [Value proposition](#value-proposition) - [User Stories](#user-stories) - [Non-Functional Requirements](#non-functional-requirements) - - [Glossary](#glossary) - [Instructions for manual testing](#instructions-for-manual-testing) @@ -185,17 +185,49 @@ People who want to build PC's and keep track of their builds. |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| -|v1.0|new user|see usage instructions|refer to them when I forget how to use the application| -|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| +|v1.0|new user|See usage instructions|Refer to them when I forget how to use the application| +|v1.0|user|Create a new custom PC|Start a fresh PC build| +|v1.0|user|Add and delete computer components|Build my computer and remove unwanted builds| +|v1.0|user|View the components of my PC build|See the entire PC build and which components have been chosen| +|v1.0|user|Edit a PC build|Customize the components of a PC build to my liking| +|v1.0|user|Select and unselect componetns from the PC|Choose and change the components as i wish| +|v1.0|user|Change the name of my PC build|Identify my different PC build by their custom name| +|v1.0|frugal user|Add a budget to my build|Ensure that my PC build does not exceed what i am willing to spend| +|v1.0|user|List all the selectable components of a certain type|View the available options for a certain component| +|v2.0|comparitive user|Compare the specifications bettween two components|Have a side by side comparison and choose the better component| +|v2.0|user|Filter the PC builds by ther name/budget/completion|View all PC build that satisfy my requirements| +|v2.0|Experienced user|Add custom components|Add components to my build that are not availabe in the component list| +|v2.0|new builder|Be able to see if components are not compatible|Avoid building PC with incompatible parts| +|v2.0|Experienced user|Filter the component list by specifications|Find specific components that meet my criteria| + -### Non-Functional Requirements -{Give non-functional requirements} -### Glossary +### Non-Functional Requirements + +1. Java 11 or above installed +2. Program built to support only single user +3. Size of terminal -* *glossary item* - Definition ### Instructions for manual testing -{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} +1. Download the latest `.jar` file from this [link](https://github.com/AY2223S2-CS2113-T12-2/tp/releases). +2. Open the folder that the `.jar` file is in and run the program in your terminal using `java -jar bigpp.jar`. +3. Read through user guide to get detailed documentation on functionality and commands of application. +4. See all available commands by using `help`. +5. View Prebuilt PC specifications using `view 1` +6. Create a new PC using `add newPC`. +7. Edit the newly created PC by using `edit 4`. +8. Set a Budget for the build +9. List all cpu components available by using `list cpu`. +10. List cpu compoennts that are filterd by price by using `list cpu -price /from 0 /to 200`. +11. Select cpu by using `select cpu 1`. +12. Select compatible motherboard by using `select motherboard 1`. +13. Unselect cpu by using `unselect cpu`. +14. Compare two motherboard components by using `compare motherboard 2 & 7`. +15. Change the Name of the build by using `name notNewPC`. +16. Add custom cpu to the build by using `custom cpu Intel-new-cpu|Intel|99.5|4|8|3.5|4.6|122|LGA1200`. +17. Go back to the viewer menu by using `back`. +18. Filter the avilable PC builds to see only incomplete builds by using `filter -built incomplete`. +19. Use `bye` to exit program. diff --git a/docs/uml-pictures/PcDiagram.png b/docs/uml-pictures/PcDiagram.png index 69a98d62ae5b31d86a5144c315350e7617217151..1e8534b555297d83e24eb36e8b24438003e0d595 100644 GIT binary patch literal 253470 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 z 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