Project: Foster Family

This is a desktop application for managing animal foster families. Our target audience are the foster managers of animal shelters who currently do not have a good logistical workflow to keep track of their fosterers. 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: Designed and created a new Profile UI, to be used for view, edit and add commands.

    • What it does: Displays all information regarding a Person, and allows the user to edit them.
      • Checks user input, and does not accept invalid inputs.
      • Checks the overall Person object based on all fields provided, and does not accept invalid combinations.
      • If there are errors, gives descriptive textual feedback as well as highlighting the problematic field(s).
      • In editing, allows the user to either confirm their changes or cancel and revert them.
    • Justification: A far more natural interface than long one-liners otherwise required of the edit and add commands.
    • Highlights:
      • This involves a lot of JavaFX, and UI responsiveness in JavaFX is quite awkward.
      • Design needed to be agreed upon in advance, since the UI is invoked by other commands written by teammates.
      • Uses a simple Event Listener system, which is also used internally.
      • Uses an Enum to refer to text fields of the Person. Rows in the UI are dynamically generated from these Enums, and focus can be requested of any specific field through a setFocus method by passing in an enum value.
      • Dynamically handles any number of tags, and allows newlines for tags and notes.
    • Pull requests: #89, #93
  • Small modification: Added text notes to each Person, integrated with Profile UI.
    • Bundled with Profile UI feature.
  • Enhanced feature: find command overhauled to include expressive search.
    • What it does: Allows users to write keywords joined by & and /.
      • Parses parentheses correctly, and implicitly closes them if possible.
      • Searches every field of each Person.
      • Allows double-quotes " for exact string match.
    • Justification: Makes the find command more practical.
    • Highlights:
      • Includes an expression parser.
      • Dynamically handles any fields and values reported by Person, including tags.
      • Includes thorough testing with a lot of edge cases.
    • Pull requests: #68, #83, #90
  • Reviews (with non-trivial review comments): #31, #58, #59, #92
  • Documentation:
    • User Guide:
      • Added documentation for the feature list.
    • Developer Guide:
      • Added user story for list feature.
      • Modified class diagram for UI to include Profile UI.
      • Added implementation details of the view feature (Profile UI).
      • Added class diagram for view feature.
      • Added sequence diagram for view feature.
      • Added implementation details of the list feature.
      • Added class diagram for list feature.
      • Added sequence diagram for list feature.
      • Added sequence diagram for lower level details of list feature.
      • Added object diagram for example of list feature.
      • Added sequence diagram for example of list feature.
    • Pull requests: #28, #83, #140, #151