Skip to content

Commit

Permalink
Merge ac64263 into 332d47c
Browse files Browse the repository at this point in the history
  • Loading branch information
INCENDE committed Oct 29, 2016
2 parents 332d47c + ac64263 commit f73f277
Show file tree
Hide file tree
Showing 5 changed files with 218 additions and 127 deletions.
121 changes: 82 additions & 39 deletions docs/DeveloperGuide.md
Expand Up @@ -29,6 +29,9 @@ Agendum is a task manager for busy users to manage their schedules and tasks via
This guide describes the design and implementation of Agendum. It will help developers (like you) understand how Agendum works and how to further contribute to its development. We have organized this guide in a top-down manner so that you can understand the big picture before moving on to the more detailed sections. Each sub-section is mostly self-contained to provide ease of reference.


 


## Setting up

### Prerequisites
Expand Down Expand Up @@ -283,6 +286,7 @@ You can alter certain properties of our Agendum application (e.g. logging level)

 


## Testing

You can find all the test files in the `./src/test/java` folder.
Expand Down Expand Up @@ -371,37 +375,41 @@ Agendum depends on third-party libraries, such as the
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
`* * *` | User | Add a task | Keep track of tasks which I need to do
`* * *` | User | Delete a task/multiple tasks | Remove tasks that I no longer need to keep track of
`* * *` | User | Edit a task name | Update task details to reflect the latest changes
`* * *` | User | View all my tasks | Have a quick and clear reference of everything I need to do
`* * *` | User | Mark a task/multiple tasks as completed | Know that it is completed without deleting it, distinguish between completed and uncompleted tasks
`* * *` | User | Unmark a task from completed | Update the status of my task
`* * *` | User | See usage instructions | View more information about the features and commands available
`* * *` | User | Add a task | Keep track of tasks which I need work on
`* * *` | User | Add a task with start and end time | Keep track of events that need to be completed within a certain time-frame
`* * *` | User | Add a task with a deadline | Keep track of a task to be done by a specific date and time
`* * *` | User | Rename a task | update or enhance the description of a task
`* * *` | User | Edit or remove start and end time of tasks | Reschedule events with defined start and end dates
`* * *` | User | Edit or remove deadlines of tasks | Reschedule tasks which must be done by a certain date and time
`* * *` | User | Mark task(s) as completed | Keep record of tasks that have been completed without deleting, to distinguish between completed and uncompleted tasks
`* * *` | User | Unmark task(s) from completed | Update the status of my task(s) if there are new changes or I want to continue working on a recently completed task(s).
`* * *` | User | Delete task(s) | Remove task(s) that will never get done or are no longer relevant
`* * *` | User | Undo my last action(s) | Easily correct any accidental mistakes in the last command(s)
`* * *` | User | Search based on task name | Find a task without going through the entire list if I remember a few key words
`* * *` | User | Specify my data storage location | Easily locate the raw text file for editing and sync the file to a cloud storage service
`* * *` | User | Clear all existing tasks | Easily start afresh with a new task list
`* * *` | User | Search based on task name | Find a task without going through the entire list using a few key words.
`* * *` | User | View all my tasks | Return to the default view of task lists after I am done searching for tasks
`* * *` | User | Specify my data storage location | Easily relocate the raw file for editing and/or sync the file to a Cloud Storage service
`* * *` | User | Load from a file | Load Agendum’s task list from a certain location or a Cloud Storage service
`* * *` | User | Exit the application by typing a command | Close the app easily
`* * *` | Busy user | Specify start and end time when creating tasks | Keep track of events with defined start and end dates
`* * *` | Busy User | Specify deadlines when creating tasks | Keep track of tasks which must be done by a certain and date and time
`* * *` | Busy User | Edit and remove start and end time of tasks | Update events with defined start and end dates
`* * *` | Busy User | Edit and remove deadlines of tasks | Update tasks which must be done by a certain and date and time
`* *` | User | Sort tasks by alphabetical order and date | Organise and easily locate tasks

`* *` | User | Filter overdue tasks and upcoming tasks (due within a week) | Decide on what needs to be done soon
`* *` | User | Filter tasks based on whether they are marked/unmarked | View my tasks grouped by their state of completion. Review my completed tasks and decide on what I should do next
`* *` | User | Filter tasks based on marked/unmarked | Review my completed tasks and decide on what I should do next
`* *` | User | See the count/statistics for upcoming/ overdue and pending tasks | Know how many tasks I need to do

`*` | User | Sort tasks by alphabetical order and date | Organise and easily locate tasks
`*` | User | Clear the command I am typing with a key | Enter a new command without having to backspace the entire command line
`*` | Advanced user | Specify my own short-hand alias commands | Enter commands faster
`*` | Advanced user | Remove or edit the short-hand alias commands | Update to use more suitable command aliases
`*` | Advanced user | Specify my own alias commands | Enter commands faster or change the name of a command to suit my needs
`*` | Advanced user | Remove the alias commands | Update to use another command aliases
`*` | Advanced user | Scroll through my past few commands | Check what I have done and redo actions easily

