PROJECT: TeethHub

This portfolio summarizes my contribution to Project: TeethHub

Overview

My teammates and I was morphed this program in a software engineering module. In a brownfield manner, we enhanced and expanded features in Addressbook Level 4.

The name of our program is TeethHub. It is a desktop application aimed for dentists who needs better data organization tools. Our program have functions in adding and editing patients, tasks and records, as well as other auxiliary functions. Our program interacts with the user in both command line interface (CLI) and graphical user interface (GUI).

Our program takes uses of libraries including TextFX, Jackson, Guava, JUnit5, Apache PDFBox and Apache Commons Logging. The GUI is written in JavaFX. In total, there are approximately 20k line of codes written in Java.

I have implemented several functions for the application including copy patients, copy tasks, sort tasks, list tasks and create medical certificate from a record. I also coded test cases for my implementations using JUnit. To facilitate the project, I have also made changes in GUI.

Summary of contributions

  • Major enhancement: added the ability to copy patients and tasks

    • What it does: Allows user to make temporary copies of existing data entries for easy editing. The copy function does not violate the uniqueness of the data list as the copies are temporary. Exit with unedited copies will need user’s confirmation.

    • Justification: This feature improves the product significantly because inputting data in the program is painful. In actual scenarios, entries sharing similar attributes are commonly seen. This function will improves the usability of our application in a large scale.

    • Highlights: The implementation of the function needs coordination with logic, model and storage. It also needs to confront to the design rule of unique data list. A prompt is also added when user tries to exit without editing existing copies.

  • Major enhancement: added the ability to generate an MC based on existing record

    • What it does: Allows user to generate MCs from our application directly without the need of inputting existing data again.

    • Justification: This feature improves the product significantly because generating MC is a common scenario. Since we have integrated this feature in our application, there is no need for the user to install another software and synchronize the data.

    • Highlights: The implementation of the function takes use of PDF box library. It will extract information automatically from selected records and the corresponding patient. The design of the MC is neat and professional.

  • Minor enhancement: added a sort command that allows the user to sort task list in time or priority order ascendingly or descendling.

  • Code contributed: via Response

  • Other contributions:

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub

    • Enhancements to existing features:

      • Enhanced the result display to dispaly muilti-style text.

      • Mannually tested features teamate implemented. Found, reported several bugs and helped the debugging.

    • Community:

      • Finded and reported bugs for projects in other groups (e.g. 1, 2)

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.

Record MC creation

Creates Medical Certificate (MC) for at patient based on description of the selected record. The MC is used as a proof for patient’s undergoing procedure.

Format: recordmc INDEX [DaysToRest] or rmc INDEX [DaysToRest]

Note:

  • The MC is saved as a pdf file under data/ folder.

  • By defualt the number of days suggested to rest is 2.

Example:

  • recordmc 1 - Creates mc for the first record, suggesting 2 days of rest.

  • recordmc 1 3 - Create mc for the first record, suggesting 3 dyas of rest.

Figure below shows a sample MC created.

SampleMc

taskcopy

Makes one or multiple copies of a task in the task list. This is useful when adding multiple tasks share similar attributes.

Format: taskcopy INDEX [COUNT] or tcopy INDEX [COUNT]

Note: If the copied entry is modified, it will no longer be considered as a copy. Thus, it should be different from existing entries in the task list. If copies exist before existing, there will be a confirmation.

Example:

  • taskcopy 1 - Make one copy of the 1st task in task list.

  • taskcopy 1 2 - Make two copies of the 1st task in task list.

tasklist

Shows a list of all the task stored in the application.

Format: tasklist or tlist

tasksort

Sort the tasks ascendingly or descendingly in some order.

Format : tasksort PARAMETER [asce/desc] or tsort PARAMETER [asce/desc]

Note :

  • PARAMETER can be starttime, endtime or priority

  • The asc/desc is optional. It’s sorted ascendingly by default

Example:

  • tasksort priority

  • tasksort starttime desc

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.

Aspect: Not adding copies into local storage
  • Current implementation: Copies are not serialized into json file. It’s only inside the memory. When copies exist before exit, program will ask for user’s confirmation

    • Alternative: Serialize copies into json file. Make changes to comparators of patient/task such that it accepts same entries with copy tag.

      • Alternative Pros: Everything is on track. User does not need to make a confirmation before exiting with copies. And if the program exits accidentally, the copies are still there.

      • Alternative Cons: User may be able to generate too many unnecessary entries easily, whose serialization is costly in time and space. The change of comparator also violates the design of unique list, bringing potential security issues as well.

    • Choice Justification: Serialization may need less code in the beginning. The maintenacne is more difficult, and the robustness of the program is compromised. On the other hand, creating copies for the user is not a hard task. Thus, creating copies on demand should be a better idea.

Priority As a …​ I want to …​ So that I can…​

* *

user

copy a task

reduce the time needed to create a new task who has similar records to an existing task in the list

* *

user

create MC based on existing record

reduce the time needed to input existing data to another system.