From 675e78f2ae8c56446d02928c0dbb2bb365245793 Mon Sep 17 00:00:00 2001 From: Qing Hua Date: Thu, 27 Oct 2016 16:34:53 +0800 Subject: [PATCH 01/18] Update AboutUs.md --- docs/AboutUs.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9027e0242e1c..19717d89d073 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -33,8 +33,18 @@ Component SME: Logic, Parsing #### [Ng Qing Hua](http://github.com/qhng)

**Role**: Developer
-Responsibilities: Testing, Deliverables and Deadlines
-Component SME: Model, Commons +* Components in charge of: [Storage](DeveloperGuide.md#storage-component), [Model](DeveloperGuide.md#model-component) +* Aspects/tools in charge of: Testing, Deliverables and Deadlines +* Features implemented: + * [Add task](UserGuide.md#adding-a-task-add) + * [List task](UserGuide.md#listing-all-tasks-list) + * [Find task](UserGuide.md#finding-all-task-containing-any-keyword-in-its-name-find) + * [Delete task](UserGuide.md#deleting-a-task--delete) + * [Modify task](UserGuide.md#modifies-a-task--modify) +* Code written: [[functional code](../collated/main/A1019915W.md)][[test code](../collated/main/A1019915W.md)][[docs](../collated/docs/A1019915W.md)] +* Other major contributions: + * Did the initial refactoring from AddressBook to SavvyTasker [[#34](https://github.com/CS2103AUG2016-T14-C2/main/pull/34) ] + * Set up Travis and Coveralls ----- From 40b99a9a6dfa4f75bac29775d82679c99b35dd0e Mon Sep 17 00:00:00 2001 From: Qing Hua Date: Thu, 27 Oct 2016 16:40:21 +0800 Subject: [PATCH 02/18] 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 19717d89d073..4cbcb7d7c34e 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -41,7 +41,7 @@ Component SME: Logic, Parsing * [Find task](UserGuide.md#finding-all-task-containing-any-keyword-in-its-name-find) * [Delete task](UserGuide.md#deleting-a-task--delete) * [Modify task](UserGuide.md#modifies-a-task--modify) -* Code written: [[functional code](../collated/main/A1019915W.md)][[test code](../collated/main/A1019915W.md)][[docs](../collated/docs/A1019915W.md)] +* Code written: [[functional code](../collated/main/A0139915W.md)][[test code](../collated/main/A0139915W.md)][[docs](../collated/docs/A0139915W.md)] * Other major contributions: * Did the initial refactoring from AddressBook to SavvyTasker [[#34](https://github.com/CS2103AUG2016-T14-C2/main/pull/34) ] * Set up Travis and Coveralls From 3fc8e066a36f3eb83c525b2028f43e925f963965 Mon Sep 17 00:00:00 2001 From: Qing Hua Date: Thu, 27 Oct 2016 17:05:05 +0800 Subject: [PATCH 03/18] Update UserGuide.md --- docs/UserGuide.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b29a856b6076..b7a807c0b1bf 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -47,7 +47,9 @@ Format: `exit` #### Saving the data Savvy Tasker data are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually. - + +[//]: # (@@author A0139915W) + #### Adding a task: `add` Adds a task to Savvy Tasker.
Format: `add TASK_NAME [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/PRIORITY_LEVEL] [r/RECURRING_TYPE] [n/NUMBER_OF_RECURRENCE] [c/CATEGORY] [d/DESCRIPTION]` @@ -149,6 +151,8 @@ Format: `modify INDEX [t/TASK_NAME] [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/ >
> Overwrites any of the specified fields ('LOCATION', 'DESCRIPTION'...) with the new values +[//]: # (@@author) + #### Mark a task as done : `mark` Marks the task as completed identified by the index number used in the last task listing. Completed task will be remove from the normal list and placed under archived list
Format: `mark INDEX [MORE_INDEX]` @@ -227,6 +231,9 @@ Add task named "pjm" to task list **A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous Savvy Tasker folder. + +[//]: # (@@author A0139915W) + ## Command Summary Command | Format From 1c5e25fb311d29fdb377c9d568da924e28c91f64 Mon Sep 17 00:00:00 2001 From: Qing Hua Date: Thu, 27 Oct 2016 17:12:27 +0800 Subject: [PATCH 04/18] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b59179c4107c..34f26dcf3303 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -62,7 +62,7 @@ The **_Architecture Diagram_** given above explains the high-level design of the App. Given below is a quick overview of each component. -`Main` has only one class called [`MainApp`](../src/main/java/seedu/address/MainApp.java). It is responsible for, +`Main` has only one class called [`MainApp`](../src/main/java/seedu/savvytasker/MainApp.java). It is responsible for, * At app launch: Initializes the components in the correct sequence, and connect them up with each other. * At shut down: Shuts down the components and invoke cleanup method where necessary. @@ -89,6 +89,8 @@ interface and exposes its functionality using the `LogicManager.java` class.
The _Sequence Diagram_ below shows how the components interact for the scenario where the user issues the command `delete 3`. +[//]: # (@@author A0139915W) + >Note how the `Model` simply raises a `SavvyTaskerChangedEvent` when the Savvy Tasker data are changed, @@ -104,11 +106,13 @@ being saved to the hard disk and the status bar of the UI being updated to refle The sections below give more details of each component. +[//]: # (@@author) + ### UI component
-**API** : [`Ui.java`](../src/main/java/seedu/address/ui/Ui.java) +**API** : [`Ui.java`](../src/main/java/seedu/savvytasker/ui/Ui.java) The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter`, `BrowserPanel` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class @@ -116,7 +120,7 @@ and they can be loaded using the `UiPartLoader`. The `UI` component uses JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder.
- For example, the layout of the [`MainWindow`](../src/main/java/seedu/address/ui/MainWindow.java) is specified in + For example, the layout of the [`MainWindow`](../src/main/java/seedu/savvytasker/ui/MainWindow.java) is specified in [`MainWindow.fxml`](../src/main/resources/view/MainWindow.fxml) The `UI` component, @@ -128,7 +132,7 @@ The `UI` component,
-**API** : [`Logic.java`](../src/main/java/seedu/address/logic/Logic.java) +**API** : [`Logic.java`](../src/main/java/seedu/savvytasker/logic/Logic.java) 1. `Logic` uses the `Parser` class to parse the user command. 2. This results in a `Command` object which is executed by the `LogicManager`. @@ -139,11 +143,13 @@ Given below is the Sequence Diagram for interactions within the `Logic` componen API call.

+[//]: # (@@author A0139915W) + ### Model component
-**API** : [`Model.java`](../src/main/java/seedu/address/model/Model.java) +**API** : [`Model.java`](../src/main/java/seedu/savvytasker/model/Model.java) The `Model`, * stores a `UserPref` object that represents the user's preferences. @@ -156,12 +162,14 @@ The `Model`,
-**API** : [`Storage.java`](../src/main/java/seedu/address/storage/Storage.java) +**API** : [`Storage.java`](../src/main/java/seedu/savvytasker/storage/Storage.java) The `Storage` component, * can save `UserPref` objects in json format and read it back. * can save the Saavy Tasker data in xml format and read it back. +[//]: # (@@author) + ### Common classes Classes used by multiple components are in the `seedu.saavytasker.commons` package. @@ -598,6 +606,8 @@ Use case ends. 2. Does not cater for tasks, only events +[//]: # (@@author A0139915W) + #### Competing product: WunderList **Pros:** From 054fc309f1c9a09834b2665f8fb5ef7db6170c28 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 17:39:40 +0800 Subject: [PATCH 05/18] Update AboutUs --- docs/AboutUs.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 4cbcb7d7c34e..aa74d320e10f 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -25,8 +25,16 @@ Component SME: UI #### [Low Zheng Heng Henry](http://github.com/e0003801)
**Role**: Developer
-Responsibilities: Documentation, Code Quality
-Component SME: Logic, Parsing +* Components in charge of: [Logic](DeveloperGuide.md#logic-component), [Parser](DeveloperGuide.md#parser-component) +* Aspects/tools in charge of: Documentation, Code Quality +* Features implemented: + * [Alias](UserGuide.md#alias-a-keyword-alias) + * [Unalias](UserGuide.md#unalias-a-keyword-unalias) +* Code written: [[functional code](../collated/main/A0139916U.md)][[test code](../collated/main/A0139916U.md)][[docs](../collated/docs/A0139916U.md)] +* Other major contributions: + * Initial gradle natty dependency configuration 8360c0d66fc55f36bed0d0e9d4c6b63186aeb590 + * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo 4dfafa07337f731959bcd7e267e0de9a093ae285 + * All parsing related code for all commands [`Package`](../src/main/java/seedu/savvytasker/logic/parser) ----- From 8ce16d4f385f9b972ce255d986195ce03f588a22 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 17:50:17 +0800 Subject: [PATCH 06/18] Update AboutUs --- docs/AboutUs.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index aa74d320e10f..5ca28545136e 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -28,13 +28,13 @@ Component SME: UI * Components in charge of: [Logic](DeveloperGuide.md#logic-component), [Parser](DeveloperGuide.md#parser-component) * Aspects/tools in charge of: Documentation, Code Quality * Features implemented: - * [Alias](UserGuide.md#alias-a-keyword-alias) - * [Unalias](UserGuide.md#unalias-a-keyword-unalias) + * [Alias](UserGuide.md##alias-a-keyword--alias) + * [Unalias](UserGuide.md#unalias-a-keyword--unalias) * Code written: [[functional code](../collated/main/A0139916U.md)][[test code](../collated/main/A0139916U.md)][[docs](../collated/docs/A0139916U.md)] * Other major contributions: - * Initial gradle natty dependency configuration 8360c0d66fc55f36bed0d0e9d4c6b63186aeb590 - * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo 4dfafa07337f731959bcd7e267e0de9a093ae285 - * All parsing related code for all commands [`Package`](../src/main/java/seedu/savvytasker/logic/parser) + * Initial gradle natty dependency configuration [[8360c0d](https://github.com/CS2103AUG2016-T14-C2/main/commit/8360c0d66fc55f36bed0d0e9d4c6b63186aeb590) + * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo [[4dfafa0](https://github.com/CS2103AUG2016-T14-C2/main/commit/4dfafa07337f731959bcd7e267e0de9a093ae285) + * All parsing related code for all commands [Parser](../src/main/java/seedu/savvytasker/logic/parser) ----- From 11cbfc49fde4d4a85e155efe69e0e41a0689460a Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 17:59:15 +0800 Subject: [PATCH 07/18] Update DeveloperGuide --- docs/DeveloperGuide.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 34f26dcf3303..5f980f877971 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -75,6 +75,7 @@ Two of those classes play important roles at the architecture level. The rest of the App consists four components. * [**`UI`**](#ui-component) : The UI of tha App. * [**`Logic`**](#logic-component) : The command executor. +* [**`Parser`**](#parser-component) : The command executor. * [**`Model`**](#model-component) : Holds the data of the App in-memory. * [**`Storage`**](#storage-component) : Reads data from, and writes data to, the hard disk. @@ -128,6 +129,8 @@ The `UI` component, * Binds itself to some data in the `Model` so that the UI can auto-update when data in the `Model` change. * Responds to events raised from various parts of the App and updates the UI accordingly. +[//]: # (@@author A0139916U) + ### Logic component
@@ -143,6 +146,16 @@ Given below is the Sequence Diagram for interactions within the `Logic` componen API call.

+### Parser component + +
+ +**API** : [`MasterParser.java`](../src/main/java/seedu/savvytasker/logic/parser/MasterParser.java) + +The `Parser` component, +* can parse text input into commands. +* supports adding and removing of keyword aliases + [//]: # (@@author A0139915W) ### Model component From c66b8e16e3c67022d1e5287b18d987b11daccb77 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 17:59:49 +0800 Subject: [PATCH 08/18] Add ParserClassDiagram, Revert LogicClassDiagram --- docs/images/LogicClassDiagram.png | Bin 42394 -> 27738 bytes docs/images/ParserClassDiagram.png | Bin 0 -> 16405 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/ParserClassDiagram.png diff --git a/docs/images/LogicClassDiagram.png b/docs/images/LogicClassDiagram.png index 6c71318ac3a99526e7b2e008a8d207f9f1baa850..475e8486ff80004146faefbed93285fea39768be 100644 GIT binary patch literal 27738 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

>Ul$KXqSlV^8`kn5<|hCi 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 literal 42394 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 H==J{quuu=g diff --git a/docs/images/ParserClassDiagram.png b/docs/images/ParserClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d6895bd9f773ab319b758a358ba98c20a7d42 GIT binary patch literal 16405 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 Date: Thu, 27 Oct 2016 18:00:12 +0800 Subject: [PATCH 09/18] Update Diagrams --- docs/diagrams/Diagrams.pptx | Bin 73660 -> 74926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/diagrams/Diagrams.pptx b/docs/diagrams/Diagrams.pptx index a7703f08a8f1da6a5dcc9da3022e647b23bc1d67..05ad0e1aeb6943d665428cfbc91508c38ad50d5c 100644 GIT binary patch delta 12685 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 Date: Thu, 27 Oct 2016 18:06:51 +0800 Subject: [PATCH 10/18] Update DeveloperGuide --- docs/DeveloperGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5f980f877971..e9dd6f0eaa8e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -603,6 +603,7 @@ Use case ends. 5. Email notifications, autoprocess 6. API
+[//]: # (@@author A0139916U) #### Competing product: MIUI Calendar From 5ca47e42d5f37fe806f9ca026a1d67dfc36d7911 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:09:29 +0800 Subject: [PATCH 11/18] Update AboutUs --- docs/AboutUs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 5ca28545136e..11fee0731328 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -32,9 +32,9 @@ Component SME: UI * [Unalias](UserGuide.md#unalias-a-keyword--unalias) * Code written: [[functional code](../collated/main/A0139916U.md)][[test code](../collated/main/A0139916U.md)][[docs](../collated/docs/A0139916U.md)] * Other major contributions: - * Initial gradle natty dependency configuration [[8360c0d](https://github.com/CS2103AUG2016-T14-C2/main/commit/8360c0d66fc55f36bed0d0e9d4c6b63186aeb590) - * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo [[4dfafa0](https://github.com/CS2103AUG2016-T14-C2/main/commit/4dfafa07337f731959bcd7e267e0de9a093ae285) - * All parsing related code for all commands [Parser](../src/main/java/seedu/savvytasker/logic/parser) + * Initial gradle natty dependency configuration [[8360c0d](https://github.com/CS2103AUG2016-T14-C2/main/commit/8360c0d66fc55f36bed0d0e9d4c6b63186aeb590)] + * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo [[4dfafa0](https://github.com/CS2103AUG2016-T14-C2/main/commit/4dfafa07337f731959bcd7e267e0de9a093ae285)] + * All parsing related code for all commands [[Parser](../src/main/java/seedu/savvytasker/logic/parser)] ----- From 2c4c659be850ebecce2e105ed0a2924595c65cd7 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:10:45 +0800 Subject: [PATCH 12/18] Update AboutUs --- docs/AboutUs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 11fee0731328..f99042269d08 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -30,7 +30,7 @@ Component SME: UI * Features implemented: * [Alias](UserGuide.md##alias-a-keyword--alias) * [Unalias](UserGuide.md#unalias-a-keyword--unalias) -* Code written: [[functional code](../collated/main/A0139916U.md)][[test code](../collated/main/A0139916U.md)][[docs](../collated/docs/A0139916U.md)] +* Code written: [[functional code](../collated/main/A0139916U.md)][[test code](../collated/test/A0139916U.md)][[docs](../collated/docs/A0139916U.md)] * Other major contributions: * Initial gradle natty dependency configuration [[8360c0d](https://github.com/CS2103AUG2016-T14-C2/main/commit/8360c0d66fc55f36bed0d0e9d4c6b63186aeb590)] * Set up initial interface for undo/redo in Command classes and implement Logic-level undo/redo [[4dfafa0](https://github.com/CS2103AUG2016-T14-C2/main/commit/4dfafa07337f731959bcd7e267e0de9a093ae285)] @@ -49,7 +49,7 @@ Component SME: UI * [Find task](UserGuide.md#finding-all-task-containing-any-keyword-in-its-name-find) * [Delete task](UserGuide.md#deleting-a-task--delete) * [Modify task](UserGuide.md#modifies-a-task--modify) -* Code written: [[functional code](../collated/main/A0139915W.md)][[test code](../collated/main/A0139915W.md)][[docs](../collated/docs/A0139915W.md)] +* Code written: [[functional code](../collated/main/A0139915W.md)][[test code](../collated/test/A0139915W.md)][[docs](../collated/docs/A0139915W.md)] * Other major contributions: * Did the initial refactoring from AddressBook to SavvyTasker [[#34](https://github.com/CS2103AUG2016-T14-C2/main/pull/34) ] * Set up Travis and Coveralls From bde273d7bfc5f56a48715d6a222c6909ca9f0a3f Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:16:12 +0800 Subject: [PATCH 13/18] Update UserGuide --- docs/UserGuide.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b7a807c0b1bf..936be5fb6d3e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -198,10 +198,17 @@ Format: `redo` Clears all entries from the Savvy Task.
Format: `clear` +[//]: # (@@author A0139916U) + #### Alias a keyword : `alias` -Alias a keyword to mean another text.
+Alias a keyword to represent another text.
Format: `alias k/KEYWORD r/REPRESENTATION` +> Parameters | Description +> -------- | :-------- +> KEYWORD | Specifies the keyword that will be replaced when met in a command +> REPRESENTATION | Specifies the text that will replace the keyword + Examples: * `alias k/pjm r/Project Meeting`
System will interpret subsequent keywords "pjm" as "Project Meeting"
@@ -218,6 +225,10 @@ Add "pjm2" to task list, and not "Project Meeting2"
Unalias a keyword
Format: `unalias KEYWORD` +> Parameters | Description +> -------- | :-------- +> KEYWORD | Specifies the keyword to unaliased + Examples: * `unalias pjm`
Removes the replacement of keyword "pjm" with "Project Meeting"
From e350192fdb9da3b46c3381cc213b3f57c47e02e0 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:18:29 +0800 Subject: [PATCH 14/18] Update UserGuide --- docs/UserGuide.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 936be5fb6d3e..340845333648 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -206,17 +206,17 @@ Format: `alias k/KEYWORD r/REPRESENTATION` > Parameters | Description > -------- | :-------- -> KEYWORD | Specifies the keyword that will be replaced when met in a command +> KEYWORD | Specifies the keyword that will be replaced when met in a command, must be a single word > REPRESENTATION | Specifies the text that will replace the keyword Examples: * `alias k/pjm r/Project Meeting`
System will interpret subsequent keywords "pjm" as "Project Meeting"
`add pjm s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
-Add "Project Meeting" to task list
->Note that only keywords must be a single word by themselves, or they will not be replaced. -The below example shows 'pjm' as part of another word and it is not replaced with its representation. -inside another word +Add "Project Meeting" to task list

+ +> Note that only keywords must be a single word by themselves, or they will not be replaced. +> The below example shows 'pjm' as part of another word and it is not replaced with its representation. `add pjm2 s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
Add "pjm2" to task list, and not "Project Meeting2"
From d4dea140781a7f4132462c0c22a2d3e6f0507df0 Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:20:17 +0800 Subject: [PATCH 15/18] Update UserGuide.md --- docs/UserGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 340845333648..7fc99b055fc9 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -213,11 +213,11 @@ Examples: * `alias k/pjm r/Project Meeting`
System will interpret subsequent keywords "pjm" as "Project Meeting"
`add pjm s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
-Add "Project Meeting" to task list

+Add "Project Meeting" to task list
> Note that only keywords must be a single word by themselves, or they will not be replaced. -> The below example shows 'pjm' as part of another word and it is not replaced with its representation. - `add pjm2 s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
+> The below example shows 'pjm' as part of another word and it is not replaced with its representation.
+* `add pjm2 s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
Add "pjm2" to task list, and not "Project Meeting2"
From c983765d5d1e45f8391b1b1a400f33b0b379c52a Mon Sep 17 00:00:00 2001 From: e0003801 Date: Thu, 27 Oct 2016 18:21:17 +0800 Subject: [PATCH 16/18] Update UserGuide.md --- docs/UserGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 7fc99b055fc9..eefe314f0fd5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -217,6 +217,7 @@ Add "Project Meeting" to task list
> Note that only keywords must be a single word by themselves, or they will not be replaced. > The below example shows 'pjm' as part of another word and it is not replaced with its representation.
+ * `add pjm2 s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
Add "pjm2" to task list, and not "Project Meeting2"
From 2f9dfe4742bc200560f8a2adc6e0d4662582ac72 Mon Sep 17 00:00:00 2001 From: tet54 Date: Fri, 28 Oct 2016 02:52:30 +0800 Subject: [PATCH 17/18] Update docs with tags --- docs/AboutUs.md | 12 +++++++++--- docs/DeveloperGuide.md | 6 ++++++ docs/UserGuide.md | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index f99042269d08..e8817ee0bf71 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -56,10 +56,16 @@ Component SME: UI ----- -#### [Teh Ee Thai](http://github.com/tet54) +#### [Teh Ee Thai](http://github.com/tet54)

**Role**: Developer
-Responsibilities: Integration
-Component SME: Model, Storage +* Components in charge of: - +* Aspects/tools in charge of: Integration +* Features implemented: + * [Mark task](UserGuide.md#mark-a-task-as-done--mark) + * [Unmark task](UserGuide.md#unmark-a-task-as-done--unmark) + * [Undo task](UserGuide.md#undo-the-most-recent-operation--undo) + * [Redo task](UserGuide.md#redo-the-most-recent-undo-operation--redo) +* Code written: [[functional code](../collated/main/A0097627N.md)][[docs](../collated/docs/A0097627N.md)] ----- diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e9dd6f0eaa8e..d985b50905ac 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -288,6 +288,8 @@ b. Require developers to download those libraries manually (this creates extra w ## Appendix A : User Stories +[//]: # (@@author A0097627N) + Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` @@ -313,6 +315,8 @@ Priority | As a ... | I want to ... | So that I can... ## Appendix B : Use Cases +[//]: # (@@author A0097627N) + (For all use cases below, the **System** is the `Savvy Tasker` and the **Actor** is the `user`, unless specified otherwise) #### Use case: Add task @@ -565,6 +569,8 @@ Use case ends. ## Appendix E : Product Survey +[//]: # (@@author A0097627N) + #### Competing product: Google Calendar **Pros:** diff --git a/docs/UserGuide.md b/docs/UserGuide.md index eefe314f0fd5..7aaa71e72095 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -151,7 +151,7 @@ Format: `modify INDEX [t/TASK_NAME] [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/ >
> Overwrites any of the specified fields ('LOCATION', 'DESCRIPTION'...) with the new values -[//]: # (@@author) +[//]: # (@@author A0097627N) #### Mark a task as done : `mark` Marks the task as completed identified by the index number used in the last task listing. Completed task will be remove from the normal list and placed under archived list
From a5e24047c16bf320f335aefcf716eafa6eb36304 Mon Sep 17 00:00:00 2001 From: qhng Date: Fri, 28 Oct 2016 12:13:56 +0800 Subject: [PATCH 18/18] Update collate docs --- collated/docs/A0097627N.md | 377 +++++++++++++++++++++++++++++++++++++ collated/docs/A0139915W.md | 193 +++++++++++++++++++ collated/docs/A0139916U.md | 97 ++++++++++ 3 files changed, 667 insertions(+) create mode 100644 collated/docs/A0097627N.md create mode 100644 collated/docs/A0139915W.md create mode 100644 collated/docs/A0139916U.md diff --git a/collated/docs/A0097627N.md b/collated/docs/A0097627N.md new file mode 100644 index 000000000000..a6220770e2f9 --- /dev/null +++ b/collated/docs/A0097627N.md @@ -0,0 +1,377 @@ +# A0097627N +###### \DeveloperGuide.md +``` md + +Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` + + +Priority | As a ... | I want to ... | So that I can... +-------- | :-------- | :--------- | :----------- +`* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App +`* * *` | new user | view more information about a particular command | learn how to use various commands +`* * *` | user | add a new task | record tasks that need to be done some day +`* * *` | user | update a task description/due date/priority level | make modifications to tasks without having delete and re-add it +`* * *` | user | mark completed tasks as done | remind myself that I have completed a task +`* * *` | user | unmark marked tasks | list a resurfaced task without having to key in the same information again +`* * *` | user | delete a task | get rid of tasks that I no longer care to track +`* * *` | user | sort ongoing tasks by due date or priority | decide what needs to be done soon +`* * *` | user | view the list of ongoing tasks | decide what needs to be done +`* * *` | user | view the list of archived tasks | see what has been done +`* *` | user | find tasks by partial or full task name or date | locate a tasks / similar tasks in case I forget the exact task name I typed +`*` | user | sort tasks by priority level | see the most important tasks and prioritize accordingly +`*` | user | undo most recent command | undo the most recent operation +`*` | user | redo most recent undo command | redo the operation done by the most recent undo action +`*` | advanced user | alias keywords with shorter versions | type a command faster +`*` | advanced user | remove alias of keywords with shorter versions | get rid of shorter version of certain keywords +{More to be added} + +## Appendix B : Use Cases + +``` +###### \DeveloperGuide.md +``` md + +(For all use cases below, the **System** is the `Savvy Tasker` and the **Actor** is the `user`, unless specified otherwise) + +#### Use case: Add task + +**MSS** + +1. Savvy Tasker waits for user command +2. User enters command to add a task according to some parameters
+3. Savvy Tasker adds the task to a list of tasks
+Use case ends. + +**Extensions** + +2a. At least one parameter entered by user is invalid +> 2a1. Savvy Tasker shows an error message and display the expected format.
+> Use case resumes at step 1 + + +2b. START_DATE and END_DATE are different, the RECURRING_TYPE has to be larger than the duration between START_DATE and END_DATE. (e.g. A 3d2n camp cannot be recurring daily but it can be recurring weekly) +> 2b1. Savvy Tasker shows an error message
+> Use case resumes at step 1 + + +2c. START_DATE and END_DATE are different, END_DATE is before START_DATE +> 2c1. Savvy Tasker shows an error message
+> Use case resumes at step 1 + + +2d. START_DATE and END_DATE are the same, END_TIME is before START_TIME +> 2d1. Savvy Tasker shows an error message
+> Use case resumes at step 1 + +#### Use case: List tasks + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to list tasks +3. Savvy Tasker shows a list of tasks
+Use case ends. + +**Extensions** + +3a. The list is empty + +> 3a1. Savvy Tasker shows an error message
+ Use case ends + +#### Use case: Find task + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to find tasks by keyword +3. Savvy Tasker displays the list of tasks that contains the keyword in the name
+Use case ends. + +**Extensions** + +2a. No parameter entered after command word +> Savvy Tasker shows a 'no parameter entered' error message.
+> Use case resumes at step 1 + + +3a. The list is empty +> 2a1. Savvy Tasker shows a 'no task found' error message.
+> Use case ends + + +#### Use case: Modify task + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to modify a certain attribute of a specific task +3. Savvy Tasker modifies the task and saves it in memory
+Use case ends. + +**Extensions** + +1a. The list is empty + +> 1a1. Use case ends + +2a. The given index is invalid + +> 2a1. Savvy Tasker shows an error message
+ Use case resumes at step 3 + +2b. At least one parameter entered by user is invalid + +> 2b1. Savvy Tasker shows an error message and display the expected format
+ Use case resumes at step 3 + +#### Use case: Mark task as done + +**MSS** + +1. Savvy Tasker waits for user command +2. User request to mark specific tasks in the list based on task’s index +3. Savvy Tasker marks the tasks, removes it from the task list, and adds it to the Archived list
+Use case ends. + +**Extensions** + +1a. The list is empty +> 2a1. Savvy Tasker shows a 'no task found' error message.
+> Use case ends + +2a. The given index is invalid +> 3a1. Savvy Tasker shows a 'invalid index' error message
+> Use case resumes at step 1 + +2b. The task is already marked as done +> 3b1. Savvy Tasker shows a 'task already marked' error message.
+> Use case resumes at step 1 + +###Use case: Unmark marked task + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to list archived tasks +3. Savvy Tasker displays a list of archived tasks, sorted by time and date the task has been marked +4. User requests to unmark the specific task in the list based on task’s index +5. Savvy Tasker removes the marked status of the specific task, removes it from the Archived list, and adds it back to the task list
+Use case ends. + +**Extensions** + +2a. The list is empty +> Use case ends + +3a. The given index is invalid +> 3a1. Savvy Tasker shows a 'invalid index' error message
+> Use case resumes at step 1 + + +#### Use case: Delete task + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to list tasks +3. Savvy Tasker shows a list of tasks +4. User requests to delete a specific task in the list +5. Savvy Tasker deletes the task
+Use case ends. + +**Extensions** + +3a. The list is empty + +> Use case ends + +4a. The given index is invalid + +> 4a1. Savvy Tasker shows an error message +> Use case resumes at step 3
+ +###Use case: Alias keyword and use shorten keyword + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to alias a keyword (can be a command or any other frequently used word), with a shorten keyword +3. Savvy Tasker store the shorten keyword associated with the keyword in its database +4. User request a command +4. Savvy Tasker check if the command contain any shorten keyword, if it does, replace the shorten keyword with the associated keyword from its database +5. Savvy Tasker carry out the command
+Use case ends. + +**Extensions** + +2a. The shorten keyword contains only 1 character +> 2a1. Savvy Tasker shows a error message +> Use case resumes at step 1
+ +2b. The shorten keyword has already been associated with other keywords +> 2b1. Savvy Tasker shows a error message and the shorten keyword's original associated keyword +> Use case resumes at step 1
+ +###Use case: Unalias keyword + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to unalias a shorten keyword +3. Savvy Tasker remove the shorten keyword associated with the keyword in its database
+Use case ends. + +**Extensions** + +2a. The shorten keyword could not be found in Savvy Tasker database +> 2a1. Savvy Tasker shows a 'not found' error message +> Use case resumes at step 1
+ +###Use case: Undo previous command + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to undo last executed command +3. Savvy Tasker undos the last executed command to return to the state before that command was executed
+Use case ends. + +**Extensions** + +2a. There is no previously executed command to undo +> 2a1. Savvy Tasker shows a 'cannot undo' error message
+> Use case ends + +###Use case: Redo most recently undone command + +**MSS** + +1. Savvy Tasker waits for user command +2. User requests to redo last undone command +3. Savvy Tasker re executes the executed command that was last undone
+Use case ends. + +**Extensions** + +2a. There are no executed undo commands to redo +> 2a1. Savvy Tasker shows a 'cannot redo' error message
+> Use case ends + +## Appendix C : Non Functional Requirements + +1. Should work on any [mainstream OS](#mainstream-os) as long as it has Java `1.8.0_60` or higher installed. +2. Should be able to hold up to 1000 tasks. +3. Should come with automated unit tests and open source code. +4. Should favor DOS style commands over Unix-style commands. +6. Should work stand-alone and should not be a plug-in to another software. +7. Should work without internet connection. +8. Should store data in text file. +9. Should work without requiring an installer. + +{More to be added} + +## Appendix D : Glossary + +##### Mainstream OS + +> Windows, Linux, Unix, OS-X + +##### Private contact detail + +> A contact detail that is not meant to be shared with others + +## Appendix E : Product Survey + +``` +###### \DeveloperGuide.md +``` md + +#### Competing product: Google Calendar + +**Pros:** + +1. Able to color-code different events +2. Able to set reminders and task/events on repeat +3. Able to add description such as location, remarks and people +4. Able to sync on different devices +5. Able to share calendar +6. Able to undo previous action +7. Able to drag and drop task/events to another date/timing
+ +**Cons:** + +1. Unable to check(tick) completed event +2. Do not have a list of archived task +3. Does not cater for floating task
+ +#### Competing product: Todo + +**Pros:** + +1. Auto prioritization +2. Unlimited contexts +3. Reminders +4. Auto sync with iCal, Toodledo, Outlook, Todo Online
+ +#### Competing product: Remember The Milk + +**Pros:** + +1. Unlimited contexts +2. Reminders +3. Calendar tasks +4. Auto sync with Gmail (Firefox plugin), Google Calendar, Twitter (direct integration), Atom/RSS, IM (feed) +5. Email notifications, autoprocess +6. API
+ +``` +###### \UserGuide.md +``` md + +#### Mark a task as done : `mark` +Marks the task as completed identified by the index number used in the last task listing. Completed task will be remove from the normal list and placed under archived list
+Format: `mark INDEX [MORE_INDEX]` + +> Selects the task and marks the task as done at the specified `INDEX`. + The index refers to the index number shown in the most recent listing.
+ The index **must be a positive integer** 1, 2, 3, ... + +Examples: +* `list`
+ `mark 2`
+ Marks the 2nd task in the task book as completed. +* `find CS2103`
+ `mark 1`
+ Marks the 1st task in the results of the `find` command as completed. + +#### Unmark a task as done : `unmark` +Unmarks the task identified by the index number used in the last task listing.
+Format: `Unmark INDEX [MORE_INDEX]` + +> Selects the task and marks the task as done at the specified `INDEX`. + The index refers to the index number shown in the most recent listing.
+ The index **must be a positive integer** 1, 2, 3, ... + +Examples: +* `list`
+ `unmark 2`
+ Unmarks the 2nd task in the task book as done. +* `find CS2103`
+ `unmark 1`
+ Unmarks the 1st task in the results of the `find` command as done. + +#### Undo the most recent operation : `undo` +Undo the most recent command that was executed.
+Format: `undo` + +#### Redo the most recent undo operation : `redo` +Redo the most recent command that was executed by the undo.
+Format: `redo` +>Redo is unavailable if the most recent command is not undo + +#### Clearing all entries : `clear` +Clears all entries from the Savvy Task.
+Format: `clear` + +``` diff --git a/collated/docs/A0139915W.md b/collated/docs/A0139915W.md new file mode 100644 index 000000000000..5ab0becbc7be --- /dev/null +++ b/collated/docs/A0139915W.md @@ -0,0 +1,193 @@ +# A0139915W +###### \DeveloperGuide.md +``` md + + + +>Note how the `Model` simply raises a `SavvyTaskerChangedEvent` when the Savvy Tasker data are changed, + instead of asking the `Storage` to save the updates to the hard disk. + +The diagram below shows how the `EventsCenter` reacts to that event, which eventually results in the updates +being saved to the hard disk and the status bar of the UI being updated to reflect the 'Last Updated' time.
+ + +> Note how the event is propagated through the `EventsCenter` to the `Storage` and `UI` without `Model` having + to be coupled to either of them. This is an example of how this Event Driven approach helps us reduce direct + coupling between components. + +The sections below give more details of each component. + +``` +###### \DeveloperGuide.md +``` md + +### Model component + +
+ +**API** : [`Model.java`](../src/main/java/seedu/savvytasker/model/Model.java) + +The `Model`, +* stores a `UserPref` object that represents the user's preferences. +* stores the Savvy Tasker data. +* exposes a `UnmodifiableObservableList` that can be 'observed' e.g. the UI can be bound to this list + so that the UI automatically updates when the data in the list change. +* does not depend on any of the other three components. + +### Storage component + +
+ +**API** : [`Storage.java`](../src/main/java/seedu/savvytasker/storage/Storage.java) + +The `Storage` component, +* can save `UserPref` objects in json format and read it back. +* can save the Saavy Tasker data in xml format and read it back. + +``` +###### \DeveloperGuide.md +``` md + +#### Competing product: WunderList + +**Pros:** + +1. Allows creation of subtasks within a task. +2. Allows local storage, in case there isn't internet access. +3. Can sync across devices by signing in. +4. Allows the grouping of tasks as a list and even grouping into folders. +5. Can invite other person(s), sharing the tasks with them. + +**Cons:** + +1. Doesn't allow adding of tasks through the command line (one-shot). +2. Cannot block slots. +3. No calendar view. +``` +###### \UserGuide.md +``` md + +#### Adding a task: `add` +Adds a task to Savvy Tasker.
+Format: `add TASK_NAME [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/PRIORITY_LEVEL] [r/RECURRING_TYPE] [n/NUMBER_OF_RECURRENCE] [c/CATEGORY] [d/DESCRIPTION]` + +> Parameters | Description +> -------- | :-------- +> TASK_NAME | `Mandatory` Specifies the name of the task. +> START_DATE (See [DATE](#date)) | `Optional` Specifies the starting date and time of the task. +> END_DATE (See [DATE](#date)) | `Optional` Specifies the ending date and time of the task. +> LOCATION | `Optional` Specifies the location where the task happens. +> PRIORITY_LEVEL | `Optional` Specifies the priority level of the task.
`Accepts` values `low`, `medium`, `high`
`Defaults` to `???` +> RECURRING_TYPE | `Optional` Specifies the recurring type of the task.
`Accepts` values `none`, `daily`, `weekly`, `monthly`, `yearly`
`Defaults` to `none` +> NUMBER_OF_RECURRENCE | `Optional` Specifies the number of times the task recurrs. A value of 0 specifies a never-ending recurrence.
`Defaults` to `0`
`Ignored` if RECURRING_TYPE is `none` +> CATEGORY | `Optional` Specifies a custom category for the task. This can be used for keeping track of similar tasks. +> DESCRIPTION | `Optional` Describes the task. + +##### Date + +> If only the DATE is specified, the TIME defaults to starting at 12am or ending at 11:59pm.
If only the TIME is specified, the DATE defaults to today.

If only `START_DATE` is supplied, the task will be a 1-day event starting from the specified `START_DATE` and ending on the same day at 11:59pm.
If only `END_DATE` is supplied, the task will start today at 12am.

The date and time can be entered in a formal format like 17-03-2016, or a natural format like next wednesday, 2pm. The formal format follows the system's settings for whether mm-dd-yyyy or dd-mm-yyyy is used. + +Examples: +* `add Project Meeting s/05-10-2016 2pm e/6pm r/daily n/2 c/CS2103 d/Discuss about roles and milestones`
+ Add task named, Project Meeting, under CS2103 category. The task is schedule to take place on 5th and 6th of October 2016 from 2pm to 6pm each day. +* `add NUSSU Leadership Camp s/05-10-2016 2pm e/08-10-2016 6pm c/NUSSU` + Add task named, NUSSU Leadership Camp, under NUSSU category. The 4 day 3 night is schedule to take place from 5th October, 2pm to 8th of October 2016, 6pm. + +#### Listing all tasks: `list` +Shows a list of all tasks in Savvy Tasker
+Format: `list [t/LIST_TYPE]` + +> Parameters | Description +> -------- | :-------- +> LIST_TYPE | `Optional` Specifies the name of the task.
`Accepts` values `DueDate`, `PriorityLevel`, `Archived`
`Defaults` to `DueDate` + +`LIST_TYPE` Explanation: +* `DueDate`
+ Tasks are sorted according to END_DATE beginning with the earliest.
+ If no END_DATE is specified for the task (floating tasks), they will be sorted to bottom of list.
+* `PriorityLevel`
+ Tasks are sorted according to priority level beginning with the highest.
+* `Archived`
+ Tasks that have been [marked](#mark-a-task-as-done--mark) are listed. They are sorted according to the time of creation of the task.
+ +#### Finding all task containing any keyword in its name: `find` +Finds tasks whose names contain any of the given keywords.
+Format: `find [t/FIND_TYPE] KEYWORD [MORE_KEYWORDS...]` + +> Parameters | Description +> -------- | :-------- +> FIND_TYPE | `Optional` Specifies the name of the task.
`Accepts` values `Partial`, `Full`, `Exact`
`Defaults` to `Partial` + +> Only the TASK_NAME is searched.
+> The search is case insensitive. e.g `task` will match `Task`
+> The order of the keywords does not matter for `Partial` and `Full`. e.g. `project meeting` will match `meeting project`
+> Tasks matching at least one keyword will be returned, except for the case of `Exact`.
+ +`FIND_TYPE` Explanation: +* `Partial`
+ Partial keywords will be matched e.g. `task` will match `2103 tasks`
+* `Full`
+ Only full keywords will be matched e.g. `task` will not match `2103 tasks` but matches `CS2103 Single Task`
+* `Exact`
+ The exact set of keywords will be matched e.g. `Project Meeting` will match `Project Meeting` but not `2103 Project Meeting`
+ +Examples: +* `find t/Full Project meeting`
+ Returns any task containing names `Project` or `Meeting`, but not `meet` +* `find t/Exact Project meeting`
+ Returns any task containing names `Project Meeting` exactly +* `find meet CS2103`
+ Returns any task containing names `meet`, or `CS2103`. This matches `meeting` and any other words containing `meet` or `CS2103` + +#### Deleting a task : `delete` +Deletes the specified task from Savvy Tasker.
+Format: `delete INDEX [MORE_INDEX...]` + +> Parameters | Description +> -------- | :-------- +> INDEX | `Mandatory` Specifies the index of the listing shown to modify.
The index **must be a positive integer** 1, 2, 3, ... +> MORE_INDEX... | `Optional` Same as INDEX. +> Deletes the task at the specified `INDEX` and `[MORE_INDEX...]`. + +Examples: +* `list`
+ `delete 2 3 5`
+ Deletes the 2nd, 3rd and 5th task listed by Savvy Tasker. +* `find CS1010`
+ `delete 1`
+ Deletes the 1st task in the results of the `find` command. + +#### Modifies a task : `modify` +Modifies the task identified by the index number used in the last task listing.
+Format: `modify INDEX [t/TASK_NAME] [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/PRIORITY_LEVEL] [r/RECURRING_TYPE] [n/NUMBER_OF_RECURRENCE] [c/CATEGORY] [d/DESCRIPTION]` + +> Parameters | Description +> -------- | :-------- +> INDEX | `Mandatory` Specifies the index of the listing shown to modify.
The index **must be a positive integer** 1, 2, 3, ... +> TASK_NAME
START_DATE
END_DATE
LOCATION
PRIORITY_LEVEL
RECURRING_TYPE
NUMBER_OF_RECURRENCE
CATEGORY
DESCRIPTION | Similar to [Adding a task](#adding-a-task-add) +>
+> Overwrites any of the specified fields ('LOCATION', 'DESCRIPTION'...) with the new values + +``` +###### \UserGuide.md +``` md + +## Command Summary + +Command | Format +-------- | :-------- +[Add](#adding-a-task-add) | `add TASK_NAME [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/PRIORITY_LEVEL] [r/RECURRING_TYPE] [n/NUMBER_OF_RECURRENCE] [c/CATEGORY] [d/DESCRIPTION]`
Example: `add Weekly Milestone s/Thurs r/weekly n/3 l/COM1 c/Meeting` +[Alias](#alias-a-keyword--alias) | `alias k/KEYWORD s/SHORT_KEYWORD`
Example: `alias k/main success scenario s/mss` +[Clear](#clearing-all-entries--clear) | `clear` +[Delete](#deleting-a-task--delete) | `delete INDEX [MORE_INDEX]`
Example: `delete 1 2 3` +[Exit](#exiting-the-program--exit) | `exit` +[Find](#finding-all-task-containing-any-keyword-in-its-name-find) | `find [t/FIND_TYPE] KEYWORD [MORE_KEYWORDS]`
Example: `find t/exact CS2103 Meeting` +[List](#listing-all-tasks-list) | `list [t/LIST_TYPE]`
Example: `list t/archived` +[Help](#viewing-help--help) | `help` +[Modify](#modifies-a-task--modify) | `modify INDEX [t/TASK_NAME] [s/START_DATE] [e/END_DATE] [l/LOCATION] [p/PRIORITY_LEVEL] [r/RECURRING_TYPE] [n/NUMBER_OF_RECURRENCE] [c/CATEGORY] [d/DESCRIPTION]`
Example: `modify 2 t/Wednesday Weekly Milestone s/wed d/Project Meeting and Finalization` +[Mark](#mark-a-task-as-done--mark) | `mark INDEX [MORE_INDEX]`
Example: `mark 1 2 3` +[Unmark](#unmark-a-task-as-done--unmark) | `unmark INDEX [MORE_INDEX]`
Example: `unmark 1 2 3` +[Undo](#undo-the-most-recent-operation--undo) | `undo` +[Redo](#redo-the-most-recent-undo-operation--redo) | `redo` +[Unalias](#unalias-a-keyword--unalias) | `unalias s/SHORT_KEYWORD`
Example: `unalias s/mss` +``` diff --git a/collated/docs/A0139916U.md b/collated/docs/A0139916U.md new file mode 100644 index 000000000000..79fcc57373bc --- /dev/null +++ b/collated/docs/A0139916U.md @@ -0,0 +1,97 @@ +# A0139916U +###### \DeveloperGuide.md +``` md + +### Logic component + +
+ +**API** : [`Logic.java`](../src/main/java/seedu/savvytasker/logic/Logic.java) + +1. `Logic` uses the `Parser` class to parse the user command. +2. This results in a `Command` object which is executed by the `LogicManager`. +3. The command execution can affect the `Model` (e.g. adding a person) and/or raise events. +4. The result of the command execution is encapsulated as a `CommandResult` object which is passed back to the `Ui`. + +Given below is the Sequence Diagram for interactions within the `Logic` component for the `execute("delete 1")` + API call.
+
+ +### Parser component + +
+ +**API** : [`MasterParser.java`](../src/main/java/seedu/savvytasker/logic/parser/MasterParser.java) + +The `Parser` component, +* can parse text input into commands. +* supports adding and removing of keyword aliases + +``` +###### \DeveloperGuide.md +``` md + +#### Competing product: MIUI Calendar + +**Pros:** + +1. Able to sync to different devices +2. Able to set privacy to private or public +3. Able to set 2 reminders +4. Able to set reminder as a notification popup or an alarm + +**Cons:** + +1. Unable to check(tick) completed event +2. Does not cater for tasks, only events + + +``` +###### \UserGuide.md +``` md + +#### Alias a keyword : `alias` +Alias a keyword to represent another text.
+Format: `alias k/KEYWORD r/REPRESENTATION` + +> Parameters | Description +> -------- | :-------- +> KEYWORD | Specifies the keyword that will be replaced when met in a command, must be a single word +> REPRESENTATION | Specifies the text that will replace the keyword + +Examples: +* `alias k/pjm r/Project Meeting`
+System will interpret subsequent keywords "pjm" as "Project Meeting"
+ `add pjm s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
+Add "Project Meeting" to task list
+ +> Note that only keywords must be a single word by themselves, or they will not be replaced. +> The below example shows 'pjm' as part of another word and it is not replaced with its representation.
+ +* `add pjm2 s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
+Add "pjm2" to task list, and not "Project Meeting2"
+ + +#### Unalias a keyword : `unalias` +Unalias a keyword
+Format: `unalias KEYWORD` + +> Parameters | Description +> -------- | :-------- +> KEYWORD | Specifies the keyword to unaliased + +Examples: +* `unalias pjm`
+Removes the replacement of keyword "pjm" with "Project Meeting"
+ `add pjm s/05-10-2016 st/14:00 et/18:00 r/daily n/2 c/CS2103`
+Add task named "pjm" to task list + + +## FAQ + +**Q**: How do I transfer my data to another Computer?
+**A**: Install the app in the other computer and overwrite the empty data file it creates with + the file that contains the data of your previous Savvy Tasker folder. + + +```