Alvin Tay Ming Hwee's Project Portfolio Page
Project: AddressBook π (Abπ)
AddressBook pi (Abπ) is a 360° all-rounded desktop app for managing contacts, optimized for use via a Command Line Interface (CLI). Abπ is catered towards fast-typers and individuals who want an organized address book with key features including efficient filtering of contacts based on various attributes (name, email, tags, etc.), copying of all emails in the address book and a memo section that allows you to note down notable details about a person.
The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10k LoC.
Summary of contributions
-
Code contributed: RepoSense link
-
Features and Enhancements implemented:
- Undo and redo command (PR #94):
- What it does: Allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
- Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
- Highlights: This feature affects existing commands and commands to be added in the future. It required an in-depth analysis of design alternatives. The implementation was challenging as it required changes to existing commands.
- Credits: https://se-education.org/addressbook-level3/DeveloperGuide.html#proposed-undoredo-feature
- Duplicate detection feature (PR #51, #238, #264)
- What it does: Prevents duplicate entries with the same name, phone and email when using add and edit commands.
- Justification: This feature improves the product by helping users manage duplicates by preventing duplicated contacts with the same name, phone and email.
- Highlights: This feature affects existing and future person attributes on how uniqueness is determined, and needs to be integrated with the existing commands. Duplicate detection is not trivial, detecting only exact string matches is not enough. It was meticulously implemented to behave closely to how these attributes are in the real world. For example, “John Doe” and “john doe” are likely to be the same person, even though there are differences in white spaces and capitalization. The implementation was tedious and challenging as it required changes in many of the existing classes.
- Case insensitivity for all person attributes (PR #238)
- Related to duplicate detection feature.
- Related to duplicate detection feature.
- Trim extra spaces between words (PR #238)
- Related to duplicate detection feature.
- Related to duplicate detection feature.
- Memo feature (PR #50, #53, #63, #111, #121)
- What it does: Allows the user to store miscellaneous information about a person.
- Justification: This feature improves the product by giving users an optional data field to store any information pertaining to a contact.
- Highlights: This feature was integrated into existing add and edit commands, adhering to OOP principles such as DRY and Single Responsibility Principle. The UI also needed to be updated to be seamless, such that if memo is empty, the memo row in the UI must not appear. A limit was also imposed to protect from unnecessarily long inputs.
- ContactedDate feature (PR #133)
- What it does: Allows the user to keep track of the last time that they contacted a person.
- Justification: This feature improves the product by giving users an optional data field to store the last contacted date of a contact.
- Highlights: This feature was integrated into existing add and edit commands, adhering to OOP principles such as DRY and Single Responsibility Principle. It was tricky to protect from edge cases. Proper date validation was required to ensure that the date given is a valid date following the dd-mm-yyyy format and is not a future date. Moreover, the date validation needs to properly handle leap dates and non-existent dates such as 30th February.
- Deletetag command (PR #178)
- What it does: Allows the user delete one or more tags of a contact.
- Justification: This feature improves the product by giving users the flexibility to delete one or more tags of a person. The alternative previously was the edit command, but edit overwrites all existing tags, which could be inconvenient for users.
- Highlights: This feature required careful implementation to ensure that it adheres to the code base design and OOP principles. This feature also indirectly affected duplicate detection, on what is considered as the same tag. Certain user inputs, such as the deletion of both valid and invalid tag in one command execution had to be handled properly as well.
- Prevent extraneous parameters for commands that do not take in parameters (PR #150)
- What it does: Prevents commands that do not take in parameters from executing when the user input has extra/trailing characters after the command word.
- Justification: This feature improves the product by protecting the user from accidental invocations of the wrong command. E.g. if you want to delete the first person and mistakenly call
clear 1
instead ofdelete 1
, it will now be interpreted as an invalid command to protect users from accidentally clearing the entire address book unintentionally. The proper format to execute clear is justclear
. - Highlights: This feature required additional checks for all existing commands that take no parameters.
- Updated
Person#toString()
to better represent tags when displayed (PR #184) - Contributed significantly to improving test coverage (PR #50, #58, #88, #94, #114, #133, #150, #163, #178, #238)
- Undo and redo command (PR #94):
- Documentation:
- User Guide:
- Added documentation for
Memo
,ContactedDate
,undo
,redo
,deletetag
, preventing duplicates, ignoring case sensitivity, trimming extra spaces, preventing extraneous parameters,add
andedit
(PR #25, #51, #53, #63, #94, #133, #144, #168, #180, #234, #238, #239, #240) - Updated FAQ (PR #152)
- Updated Quick start (PR #275)
- Updated details about max integer and chronological ordering of contacts (#283)
- Improved UserGuide formatting (PR #157, #159, #161, #180, #275, #283, #318)
- Added documentation for
- Developer Guide:
- Added implementation details of the
undo
andredo
feature (PR #93) - Added design consideration details of the
Memo
andContactedDate
feature (PR #144) - Added implementation details for the duplicate detection feature (PR #267)
- Updated UML diagrams ModelClassDiagram and BetterModelClassDiagram (PR #93, #109)
- Added instructions for manual testing (PR #278)
- Updated non-functional requirement and glossary (PR #291, #296)
- Improved DeveloperGuide formatting (PR #165, #313, #326)
- Added implementation details of the
- User Guide:
- Contributions to team-based tasks:
- Setting up the GitHub organisation and team repo.
- Setting up codecov for the team to track code coverage.
- Scheduling and tracking.
- Maintaining the issue tracker.
- Update
AboutUs.md
with team details and roles (PR #11) - Update Abπ logo (PR #266)
- Update
README.md
(PR #285) - Update
index.md
(PR #287) - Managed milestones
v1.1
-v1.4b
(7 milestones) on GitHub (link) - Managed releases
v1.2
-v1.4
(6 releases) on GitHub (link)
- Community:
- PRs reviewed (with non-trivial review comments): (PR #61, #73, #77, #103, #123, #130, #132, #166, #174, #247, #250)
- All other PRs reviewed: Link to 50+ PRs reviewed
- Reported bugs and suggestions for other teams in the class (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, and 4 others)