Hong Sheng's Project Portfolio Page
Overview
BookFace is an NUS-centered contacts management system that allows students of NUS to organise their list of friends and acquaintances that they have met in their various classes, CCAs, project groups etc. The application aims to provide NUS students a means to keep track of the contact details of the numerous people they have met in school, as well as provide a centralised channel for students to obtain school staff contact information.
Summary of Contributions
Code Contributed: RepoSense link
Features implemented
New feature: delete-image
- What it does:
delete-image
allows users to delete the contact image that they have set on a contact in their list of contacts. Once executed, the contact image of the contact of interest will be replaced with a default image. This feature is to be used as a counterpart to theadd-image
feature. - Justification: As
add-image
allows users to add an image to their contacts,delete-image
allows them to remove the image that they added if they wish to do so. This feature thus enables them to undo any mistakes that they have done when performing the initialadd-image
command, or simply just to remove the image for any other reason that they have.
Feature enhancement: find
- What it does: The original
find
function inherited from AddressBook3 was only able to filter out contacts based on an exact matching with the input argument and contact names. Thefind
function has since been improved to be able to filter based on any of the attributes that a contact has (i.e., name, status, phone, email, address, and tags). An exact matching for the keywords in the different attributes will also no longer be required. - Justification: This improvement was made as it delivers one of the most significant function promised by the BookFace application, which was to help our users manage their contacts based on the several classes and clubs that they belong to. Allowing users to filter by the attribute prefixes also grants a great flexibility in searching for their desired contacts. This flexibility is further improved by removing the restrictions on requiring an exact matching in the keywords. For instance, if a user wanted to find all of his contacts that he met in his Computer Science classes, he could enter
find t/cs
to get a filtered list of all his contacts that contains “cs” in their tags, despite him having added the contacts based on the specific classes that he met them in (e.g., CS2103, CS2106, CS2105, etc). The inherited version offind
from AddressBook3 will fail in this scenario as none of the tags have an exact match to “cs” (not to mention that the originalfind
could only filter by contact names). - Highlights: The main challenge involved in implementing this enhancement was understanding the existing codebase to figure out how prefixes and keywords were parsed and extracted from the user input. After getting a sound understand of the underlying architecture in place to facilitate this, the next challenge involved handling
Predicate
classes. As this was an unfamiliar class, additional study on the documentation was required to properly implement this feature enhancement.
Contributions to the UG
The following are the list of sections that have been contributed to the UG:
- Table of contents located at the top of the UG
- Quick Start
- Features:
- Delete user contacts:
delete
- Locating persons by keywords:
find
- Delete an image for contacts:
delete-image
- Delete user contacts:
Contributions to the DG
The following are the list of sections that have been contributed to the DG:
- Creation of the main skeletal structure of the DG to facilitate team members contributions.
- Table of contents located at the top of the DG
- Acknowledgements
- Implementation:
- The introduction paragraph under implementation that introduces readers to the section, and more importantly provide a note to the reader on the limitations of PlantUML regarding the class lifelines and destroy marker.
- Delete Feature
- Delete Image Feature
- Find Feature
Contributions to team-based tasks
The following are the list of team-based tasks accomplished:
- Maintaining the issue tracker
- Adding non-feature related sections to the UG and DG
Review/mentoring contributions
Main contributions in this aspect revolve around reviewing and approving of teammate’s Pull Requests, as well as sharing technical opinions through informal channels, such as team meetings and group chat with team members.
Contributions beyond the project team
Participated in the Practical Exam Dry Run and performed bug testing on the CareFlow application.
Contributions to the Developer Guide (Extracts)
The diagrams contributed to the DG are reproduced below.

Figure 1: Delete image sequence diagram

Figure 2: Delete image activity diagram

Figure 3: Find sequence diagram

Figure 4: Find activity diagram