Project: NetworkBook

NetworkBook is a desktop address book application that School of Computing students can use to track and network with peers. The user interacts with it using a CLI, and has a GUI created with JavaFX. It is written in Java, and has about 20 kLoC.

Here are my contributions to the project.

  • New Features:
    • Added checks for duplicate contact names. The application ensures that multiple contacts with the same name cannot be created.
    • Added specialisations and courses to contact details. Courses, in particular, have start and end dates to indicate when a contact has started/finished taking a specific course. These optional fields also enable the user to further refine their search.
    • Added filter commands for courses, specialisations, graduation year, and tags. Each filter command is parsed through a global parser which then disseminates into specific parsers. Each filter also has its own set of predicates to filter against each person.
  • Enhancements:
    • Improve command result messages to give better feed back to the user. So now, users can better understand that they’re formatting the command incorrectly, or they’ve left a required field blank, and so on.
  • Code contributed: tP Dashboard Link
  • Bug fixes: Conducted bug fixes for:
    • Json file storage not properly storing course dates
    • Correcting behavior of several commands to match UG specification
    • Fix a runtime error caused by ArgumentMultiMap
  • Documentation:
    • User Guide:
      • Added documentation for the features remove duplicates, course and specialisation
      • Added an About section, giving an overview of how to start using the application and documented new features per version.
      • Provided documentation for filter command, specifying the various parameters that the command accepts, as well as providing detailed instructions on how to use the filter by course command with the taken parameter.
    • Developer Guide
      • Added documentation for the Logic component of the DG to further explain the classes used in the application, such as ArgumentMultiMap and CliSyntax
      • Designed UML Diagrams to demonstrate the logical flow of command parser and the internal workings of the filter command parser
        • An Activity Diagram is used to illustrate the inner workings of CommandParser. An input string is passed to CommandParser which deciphers which parser the string should be passed onto to generate a specific class of Command, based on the identifying prefix of the command. If the prefix of the input string doesn’t exist, throw an error.
        • A sequence diagram is used to demonstrate how FilterCommandParser infers the type of FilterCommand to generate.
  • Team-based tasks:
    • Attended weekly meetings punctually
    • Reviews for major PRs:
      • Update edit sequence: #138
      • Add undo/redo to displayed contacts: #169
  • Community tasks:

Here are some extracts from my contributions to the user guide:

  • Description of specialisation:
    • You can add a specialisation to an existing contact.
      A new specialisation will be added to the contact’s list of specialisations, and no new contact will be created. Specialisations are displayed in the order they are added.

    • Format: add /spec [specialisation] /index [index]
  • Description of filter:
    • You can use the filter command to filter your list of contacts, temporarily hiding contacts that don’t contain certain keywords for easy viewing. If the list is currently sorted (using sort, the filtered list will be sorted.

    • Format: filter /by [field] /with [term] /taken true/false
  • UI mockups:
    • Created the UI mockups in the user guide to emulate the application’s behavior in 1.1.