From 34679b09dd458b23a264c2ff4a524ff91ca2e615 Mon Sep 17 00:00:00 2001 From: Jeffinson Darmawan Date: Fri, 29 Mar 2024 14:37:06 +0800 Subject: [PATCH 1/5] Developer Guide and UML Diagram --- docs/DeveloperGuide.md | 14 +++++++++++++- .../Jeffinson/Jeffinson-UML-Help.png | Bin 30207 -> 28497 bytes docs/team/jeffinson.md | 13 +++++++++++++ text-ui-test/EXPECTED.TXT | 6 ++++-- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 docs/team/jeffinson.md diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 99ded952b8..d7b377875b 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,7 +6,19 @@ ## Design & implementation -{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} +### Flower Removal Command + +![Help Command Sequence Diagram](/Users/jeffinsondarmawan/Downloads/Documents/National University of Singapore/Y2S2/CS2113 Software Engineering/tP/docs/UML-diagrams/Jeffinson/Jeffinson-UML-Help.png) + +**Step 1:** Removing flowers utilise the `parser` class to parse user command to identify which flower to remove, +how much to remove and from which bouquet to remove. + +**Step 2:** User will input `remove /q /from ` and once `parser` identifies the +appropriate keywords, it will instantiate the `HelpCommand` class and run its `execute()` method. + +**Step 3:** `HelpCommand` class will call `printHelpMessage()` method of `Ui` class + +**Step 4:** The list of valid commands will be printed by the `Ui` class # Appendix: Requirements diff --git a/docs/UML-diagrams/Jeffinson/Jeffinson-UML-Help.png b/docs/UML-diagrams/Jeffinson/Jeffinson-UML-Help.png index 2e3fe570a3a40c48355463ad6fce1be7a3eb919b..5fe93df596c7dc90ed7b8cdfa0203b1b10db576b 100644 GIT binary patch literal 28497 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 literal 30207 zcmdSBby$^K_XVmVpwbEgQUY#TQn~~LWP`MXbVwuJB`pmb5R{gX?vNIc66tP%O{a8o z7oo>=v9_PIq$t{*2Y0SryM`wA{F&^vYd3tZUAz9{ z)(!A4%?+pJ;D2bWg_W#z%*-83Uh7$36Mg;WwWXHzYu$(14i62it<9~t7#Pe=wBA_T zn3~Y*n3>vkd?x{q!8DXtvi|+=*RF%-*vGEQy)c_*#I8D0tnx-7^w=MGgN{RkU1~xm zjZ&@9E!VhiU;U(M5?B+Zsf|DM!5VN&~H{)2w!qkj2Cy5JTJdZh@&TjHof^s>~k z^0gvEVw*Hc65@zKbi)1DJ_^=6^qaD5x<~Wm$(X|<95*N0@6D{kt+*TTc$N)?fTP7N z>)D)AjP-ZMnVF@tg-EUw+e`bCcn~@KX8D_l%_9j|-Ld#+DVWo3*T^>%i@4VdLvKiL z^Y{)_%&ygyXP9`P?0eAl4jCP@8a-HbRzH5q8c!iWlbuAQRuKvhu#!}!^rHSz_Flj; zEJ|3wj^8R5Nh*#0kOAH)crQBd93!S{e_B(3NPkpUa~j0R_2SwDLPBYRpb?* z+$4o`WlZYRa!*fG<`Ton+bGGAVj{PcY2TcRo$MBE;_lkYoOupiv`vOr06j>Oaj13g`q9&wxN z&xbf~gl{;m^55^Sb6g1D)w*l2CqwQk{ zVmvgvAAY@#7Z1&N;?kdm5}>k)Vf@oD%fEU=;Mz4SYq4hn^7iU0ame;KjfcLyPB(6Q z!BcSW-t7^(?d3HQ@I+uy7S)Rey3YGF{f2-e79y6{L)E8bmNEhd$)EP7amsrl(#V9L z(LX+8z*im^wz8Fi@y2{8np}4viRYaBu|_d$HP;?1;qihL$+J$A5f4dQ2$vBL75twF zQR&u;|6s(DXTJEO#LdXS^J`G=QHR4iV-H+^O{W&=cOqI^&OKHsU0E3}+J1O`rzWFb zN(8jVdhzq^duenUHEW}0ZdKNc_pgs+DVoLdxim%6DlQ-};Gx-> zZVJeIAwoP`Plu|8xu~*W4C=>N&UCB=(IjqFtU66}sS+VHTctlS{RgGZ}(ds$fS`KT$?sE$B{K13Yv41V6)WP6Ti67eFY)cNdWZ=0GC zFUJEqKumJ>osEsnA;AP@8;Nb1`FL{ey)EhNEm7!ho)T8PAboJK;-tN&{F=$wbN?Jz zc~?Zy)DQp6Zsh=`sqjK>JR(;m+bvxfAE z`}mG_ta_y6Lk={ancRMpl3_1Q{Tp6jdBROG`?;DRrxj`k$xjf+bkmYA`vK>#S!oZD+$j|q&u+WAid}PlPmW7p7aue=YhEvq$ zs?n-S8bhQ$FpFoZ%N_5}Jih;iSfoqWBN@Fmkl~@~d(8^QqKu0&j zAfcynSpDkW<)fwRJn4gG>c1n=ByVnYRBexoH#9Pr0aMg}Ex=9s2p$j{`$EX)X{Ca0 zia94iP-Gy#c#}D{eBmzMOUrdX1|g=L*Swn>k%P^34GVok?wrE+G%QaZq)h0T@Du1j z*H~-#pBS;_kXI9a;vJ(tSU%XAIzTXtps}v9{X)yg z-d?ioO;+#Q3orh{*02IDX3ftdaGNYJ();0KA`z@JU-Q{IAJQ4xvDff@T zs6di|LI{s@u1L^$vWNhAOS5mElb+tlu}dWCgPLkB&uvS#2ekNZ4EPN)U`Gh?j2O0{ zgx{ALJ_wb{Yr}^0Ekt`^rQ@^^hnuuon`d7x& z*7~WRE7U5MJ`BXw(+fz8saU2zWm?O5o$9xm2is71XcRUZacG@+cz#Z`u$fNaF@DVx z?CxEOQ&c}NJ#n$NqThaAkVyG{X~p9IIMc^=pp4rDtSFRb#r z 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 /q /from ` and once `parser` identifies the +appropriate keywords, it will instantiate the `HelpCommand` class and run its `execute()` method. + +**Step 3:** `HelpCommand` class will call `printHelpMessage()` method of `Ui` class + +**Step 4:** The list of valid commands will be printed by the `Ui` class \ No newline at end of file diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 3e23379b3a..692bc94567 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -9,6 +9,7 @@ Hello from What can I do for you? +help Here are the list of commands you can use: 1. new - Add a bouquet 2. delete - Delete a bouquets @@ -16,11 +17,12 @@ Here are the list of commands you can use: 4. info - Provide information on chosen flower 5. add /q /to - add flower to a bouquet. 6. remove /q /from - remove flower from a bouquet. -7. flower - Shows a list of flowers that can be added into mybouquets -8. flower - Shows a list of flowers associated with said occasion +7. flowers - Shows a list of flowers that can be added into mybouquets +8. flowers - Shows a list of flowers associated with said occasion 9. occasion - Shows a list of occasions associated with available flowers. 10. bye - Exits the programme ____________________________________________________________ What can I do for you? +bye Enjoy your bouquet! Thank you for using Florizz ____________________________________________________________ From c1105a8c0c3f78f29183059b56ab85a270a7b166 Mon Sep 17 00:00:00 2001 From: Jeffinson Darmawan Date: Fri, 29 Mar 2024 17:19:23 +0800 Subject: [PATCH 2/5] UML --- docs/DeveloperGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d7b377875b..5b7cb4b715 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -8,7 +8,7 @@ ### Flower Removal Command -![Help Command Sequence Diagram](/Users/jeffinsondarmawan/Downloads/Documents/National University of Singapore/Y2S2/CS2113 Software Engineering/tP/docs/UML-diagrams/Jeffinson/Jeffinson-UML-Help.png) +![Help Command Sequence Diagram](UML-diagrams/Jeffinson/Jeffinson-UML-Remove.png) **Step 1:** Removing flowers utilise the `parser` class to parse user command to identify which flower to remove, how much to remove and from which bouquet to remove. @@ -59,7 +59,7 @@ Priorities: High (must have) `* * *`, Medium (nice to have) `* *`, Low (unlikely ## Use cases -(For all all use cases below, the System is `Florizz` and the Actor is the `user`, unless specified otherwise) +(For all use cases below, the System is `Florizz` and the Actor is the `user`, unless specified otherwise) **Use case: Create a new bouquet named "for valentine" and add 3 stalks of rose into the bouquet** From f24a493560373fed9bfc41e98844e2614d675a7c Mon Sep 17 00:00:00 2001 From: Jeffinson Darmawan Date: Fri, 29 Mar 2024 17:33:45 +0800 Subject: [PATCH 3/5] Delete log --- FlorizzLogger.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/FlorizzLogger.xml b/FlorizzLogger.xml index 809df735e7..e69de29bb2 100644 --- a/FlorizzLogger.xml +++ b/FlorizzLogger.xml @@ -1,8 +0,0 @@ -1::florizz.core.Florizz::main::Fri Mar 29 13:03:47 SGT 2024::Entered isRunning while loop in Florizz.java -1::Parser::parse::Fri Mar 29 13:03:51 SGT 2024::ENTRY -1::florizz.core.Parser::parse::Fri Mar 29 13:03:51 SGT 2024::Command parsed successfully -1::Parser::parse::Fri Mar 29 13:03:51 SGT 2024::RETURN -1::florizz.core.Florizz::main::Fri Mar 29 13:03:51 SGT 2024::Entered isRunning while loop in Florizz.java -1::Parser::parse::Fri Mar 29 13:03:53 SGT 2024::ENTRY -1::florizz.core.Parser::parse::Fri Mar 29 13:03:53 SGT 2024::Command parsed successfully -1::Parser::parse::Fri Mar 29 13:03:53 SGT 2024::RETURN From d9bff5873cbbdb918db726c3c42b15a08df084d0 Mon Sep 17 00:00:00 2001 From: Jeffinson Darmawan Date: Fri, 29 Mar 2024 17:34:06 +0800 Subject: [PATCH 4/5] Modified DG --- docs/DeveloperGuide.md | 43 +++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5b7cb4b715..0899087784 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,19 +6,44 @@ ## Design & implementation -### Flower Removal Command +{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} -![Help Command Sequence Diagram](UML-diagrams/Jeffinson/Jeffinson-UML-Remove.png) +### Flower Information Command -**Step 1:** Removing flowers utilise the `parser` class to parse user command to identify which flower to remove, -how much to remove and from which bouquet to remove. +`info ` command prints information about the sepcified flower -**Step 2:** User will input `remove /q /from ` and once `parser` identifies the -appropriate keywords, it will instantiate the `HelpCommand` class and run its `execute()` method. +![Info Command Sequence Diagram](..\docs\UML-diagrams.Ian\InfoCommandUML.png) -**Step 3:** `HelpCommand` class will call `printHelpMessage()` method of `Ui` class +Step 1: Flower information mechanism utilize the `parser` class to parse user command for a specific flower name inputted. -**Step 4:** The list of valid commands will be printed by the `Ui` class +Step 2: Once `parser` detect that `info` keyword is used, it will instantiate `InfoCommand` class and run its `execute()` method. + +Step 3: `InfoCommand` class will call `printFlowerInfo()` method of `Ui` class + +Step 4: `get()` of `FlowerDictionary` class will then be called in order to retrive information about the specified flower. This information will be printed by the `Ui` class + + +### [Proposed] Storage + +#### Proposed Implementation: + +The proposed storage mechanism will utilize a class `storage` who is in charge of getting the file, `encoder` which will encode current model into a .txt file format, `decoder` which will decode .txt file into a usable model. + +![Storage Class Diagram](..z\docs\UML-diagrams.Ian\storage.png) + +#### Design Considerations: +- Alternative 1 (current choice): use .txt files as storage + - Pros: + - Easier to implement + - .txt file is very readable even outside of programme + - Cons: + - .txt file can be easily changed outside of programme, making storage of model prone to parsing failure +- Alternative 2: use .csv files as storage + - Pros: + - A more standardize format that is easily accepted by other 3rd party software + - Cons: + - More difficulty to set up the decoder + - .csv file can be easily changed outside of programme, making storage of model prone to parsing failure # Appendix: Requirements @@ -59,7 +84,7 @@ Priorities: High (must have) `* * *`, Medium (nice to have) `* *`, Low (unlikely ## Use cases -(For all use cases below, the System is `Florizz` and the Actor is the `user`, unless specified otherwise) +(For all all use cases below, the System is `Florizz` and the Actor is the `user`, unless specified otherwise) **Use case: Create a new bouquet named "for valentine" and add 3 stalks of rose into the bouquet** From d3de93b590ddd3407e87960c364f5000e49fe2c2 Mon Sep 17 00:00:00 2001 From: Jeffinson Darmawan Date: Fri, 29 Mar 2024 18:02:33 +0800 Subject: [PATCH 5/5] Developer Guide --- docs/DeveloperGuide.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 0899087784..9baee87c4c 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -22,6 +22,37 @@ Step 3: `InfoCommand` class will call `printFlowerInfo()` method of `Ui` class Step 4: `get()` of `FlowerDictionary` class will then be called in order to retrive information about the specified flower. This information will be printed by the `Ui` class +### Flower Remove Command + +`remove /q /from ` removes flower(s) from a bouquet + +![Remove Command Sequence Diagram](UML-diagrams/Jeffinson/Jeffinson-UML-Remove.png); + +Removing flowers utilise the `parser` class to parse user command to identify which flower to remove, +how much to remove and from which bouquet to remove. + +**Step 1:** User will input the flower name, quantity and bouquet name into the `Parser.parser()` method, after which `RemoveFlowerCommand` +class will be instantiated and run its `execute()` method. + +**Step 2:** An object of type `RemoveFlowerCommand` is returned which contains the name, quantity of the flower to be added, and the target bouquet + +**Step 3:** Within the `RemoveFlowerCommand`, `execute()` method is called to execute the removal of flower command + +**Step 4:** The flowers are removed and a confirmation message is sent back to the user + +### Flower Help Command + +`help` Shows a list of valid commands + +![Help Command Sequence Diagram](UML-diagrams/Jeffinson/Jeffinson-UML-Help.png); + +Help command utilises the `parser` class to identify the keyword `help` + +**Step 1: ** User will write `help` and `HelpCommand` class will be instantiated and `execute()` method will run. + +**Step 2:** `HelpCommand` class will call `printHelpMessage()` method of `Ui` class + +**Step 3:** The list of valid commands will be printed by the `Ui` class ### [Proposed] Storage