forked from nus-cs2103-AY1718S1/addressbook-level4-old
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #136 from Esilocke/1.5rcUGDG
[v1.5rc][Docs] Portfolio page + Update DG
- Loading branch information
Showing
3 changed files
with
201 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
= Kelvin Lin - Project Portfolio | ||
ifdef::env-github,env-browser[:outfilesuffix: .adoc] | ||
:imagesDir: ../images | ||
:stylesDir: ../stylesheets | ||
|
||
== Project: AddressBook - Level 4 | ||
AddressBook - Level 4 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 6 kLoC. | ||
|
||
*Code contributed*: [https://github.com/CS2103AUG2017-W09-B2/main/blob/master/collated/main/Esilocke.md[Functional code]] [https://github.com/CS2103AUG2017-W09-B2/main/blob/master/collated/test/Esilocke.md[Test code]] | ||
|
||
=== Enhancement Added: Edit Tag | ||
|
||
==== External behavior | ||
|
||
--- | ||
#Start of Extract [from: User Guide]# | ||
|
||
include::../UserGuide.adoc[tag=edittag] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
==== Justification | ||
|
||
The user may find a need to change the name of a particular name. + | ||
In the context of the target user, suppose that a user wishes to change the tag `CS2103Groupmates` to `friends`, after he has completed the module. + | ||
The user would need to delete the tag from all users who are tagged with `CS2103Groupmates`, and add the tag `friends` to them one-by-one. `edittag` thus aims to make this process faster by allowing users to rename all instances of the tag from the address book. | ||
|
||
==== Implementation | ||
|
||
--- | ||
#Start of Extract [from: Developer Guide]# | ||
|
||
include::../DeveloperGuide.adoc[tag=edittag] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
=== Enhancement Added: Optional Data Input | ||
|
||
==== External behavior | ||
|
||
--- | ||
|
||
Optional Data Input allows tasks and persons to have only one compulsory field, the name. All other fields in a person or task can be left unspecified, allowing for a greater range of inputs. | ||
|
||
--- | ||
|
||
==== Justification | ||
|
||
We may not always have the opportunity to have contacts or tasks with complete information. + | ||
Some contacts may not have an address, or email address, while some tasks may not have a deadline, or require a description. Without Optional Data Input, the user would need to come up with random placeholder values for each prefix, which would greatly hinder user experience as the user would need to type in unnecessary values to satisfy the command format. + | ||
Allowing optional data input thus lifts the restriction of making every field compulsory, and thus allows users to fill in a wider range of input. | ||
|
||
==== Implementation | ||
|
||
--- | ||
#Start of Extract [from: Developer Guide]# | ||
|
||
include::../DeveloperGuide.adoc[tag=optional] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
=== Enhancement Added: Tasks Management | ||
|
||
==== External behavior | ||
|
||
--- | ||
#Start of Extract [from: User Guide]# | ||
|
||
include::../UserGuide.adoc[tag=task] | ||
include::../UserGuide.adoc[tag=setstate] | ||
include::../UserGuide.adoc[tag=assignDismiss] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
==== Justification | ||
|
||
Our intended target audience are primarily NUS students, who are working on projects. In addition to managing their contact details, allowing users to manage their tasks would also greatly improve their user experience, as they would not need to keep track of their project deadlines separately. | ||
|
||
|
||
==== Implementation | ||
|
||
--- | ||
#Start of Extract [from: Developer Guide]# | ||
|
||
include::../DeveloperGuide.adoc[tag=task] | ||
|
||
#End of Extract# | ||
|
||
=== Assign and Dismiss Commands | ||
|
||
The `assign` and `dismiss` command allows you to assign contacts to and from your tasks, thus aiding coordination and collaboration. + | ||
The Assignees class stores information related to who is assigned to a particular task through maintaining an internal ArrayList that keeps track of all the indexes of the people who are assigned to the task. + | ||
|
||
The indexes stored in the Assignees class *refer to the index of the person in the UniquePersonList, not the visible index shown to the user in the UI*. This means that the indexes will not change even if the list shown in the UI changes, such as after a `find` operation. + | ||
For example, given the below list of persons: | ||
|
||
0. First person | ||
1. Second person | ||
2. Third person | ||
3. Fourth person | ||
4. Fifth person | ||
5. Sixth person | ||
|
||
After a `find` operation, the following list of persons is shown to the user: + | ||
|
||
1. Second person | ||
2. Fourth person | ||
3. Fifth person | ||
|
||
When you call `assign 1 2 to/1`, while the first and second persons in the visible list will be assigned to the first Task, in this case the "Second person" and "Fourth person", internally the assignee list contains the following values: + | ||
|
||
[source, java] | ||
assignedList = {1, 3} | ||
|
||
The indexes 1 and 3 refer to the zero-based index of the "Second person" and "Fourth person" in the complete list. | ||
|
||
==== Design Considerations | ||
|
||
**Aspect:** Storage of assigned persons in the Assignee class + | ||
**Alternative 1 (current choice):** Store the Indexes of the persons only + | ||
**Pros:** The assigned persons will only need to be retrieved on a per-need basis, rather than residing in the Assignee class all the time, thus making storage simpler + | ||
**Cons:** UniquePersonList will be coupled to Tasks, as Tasks will need to retrieve information from the UniquePersonList in order to . + | ||
**Alternative 2:** Store the whole person in the Assignees class + | ||
**Pros:** The Assignees class will not need to depend on the UniquePersonList as its internal list is independent from that of the UniquePersonList + | ||
**Cons:** Repetition of information is incurred in the storage file, as the same person can appear multiple times if he is assigned to multiple tasks. This will increase the size of the storage file, and make read-write operations slow. + | ||
|
||
--- | ||
|
||
=== Enhancement Proposed: Add automatic reminders for upcoming tasks | ||
|
||
==== External behavior | ||
|
||
--- | ||
#Start of Extract [from: User Guide]# | ||
|
||
include::../UserGuide.adoc[tag=reminder] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
==== Justification | ||
|
||
When a user has many tasks, they might wish to see which tasks are due, or already past their deadlines. While the user could do this indirectly via sorting the tasks by their deadlines, having the application remind the user of the number of tasks upcoming would serve as an alternative. | ||
|
||
==== Implementation | ||
|
||
--- | ||
#Start of Extract [from: Developer Guide]# | ||
|
||
include::../DeveloperGuide.adoc[tag=reminder] | ||
|
||
#End of Extract# | ||
|
||
--- | ||
|
||
=== Other contributions | ||
|
||
* Conducted internal rigorous Acceptance testing (Link to Issues found) | ||
* Conducted Acceptance Testing for other teams [https://github.com/CS2103AUG2017-F09-B1/main/issues/83[F09-B1]] [https://github.com/CS2103AUG2017-F09-B1/main/issues/82[F09-B1]] |