`* Unlikely` | Google calendar user | Sync my tasks with Google calendar | Keep track of my tasks online
`* Unlikely` | User | Add multiple time slots for a task | “Block” multiple time slots when the exact timing of a task is certain
`* Unlikely` | User | Add tags for my tasks | Group tasks together and organise my task list
`* Unlikely` | User | Search based on tags | Find all the tasks of a similar nature
`* Unlikely` | User | Add/Remove tags for existing tasks | Update the grouping of tasks
`* Unlikely` | User | Be notified of deadline/time clashes | Resolve these conflicts manually
`* Unlikely` | User | Key in emojis/symbols and characters from other languages e.g. Mandarin | Capture information in other languages
`* Unlikely` | User | Clear all existing tasks | Easily start afresh with a new task list
`* Unlikely` | Advanced User | Import tasks from an existing text file | Add multiple tasks efficiently without relying on multiple commands
`* Unlikely` | Advanced User | Save a backup of the application in a custom file | Restore it any time at a later date
`* Unlikely` | Busy user | Add recurring events or tasks | Keep the same tasks in my task list without adding them manually
Expand Down Expand Up @@ -559,13 +567,32 @@ Priority | As a ... | I want to ... | So that I can...
> 3a1. System shows an error message (“Please select a task on the list with a valid index”) <br>
> Use case resumes at step 2
### Use case 07 - Add short hand commands
### Use case 07 - Unmark a task

**MSS**:

1. Actor requests to unmark a task followed by its index
2. System updates the task
3. System shows a feedback message (“Task `index` has been unmarked”) and moves the task to the correct list.
4. Use case ends

**Extensions**

1a. The list is empty
> Use case ends
2a. The given index is invalid
> 2a1. System shows an error message (“Please select a task on the list with a valid index”) <br>
> Use case ends

### Use case 08 - Add alias commands

**MSS**

1. Actor enters a alias command and specify the name and new alias name of the command
2. System alias the command
3. System shows a feedback message (“The command `original-command` can now be keyed in as <new-command>”)
3. System shows a feedback message (“The command `original-command` can now be keyed in as `alias-command`”)
4. Use case ends.

**Extensions**
Expand All @@ -577,33 +604,39 @@ Priority | As a ... | I want to ... | So that I can...
1b. The new alias name is already reserved/used for other commands

> 1b1. System shows an error message (The name is already in use) <br>
> 1b1. System shows an error message ("The alias `alias-command` is already in use") <br>
> Use case ends
*a. At any time, Actor choose to exit System

> *a1. System displays a goodbye message <br>
> *a2. System closes the program
### Use case 09 - Remove alias commands

**MSS**

1. Actor enters the unalias command followed by `alias-command`
2. System removes the alias for the command
3. System shows a feedback message ("The alias `alias-command` for `original-command` has been removed.")
4. Use case ends.

*b. At any time, Actor enters a invalid command
**Extensions**

> *b1. System gives an error message (“We do not understand the command: `invalid-command`”)<br>
> *b2. System displays a short list of valid commands
1a. There is no existing alias
> 1a1. System shows an error message (“There is no such existing alias”) <br>
> Use case ends

### Use case 08 - Specify data storage location
### Use case 10 - Specify data storage location

**MSS**

1. Actor enters store command followed by a path to file
2. System updates data storage location to the specified path to file
3. System shows a feedback message ("New save location: `path-to-file`")
4. Use case ends.
3. System saves task list to the new data storage location
4. System shows a feedback message ("New save location: `path-to-file`")
5. Use case ends.

**Extensions**

1a. Path to file is input as 'default'

> 1a1. System updates data storage location to default <br>
> 1a2. System shows a feedback message ("Save location set to default: `path-to-file`") <br>
> Use case ends
Expand All @@ -612,14 +645,16 @@ Priority | As a ... | I want to ... | So that I can...
> 1b1. System shows an error message ("The specified file exists; would you like to use LOAD instead?") <br>
> Use case ends
1c. Path to file is invalid

> 1c1. System shows an error message ("The specified path to file is invalid.") <br>
1c. Path to file is in the wrong format
> 1c1. System shows an error message ("The specified path is in the wrong format. Example: store agendum/todolist.xml") <br>
> Use case ends
1d. Path to file is not accessible
> 1d1. System shows an error message ("The specified location is inaccessible; try running Agendum as administrator.") <br>
> Use case ends

### Use case 09 - Load from data file
### Use case 11 - Load from data file

**MSS**

Expand All @@ -633,12 +668,14 @@ Priority | As a ... | I want to ... | So that I can...
**Extensions**

1a. Path to file is invalid
> 1a1. System shows an error message ("The specified path to file is invalid: path-to-file") <br>
> Use case ends
> 1a1. System shows an error message ("The specified path to file is invalid.") <br>
2a. File does not exist
> 1a1. System shows an error message ("The specified file does not exist: path-to-file") <br>
> Use case ends
3a. File is in the wrong format

> 3a1. System shows an error message ("File is in the wrong format.")<br>
> Use case ends
Expand All @@ -648,21 +685,27 @@ Priority | As a ... | I want to ... | So that I can...

## 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.
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 800 tasks in total (including completed tasks).
3. Should come with automated unit tests.
4. Should use a Continuous Integration server for real time status of master’s health.
5. Should be kept open source code.
6. Should favour DOS style commands over Unix-style commands.
7. Should adopt an object oriented design.
8. Should not violate any copyrights.
9. Should have a response time of less than 1 second, for every action performed.
9. Should have a response time of less than 1 second for every action performed.
10. Should work offline without an internet connection.
11. Should work as a standalone application.
12. Should not use relational databases to store data.
13. Should store data in an editable text file.
14. Should not require an installer.
15. Should not use paid libraries and frameworks.
16. Should be a free software.
17. Should be easily transferrable between devices; only 1 folder needs to be transferred.
18. Should have documentation that matches the source code
19. Should not have unhandled exceptions from user input
20. Should be installable without assistance other than the user guide.
21. Should have understandable code such that new members can start working on the project within 1 week.


&nbsp;
Expand Down

0 comments on commit f73f277

Please sign in to comment.