Project: AddressBook Level 3

AddressBook - Level 3 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 10 kLoC.

Given below are my contributions to the project.

  • Code contributed: RepoSense link
  • New Feature: Added the ability to add incomplete contacts.
    • What it does: allows the user to add contacts without specifying all the fields
    • Justification: This feature improves the product as it allowed users to add contacts that they might not have all the information for.
    • Highlights: This enhancement affects existing commands and commands to be added in the future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
    • Pull requests: #62
  • New Feature: Added ability to find contacts by specific fields.
    • What it does: allows the user to find contacts by specifying a specific field to search in by adding o/OPTION to the command.
    • Justification: This feature improves the product significantly because a user might know exactly what they wish to find. By allowing them to search in the specified field, they can find contacts faster.
    • Highlights: The parser need to be edited to handle all the different options.This increased the number of branches in the code significantly, hence the implementation was challenging. The number of exceptions to be handled also increased, adding to the complexity. In addition, OOP was used as I extended the search predicates from a common parent class to prevent code duplication.
    • Pull requests: #131, #171
  • New Feature: Added ability to find contacts by any field.
    • What it does: allows the user to find contacts by searching through all the fields of the contact.
    • Justification: This feature allows the user to quickly search through all the fields of the contact if they do not know which exact field they want to search for. This will return more results rather than just searching by name.
    • Highlights: The implementation of varies predicates into a single predicate was challenging and required use of functional programming paradigms.
    • Pull requests:
  • New Feature: Added ability to find appointments by specific fields.
    • What it does: allows the user to find appointments by specifying a specific field to search in by adding o/OPTION to the command.
    • Justification: Similar to find command above
    • Pull requests: #141, #176,
  • New Feature: Added ability to find appointments by any field.
    • What it does: allows the user to find appointments by searching through all the fields of the appointment.
    • Justification Similar to find command above
    • Pull requests: #147
  • Enhancements to existing features: Extend usage of help command from teammate Nicole.
    • What it does: Instead of just copying the link to the user’s clipboard, allowed button to open the link in the user’s default browser.
    • Justification: It is troublesome to click on copy URL, then paste the link into a browser.
    • Highlights: Had to make use of external libraries. Hence, the implementation was hard as it required understanding documentations and implementing them.
    • Pull requests: #151
  • Documentation:
    • User Guide:
      • Added documentation for the features findAppt and find #272
      • Edited documentation for feature add for adding incomplete contacts #103
      • Edited documentation for feature delete for deleting multiple contacts #310
    • Developer Guide:
      • Added implementation details of the add feature #301
      • Added use cases for delete, find in Appendix:Requirements #291
      • Added test cases for delete multiple and findAppt and find features.
  • Community:
    • Contributed to forum discussions (examples: #17, 21, #281, #95)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3, 4, 5)
  • Team-Based:
    • Set up Git Repo and organization at the start of project.
    • Set up GitHub pages and added initial PPP for teammates.