From c5852a18ffbb2f6428a2546a8e1937270895a2d4 Mon Sep 17 00:00:00 2001 From: Lin Shuang Shuang Date: Wed, 27 Mar 2024 10:38:20 +0800 Subject: [PATCH] Update DG --- build.gradle | 4 + docs/DeveloperGuide.md | 36 +++++++++ docs/diagrams/AddProjectSequenceDiagram.puml | 70 ++++++++++++++++++ ...puml => DeleteProjectSequenceDiagram.puml} | 0 docs/images/AddProjectSequenceDiagram.png | Bin 0 -> 31955 bytes 5 files changed, 110 insertions(+) create mode 100644 docs/diagrams/AddProjectSequenceDiagram.puml rename docs/diagrams/{DeleteSequenceDiagram.puml => DeleteProjectSequenceDiagram.puml} (100%) create mode 100644 docs/images/AddProjectSequenceDiagram.png diff --git a/build.gradle b/build.gradle index 4294c716828..b7f9789849f 100644 --- a/build.gradle +++ b/build.gradle @@ -69,4 +69,8 @@ shadowJar { archiveFileName = 'tp_new.jar' } +run { + enableAssertions = true +} + defaultTasks 'clean', 'test' diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 4109c82b93c..939d7a38ad5 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -159,6 +159,42 @@ Classes used by multiple components are in the `seedu.addressbook.commons` packa This section describes some noteworthy details on how certain features are implemented. +### Adding a project +#### Implementation +1. The AddressBookParser parses the command string given by the user, and looks for the command word "add project". Then AddProjectCommandParser parse function is called. +2. If the PROJECT_NAME is an empty string, an exception is thrown, else the addProjectCommand execution function is called. +3. The `AddProjectCommand` class is responsible for adding a project to the project list. + - The constructor of the class takes in a project of type Project. + - If the same project already exists within the project list, then an exception is thrown to alert users that the project already exists. + - Else the project is successfully added. + +![Interactions Inside the Logic Component for the `add project Duke` Command](images/AddProjectSequenceDiagram.png) + +#### Design considerations: + +**Aspect of including team members** + +- **Alternative 1 (current choice):** Split add project and add team into 2 different commands. + - Pros: Ensure that command stays short and rather intuitive for users to use, as well as allows users the flexibility to add team members to the project whenever. + - Cons: Users have to remember more command words, and type more commands. + +- **Alternative 2:** Use prefix to indicate the team members that will be added to the project. + - Example: `add project PROJECT_NAME /t Rachel, Daniel, John`. + - Pros: Users have 1 less command to remember. + - Cons: The command syntax is inconsistent with all the other commands as none of them uses prefixes. + +**Aspect of command word** + +- **Alternative 1:** Command word is `add` and the same command word is used for add tasks, add team, add deadline etc. + - The different commands are differentiated by the prefix (eg: '/t' for add team, '/p' for add project). + - Pros: Users have fewer commands to remember, and fewer words to type. + - Cons: Users have to remember the prefixes for each command and can be confusing. + +- **Alternative 2 (current choice):** Command word is `add project` (2 words). + - There will be different command words for add tasks `add task`, add team `add team` etc. + - Pros: This is more intuitive for users to use as there will be no need for prefixes. + - Cons: More words to type for users. + ### \[Proposed\] Undo/redo feature #### Proposed Implementation diff --git a/docs/diagrams/AddProjectSequenceDiagram.puml b/docs/diagrams/AddProjectSequenceDiagram.puml new file mode 100644 index 00000000000..dae3e5230be --- /dev/null +++ b/docs/diagrams/AddProjectSequenceDiagram.puml @@ -0,0 +1,70 @@ +@startuml +!include style.puml +skinparam ArrowFontStyle plain + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR +participant ":AddProjectCommandParser" as AddProjectCommandParser LOGIC_COLOR +participant "d:AddProjectCommand" as AddProjectCommand LOGIC_COLOR +participant "r:CommandResult" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant "m:Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute("add project Duke") +activate LogicManager + +LogicManager -> AddressBookParser : parseCommand("add project Duke") +activate AddressBookParser + +create AddProjectCommandParser +AddressBookParser -> AddProjectCommandParser +activate AddProjectCommandParser + +AddProjectCommandParser --> AddressBookParser +deactivate AddProjectCommandParser + +AddressBookParser -> AddProjectCommandParser : parse("Duke") +activate AddProjectCommandParser + +create AddProjectCommand +AddProjectCommandParser -> AddProjectCommand +activate AddProjectCommand + +AddProjectCommand --> AddProjectCommandParser : +deactivate AddProjectCommand + +AddProjectCommandParser --> AddressBookParser : d +deactivate AddProjectCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +AddProjectCommandParser -[hidden]-> AddressBookParser +destroy AddProjectCommandParser + +AddressBookParser --> LogicManager : d +deactivate AddressBookParser + +LogicManager -> AddProjectCommand : execute(m) +activate AddProjectCommand + +AddProjectCommand -> Model : addProject(Duke) +activate Model + +Model --> AddProjectCommand +deactivate Model + +create CommandResult +AddProjectCommand -> CommandResult +activate CommandResult + +CommandResult --> AddProjectCommand +deactivate CommandResult + +AddProjectCommand --> LogicManager : r +deactivate AddProjectCommand + +[<--LogicManager +deactivate LogicManager +@enduml diff --git a/docs/diagrams/DeleteSequenceDiagram.puml b/docs/diagrams/DeleteProjectSequenceDiagram.puml similarity index 100% rename from docs/diagrams/DeleteSequenceDiagram.puml rename to docs/diagrams/DeleteProjectSequenceDiagram.puml diff --git a/docs/images/AddProjectSequenceDiagram.png b/docs/images/AddProjectSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..2da04ed1439e7de1b2dee7ffca6335f3c2a65e9d GIT binary patch literal 31955 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