Overview
Naggy Joel is a desktop application used by University students to manage social life. The user interacts with it using a CLI, and it has a GUI created with JavaFX.
It is an application that allows users to manage all aspects of their social life, ranging from your different social circles and contacts, to events, all without compromising on academic life.
Summary of contributions
Major enhancement:
-
Added the ability to add/edit/delete note commands for each contact
-
What it does: Allows the user to add multiple notes, edit the added notes, or delete the added notes.
-
Justification: This feature improves the product significantly because a user can add in additional information to a contact that they wish to remember/ is deemed important.
-
Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives.
-
Credits: {reused the original RemarkCommand}
-
-
Added the ability to add/edit/delete note commands for each restaurant
-
What it does: Allows the user to add multiple notes, edit the added notes, or delete the added notes.
-
Justification: This feature improves the product significantly because a user can add additional information to a restaurant in order to keep track of the dishes' reviews.
-
Highlights: Each restaurant has 3 food notes that can be added, edited, or deleted. Multiple addition/deletion of notes require a detailed validity check of the command since the inputs are dependent.
-
Credits: {referenced from RemarkCommand}
-
-
Added the ability to retrieve a single particular contact.
-
What it does: This allows the user to view the information of a particular contact in full detail.
-
Justification: As we added in more fields to a person in the Address Book, we cut down the information displayed on the Address Book list command. Thus, this command allows the user to view the rest of the information.
-
Highlights:
-
This enhancement requires the understanding of how the filtering of the Address Book contacts are done, and to display it on the application.
-
Independent filtering is required. To retrieve a single contact information on a third display panel, the filtering of the Address Book contacts should not affect the original contact list on the second panel.
-
-
Minor enhancement:
-
Added the ability to sort assignments
-
What it does: This allows the user to sort the assignments by deadline or estimated number of hours to be completed, or by the assignment’s title in alphabetical order.
-
Justification: As our application allows user to keep track of the assignments that they have to complete, providing a sorting feature allows for prioritisation of assignments based on the criteria (deadline/time needed) the user prefers.
-
Highlights: Uncompleted assignments, assignments with the most recent deadline and take a longer time to complete will be listed first.
-
-
Ensure that the filtered search results remains after editing of contacts/restaurants
-
What it does: After a user enters
(ab)find
or(rt)find
and wish to edit information of the contacts/restaurants in this search result, the filtered search result will still remain on the second panel even with the edits. -
Justification: This helps to complement the commands and allows the user to have the option to return to the full list of contacts/remain the filtered search results after any edits.
-
-
Code contributed: [Summary of code contributions]
-
Other contributions:
-
Project management:
-
Enhancements to existing features:
-
Documentation:
-
Contributed to the User Guide and Developer Guide of this project
-
-
Community:
-
Reported bugs and suggestions for other teams in the module (PED)
-
-
Team-based Contributions:
-
Reviewed PRs, provided suggestions for my teammates and comments to improve/clarify (Reviews)
-
Created PRs for approvals (Pull requests)
-
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Store additional information about contacts using the Note Taker: (ab)addnote
Store additional information about contacts using the Note Taker
Format: (ab)addnote INDEX i/INFO…
Example:
-
(ab)addnote 1 i/Like to swim i/Likes cheese
Adds the notes 'Like to swim' and 'Likes cheese' to the first person in the displayed person list.
Edit additional information about contacts : (ab)editnote
Edit additional information about contacts using the Note Taker
Format: (ab)editnote INDEX l/LINE_NUMBER i/INFO
Example:
-
(ab)editnote 1 l/5 i/Likes having fun
Replaces the 5th note of the 1st person to 'Likes having fun'.
Delete additional information about contacts : (ab)deletenote
Delete additional information about contacts using the Note Taker
Format: (ab)deletenote INDEX l/LINE_NUMBER…
Example:
-
(ab)deletenote 1 l/4 l/5
Deletes the 4th and 5th note from the first person.
Add notes to a restaurant : (rt)addnote
Adds a new note to a restaurant
Format: (rt)addnote INDEX [r/RECOMMENDED_FOOD]… [g/GOOD_FOOD]… [b/BAD_FOOD] …
Examples:
-
(rt)addnote 5 r/chicken chop g/truffle fries b/risotto
Add notes to the restaurant at index 5 with recommended food Chicken Chop, good food Truffle Fries, and bad food Risotto. -
(rt)addnote 2 g/Cheese baked rice
Adds a note to the restaurant at index 2 with good food Cheese baked rice. -
(rt)addnote 1 b/Fried rice b/Latte
Add notes to the restaurant at index 1 with bad food Fried rice and Latte.
Edit notes to a restaurant : (rt)editnote
Edits a note to a restaurant
Format: (rt)editnote INDEX [rl/LINE_NUMBER] [r/RECOMMENDED_FOOD] [gl/LINE_NUMBER] [g/GOOD_FOOD] [bl/BAD_FOOD] [b/BAD_FOOD]
Examples:
-
(rt)editnote 1 rl/2 r/Lobster pasta gl/1 g/Mushroom soup bl/3 b/Salad
Edit notes to the restaurant at index 1 with recommend food Lobster pasta at line number 2, good food Mushroom soup at line number 1, and bad food Salad at line number 3. -
(rt)editnote 2 gl/2 g/Chicken chop
Edits note to the restaurant at index 2 with good food Chicken chop.
Delete notes to a restaurant : (rt)deletenote
Deletes a note to a restaurant
Format: (rt)deletenote INDEX [rl/LINE_NUMBER1]… [gl/LINE_NUMBER]… [bl/BAD_FOOD]…
Examples:
-
(rt)deletenote 1 rl/2 gl/1 bl/3
Delete notes to the restaurant at index 1, at line number 2 of recommended food notes, at line number 1 of good food notes, at line number 3 of bad food notes. -
(rt)deletenote 2 gl/1 gl/2
Deletes a note to the restaurant at index 2, at line numbers 1 and 2 of good food notes.
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
(Kwan Xin Jie: 3.3, 3.4, 3.5)
Detailed Contact Viewer
Implementation
The detailed contact viewer is facilitated by AddressBook
. This feature allows a user to view a particular contact details in entirety.
Given below is an example usage scenario and how the get mechanism behaves at each step.
Step 1. The user launches the application for the first time. The AddressBook
will be initialized with the initial state, which is an empty list.
Step 2. The user executes the (ab)add n/David p/12345 …
command to add a new person.
Step 3. The user executes the (ab)get 1
command to get the detailed contact of the first person in the AddressBook list.
The following sequence diagram shows how the get operation works within the Logic
component:
Design Considerations
Aspect: What information to display
-
Alternative 1 (current choice): Set a limit on details that has a potential long list (such as NoteTaker) and display them on the detailed contact viewer.
-
Pros: All information are displayed for easier viewing/access.
-
Cons: AddressBook list might be long and hard to view.
-
-
Alternative 2: Display selective information on the AddressBook list and the full information under get command.
-
Pros: AddressBook list is less cluttered.
-
Cons: Omits certain information.
-
Sorting of Assignments
Implementation
The sorting of assignments is facilitated by AssignmentList
. This feature allows a user to sort assignments by deadline or estimated completion time.
Given below is an example usage scenario and how the sort mechanism behaves at each step.
Step 1. The user launches the application for the first time. The 'AssignmentList' will be initialized with the initial state, which is an empty list.
Step 2. The user executes the following commands to add new assignments.
-
1.
(st)add t/CS2103 Project d/2020-04-18 23:59 e/180
-
2.
(st)add t/DBA3702 Project d/2020-04-19 19:00 e/150
-
3.
(st)add t/CS2106 Lab d/2020-04-11 20:00 e/20
Step 3. The user executes the (st)list -d
command to sort the assignments by deadline.
The following sequence diagram shows how the list assignment operation works within the Logic
component:
Design Considerations
Aspect: How to sort assignment by estimated completion time
-
Alternative 1 (Current choice): Descending order
-
Pros: User can prioritise by doing the assignment which takes the longer first.
-
Cons: User may spend too much time on assignments that take much longer.
-
-
Alternative 2: Ascending order
-
Pros: User can clear more assignments faster, by completing those that takes a shorter amount of time first.
-
Cons: User may delay starting on assignments that take longer and risk having uncompleted assignments at the deadline.
-
Editing of Restaurant Notes
Implementation
The editing of restaurant notes is facilitated by RestaurantBook
. This feature allows a user to edit existing notes of a restaurant in the list.
Given below is an example usage scenario and how the editing of note mechanism behaves at each step.
Step 1: The user launches the application for the first time. The RestaurantBook
will be initialized with the initial state, which is an empty list.
Step 2: The user executes the following commands to add notes to a restaurant.
-
1.
(rt)add n/Ameens l/Clementi v/No o/0900:2300 p/$ c/Indian
-
2.
(rt)addnote r/Cheese fries
Step 3: The user executes the (rt)editnote 1 rl/1 r/Butter chicken
command to edit the first recommended food of the restaurant at index 1, to Butter chicken.
The following sequence diagram shows how the edit restaurant note operation works within the Logic
component.
Design Considerations
Aspect: How to execute the command for edit note, given 3 editable notes for a restaurant.
-
Alternative 1 (chosen): Have one command that allows user to choose any note to edit.
-
Pros: Easy for user to use, without switching between different commands.
-
Cons: As line number of the relevant note needs to be indicated, many levels of checking of the user input is required, and is thus more prone to errors.
-
-
Alternative 2: Have 3 separate edit commands, one for each restaurant’s note.
-
Pros: Easier to implement.
-
Cons: Not user-friendly since different notes cannot be edited in a single command.
-
Adding a person
-
Test case:
(ab)add n/John p/12345 o/NUS n/05-20
Expected: A new contact with the name John, phone number 12345, and birthday 20 May is added to the list. Details of the added contact shown in the status message.
Deleting a person
-
Deleting a person while all persons are listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)delete 1
Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. -
Test case:
(ab)delete 0
Expected: No person is deleted. Error details shown in the status message. -
Other incorrect delete commands to try:
(ab)delete
,(ab)delete x
(where x is larger than the list size)
Expected: Similar to previous.
-
-
Deleting a person while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)delete x
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No person is deleted. Error details shown in the status message.
-
Editing a person
-
Editing a person while all persons listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)edit 2 t/BFF -t/Friends
Expected: Second contact in the list is edited, with tag "Friends" deleted, and tag "BFF" added. Details of the edited contact shown in the status message.
-
-
Editing a person while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)edit x b/06-22
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No person is edited. Error details shown in the status message.
-
Adding additional information to a person
-
Adds note(s) to a person while all persons listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)addnote 2 i/Likes red i/Lives in Jurong i/Cycles
Expected: Second contact in the list has 3 new notes, "Likes red", "Lives in Jurong" and "Cycles", added. Details of the edited contact shown in the status message.
-
-
Add note(s) to a person while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)addnote x i/Can’t take spicy
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No new note is added to a person. Error details shown in the status message.
-
Editing additional information for a person
-
Editing an existing note of person while all persons listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)editnote 2 l/2 i/Likes matcha
Expected: Edits the second note of the second contact in the list to "Likes matcha". Details of the edited contact shown in the status message. -
Test case:
(ab)editnote x i/Likes red
(where x is larger than the number of existing notes of a person)
Expected: No note is edited for the person. Error details shown in the status message. -
Other incorrect commands to try:
(ab)editnote 2 l/aaa i/Likes cats
(where line number is not an integer)
Expected: Similar to previous
-
-
Editing an existing note of a person while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)editnote x l/3 i/Can’t take spicy
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No note is edited for a person. Error details shown in the status message.
-
Deleting additional information of a person
-
Delete note(s) of a person while all persons listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)deletenote 2 l/1 l/3
Expected: Deletes the first and third note of the second contact in the list. Details of the edited contact shown in the status message. -
Test case:
(ab)deletenote 2 l/x
(where x is larger than the number of existing notes of a person)
Expected: No note is deleted for the person. Error details shown in the status message. -
Other incorrect commands to try:
(ab)deletenote 2 l/2 l/aaa
(where line number is not an integer)
Expected: Similar to previous
-
-
Editing a person while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)deletenote x l/2
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No note is deleted for a person. Error details shown in the status message.
-
Finding a specific contact/specific set of contacts
-
Finding person(s) by organization, name or tag.
-
Test case:
(ab)find o/NUS n/Lim
Expected: If person(s) with the organization "NUS" and have the word "Lim" in the name, person(s) will be listed. The number of person listed shown in the status message.
-
Retrieving a specific contact and view in full details
-
Retrieves a person contact while all persons listed
-
Prerequisites: List all persons using the
(ab)list
command. Multiple persons in the list. -
Test case:
(ab)get 2
Expected: Display the second person in the full contact list. The number of person listed shown in the status message. -
Test case:
(ab)get x
(where x is larger than the number of contacts in the list)
Expected: No detailed view of contact is displayed. Error details shown in the status message.
-
-
Retrieves a person contact while finding contacts that meet certain criteria
-
Prerequisites: List subset of contacts using the
(ab)find
command. Persons who meet the criteria are listed. -
Test case:
(ab)get x
(where x is larger than the filtered list size but smaller than the size of the full contact list)
Expected: No detailed view of contact is displayed. Error details shown in the status message.
-
List contacts with upcoming birthdays
-
All persons are listed
-
(ab)birthday
Expected: All contacts with birthdays in the next 5 days (current day included) should be listed.
-
Adding a restaurant
-
Test case:
(rt)add n/Ameens l/Clementi v/No o/0900:2300 p/$ c/Indian
Expected: Adds a new restaurant called Ameens at Clementi with 1 dollar sign price point, opens from 9am to 11pm, with cuisine Indian and has yet to be visited.
List all restaurants saved
-
(rt)list
Expected: All restaurants added should be displayed.
Editing a restaurant
-
Editing a restaurant while all restaurants are listed
-
Prerequisites: List all restaurants using the
(rt)list
command. Multiple restaurants in the list. -
Test case:
(rt)edit 1 v/Yes o/0900:2200
Expected: Edits the first restaurant visited status to "Yes" and operating hours to "0900:2200".
-
-
Editing a restaurant while finding restaurants that meet certain criteria
-
Prerequisites: List subset of restaurants using the
(rt)find
command. Restaurants that meet the criteria are listed. -
Test case:
(rt)edit x
(where x is larger than the filtered list size but smaller than the size of the full restaurant list)
Expected: No restaurant edited. Error details shown in the status message.
-
Deleting a restaurant
-
Deletes a restaurant while all restaurants are listed
-
Prerequisites: List all restaurants using the
(rt)list
command. Multiple restaurants in the list. -
Test case:
(rt)delete 2
Expected: Deletes the second restaurant in the restaurant list. Details of the deleted restaurant shown in the status message. -
Test case:
(rt)delete x
(where x is larger than the size of the restaurant list)
Expected: No restaurant is deleted. Error details shown in the status message.
-
-
Deleting a restaurant while finding restaurants that meet certain criteria
-
Prerequisites: List subset of restaurants using the
(rt)find
command. Restaurants that meet the criteria are listed. -
Test case:
(rt)delete x
(where x is larger than the filtered list size but smaller than the size of the full restaurant list)
Expected: No restaurant deleted. Error details shown in the status message.
-
Adding food note(s) to a restaurant
-
Add food note(s) to a restaurant while all restaurants are listed
-
Prerequisites: List all restaurants using the
(rt)list
command. Multiple restaurants in the list. -
Test case:
(rt)addnote 1 r/Chicken Chop g/Truffle Fries b/Risotto b/Lobster Pasta
Expected: Add notes to the restaurant at index 1 with recommended food Chicken Chop, good food Truffle Fries, and bad food Risotto and Lobster Pasta. Details of the edited restaurant shown in the status message.
-
Editing food note(s) of a restaurant
-
Edit food note(s) to a restaurant while all restaurants are listed
-
Prerequisites: List all restaurants using the
(rt)list
command. Multiple restaurants in the list. -
Test case:
(rt)editnote 1 rl/1 r/Fish and Chip gl/1 g/Mushroom soup bl/2 b/Salad
Expected: Edit notes to the restaurant at index 3 with recommend food Fish and Chip at line number 1, good food Mushroom soup at line number 1, and bad food Salad at line number 2. Details of the edited restaurant shown in the status message. -
Test case:
(rt)editnote 2 rl/aaa r/Fried Rice gl/1 g/Tomato soup
(Non-integer line number for recommended food notes)
Expected: No restaurant’s food notes is edited. Error details shown in the status message.
-
Deleting food note(s) of a restaurant
-
Delete food note(s) to a restaurant while all restaurants are listed
-
Prerequisites: List all restaurants using the
(rt)list
command. Multiple restaurants in the list. -
Test case:
(rt)deletenote 1 rl/1 gl/1 bl/2
Expected: Delete notes to the restaurant at index 1, at line number 1 of recommended food notes, at line number 1 of good food notes, at line number 2 of bad food notes. -
Test case
(rt)deletenote 1 rl/1 gl/x bl/aaa
(where x is larger than the size of good food notes, and non-integer line number for bad food notes)
Expected: No restaurant’s bad notes is edited. Error details shown in the status message.
-
Search for restaurants based on a number of criteria
-
(rt)find l/Clementi
Expected: Searches and display restaurants in the Clementi area. Number of restaurants displayed shown in the status message.
Adding an assignment
-
Test case:
(st)add t/CS2103 post lecture quiz d/2020-11-11 23:59 e/2
Expected: Adds an assignment titled CS2103 post lecture quiz to the Schoolwork Tracker, due 11 Nov 2020 23:59 PM and which takes an estimated two hours to complete. Details of the added assignment shown in the status message. -
Test case:
(st)add t/CS2105 lab d/DEADLINE e/5
(whereDEADLINE
is before the current date and time)
Expected: No assignment is added. Error details shown in the status message.
List current assignments
-
Test case:
(st)list -d
Expected: Assignments will be shown in chronological order, with respect to the deadline, with all completed assignments at the bottom of the list. -
Test case:
(st)list -e
Expected: Assignments will be shown according to the estimated completed time in descending order with all completed assignments at the bottom of the list. -
Test case:
(st)list -d -e
Expected: Assignments will not be sorted. Error details shown in the status message.
Deleting an assignment
-
Deletes an assignment while all assignments are listed
-
Prerequisites: List all assignments using the
(st)list
command. Multiple assignments in the list. -
Test case:
(st)delete 1
Expected: Deletes the first assignment in the Schoolwork Tracker. Details of the deleted assignment shown in the status message. -
Test case:
(st)delete x
(where x is larger than the size of Schoolwork Tracker)
Expected: No assignment is deleted. Error details shown in the status message.
-
Editing an assignment
-
Edits an assignment while all assignments are listed
-
Prerequisites: List all assignments using the
(st)list
command. Multiple assignments in the list. -
Test case:
(st)edit 1 t/CS2103 Quiz e/1
Expected: Changes the title of the first assignment to 'CS2103 Quiz' and estimated completion time to 1 hour. Details of the edited assignment shown in the status message. -
Test case:
(st)edit 1 s/Completed
Expected: Marks the first assignment in the Schoolwork Tracker as completed. Details of the edited assignment shown in the status message. -
Test case:
(st)edit 1 s/Uncompleted
Expected: Marks the first assignment in the Schoolwork Tracker as uncompleted. Details of the edited assignment shown in the status message. -
Test case:
(st)edit d/DEADLINE
(whereDEADLINE
is before the current date and time)
Expected: No assignment is edited. Error details shown in the status message. -
Other incorrect commands to try:
(st)edit x
(where x is larger than the size of Schoolwork Tracker)
Expected: Same as above
-
Generating schedule
-
Generates the user’s schedule
-
Prerequisites: There are assignments added to the SchoolworkTracker
-
Test case:
(st)schedule n/5
Expected: The user’s schedule for the next 5 days is displayed. For the query date, the total allocated hours should not exceed the amount of time remaining on query date. For each assignment, the amount of time allocated to the day it is due should not exceed the amount of time the user has on that day before the time of submission. For each assignment, the total amount of time scheduled and unscheduled should equals the estimated workload of that assignment. -
Test case:
(st)schedule n/-1
Expected: No schedule is displayed. Error details shown in the status message.
-
Adding a social event
-
Test case:
(ev)add t/Facebook job interview d/2020-05-18 10:00 h/3 p/Facebook APAC HQ
Expected: Adds a new social event with title "Facebook job interview", event date 2020-05-18, duration of 3 hours and location at "Facebook APAC HQ". -
Test case:
(ev)add t/Birthday party d/DATETIME h/3 p/Clementi
(where DATETIME is after the current date and time)
Expected: No social event is added. Error details shown in the status message.
Listing all events
-
(ev)list
Expected: List all added social events in the Event Schedule.
Editing a social event
-
Edits a social event while all social events are listed
-
Prerequisites: List all social events using the
(ev)list
command. Multiple social events in the list. -
Test case:
(ev)edit 1 d/2020-04-09 11:00 h/2
Expected: Edits the first event in the Event Schedule by changing the timing to 11AM on the 9th of April and the estimated duration to be 2 hours. -
Test case:
(ev)edit d/DATETIME
(where DATETIME is after the current date and time)
Expected: No social event is edited. Error details shown in the status message.
-
Deleting a social event
-
Deletes a social event while all social events are listed
-
Prerequisites: List all social events using the
(ev)list
command. Multiple social events in the list. -
Test case:
(ev)delete 1
Expected: Deletes the first social event in the Event Schedule. -
Test case:
(ev)delete x
(where x is larger than the size of Event Schedule)
Expected: No social event is deleted. Error details shown in the status message.
-