Chan Jun Da's Project Portfolio Page
Project: Athena
Athena - Athena is an integrated contact and events manager. 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.
- New Feature: Added tag-to-contact backend tracking.
- What it does: allows developers to quickly search up all contacts that contain a specific tag. Mapping is updated after every command that potentially changes a contact’s tags.
- Justification: This allows for higher level modules to make use of this relationship without creating cyclic dependency between
Person
s andTag
s. - Highlights: This enhancement is necessary for upcoming features that require queries by tag. The implementation for this feature was difficult as it had to be done in a way that did not radically affect other modules or require other developers to perform the tag-contact updates manually with new commands.
- New Feature: Added support for parent-child-tag relationship and integration with current contact commands.
- What it does: supports creation and maintenance of directional tag-to-tag relationship and saves it to the hard disk. Also integrates tag and contact methods.
- Justification: This allows future developers to develop higher-level commands that
- allows users to categorise their contacts into complex relationship trees
- perform actions on groups of contacts identified by tags rather than contacts
- Highlights: This enhancement was crucial to several upcoming tag-level features that our team intended to implement. This feature was particularly difficult to implement as it required a data structure implementation that supported frequent edits of tag-to-tag relations. Additionally, very specific behavior choices needed to be made regarding several key issues (e.g. deletion of a tag in the middle of the tag tree). There were also many potential issues with the feature that had to be predicted and protected against (e.g. creation of cyclic tag relations).
- New Feature: Added the following tag commands:
list
,view
,add
,edit
anddelete
- Justification: This allows users to fully utilise the parent-child-tag support of Athena by providing users with the tools for creating their own tag-tree relations. It also allows them to perform some actions relating to tags more efficiently.
- Code contributed: RepoSense link
- Project management:
- Enhancement to existing feature: Changed
edit -c
to support tag addition and tag removal instead of a replacement of all tags.rt/*
was implemented to continue to support a quick way to remove all tags of a contact. (Pull request #71)- Justification: As future features will rely on each contacts’ tags, users choose which tags they would like to add and remove instead of replacing the entire set of tags on each edit as was done in AddressBook-Level3. This is meant to improve user convenience.
- Enhancement to existing feature: Changed
find -c
to support searches via additional fields. (Pull request #89)- Justification: This improvement is to support search by other fields to increase specificity when the number of contacts grows large.
- Documentation:
- User Guide:
- Developer Guide:
- Removed outdated content in Developer Guide and updated relevant diagrams and commands to fit Athena #180
- Updated architecture sequence diagram to use correct command syntax
- Changed
Model
andStorage
UML class diagram to match Athena
- Added implementation details of contact and tag management #180
- Added full Contact and Tag UML class diagram (sub-component of Model)
- Added UML sequence diagram to illustrate the tag deletion command
- Added documentation for an upcoming tag tree visualisation feature #276
- Added activity diagram for proposed tag tree visualisation feature #285
- Added Instructions for Manual Testing for important commands I implemented/updated
- Added section for contact and tag management to the Effort appendix
- Removed outdated content in Developer Guide and updated relevant diagrams and commands to fit Athena #180
- Community: