Lok Ke Wen - Project Portfolio Page

Overview

iGraduate is a command line application written in Java that acts as a centralised hub for NUS students majoring in Information Security to plan their academic journey.

Summary of Contributions

Code contributed

Click here to view my code contribution on RepoSense.

Enhancements implemented

  1. Implemented AddCommand class with Le Jun.
    • The implementation of AddCommand is generally doable except for the checking and inserting the prerequisites information to the module’s prerequisites, untaken prerequisites and each of the prerequisites’ requiredByModules as it is quite complex.
  2. Implemented InfoCommand class to show module information.
    • The idea of implementing InfoCommand is to prevent convoluted view for the ListCommand by displaying all information of the specified module to the user.
  3. Implemented DoneCommand class for user to mark module as taken.
    • The DoneCommand class is responsible for executing and providing the done feature to allow the user to update the module they have taken with a grade so that the application can update the prerequisite list of related modules accordingly to show an accurate results on the module status and whether it can be taken next.
  4. Implemented ListCommand class with Oscar.
    • I programmed the available and list by module type options’ logic. For the available option, I checked through all the modules and display only the modules where all their prerequisites are satisfied. As for the module type option, I filter out modules which matches the specified module type and display them to the user.
  5. Designed and implemented underlying logic for prerequisites processing.
    • I added three ArrayList for the respective prerequisite information to track to each module for efficient processing. Each module can have any prerequisites as long the prerequisite exists in the current list, not the module itself and not each other’s prerequisite. Once a module is marked as taken, it will be removed from the untaken prerequisites list of the modules in its required by list. Only modules with empty untaken prerequisites list are shown as available. Lastly, for module deletion, the module requiring it as a prerequisite must be deleted first before it can be deleted.
  6. Incorporated the ability to differentiate child module classes to the Storage component.
    • The default Gson method does not differentiate the parent class Module object with its child class object. As such, I researched on RuntimeTypeAdapterFactory and included it to generate the Json data with labels that distinguishes the child classes.

Contributions to the UG

  1. Added Show module information: info and Manual Modification of Data section.
  2. Added and updated List modules: list, FAQs and Command Summary section.
  3. Restructuring, reformatting and maintenance of UG.

Contributions to the DG

  1. Added introduction, setting up, getting started, logging and documentation section.
  2. Added module package and its class diagram under the design of model component.
  3. Added AddCommand, InfoCommand and their sequence diagrams under implementation.
  4. Added implementation for ModuleList.
  5. Restructuring, reformatting and maintenance of DG.

Contributions to team-based tasks

  1. Setup the GitHub team organization and repository.
  2. Managed the milestones, issue tracker and releases for team repository.
  3. Setup logging configuration file. (Pull Request: #74)
  4. Implemented skeleton code for the team project including project structure, command class and module class. (Pull Requests: #8 #26 #32 #39 #41)
  5. Enhanced overall code quality by refactoring and improving the code design from time to time. (Pull Requests: #47 #55 #62 #66 #74 #213 #217 #241 #253)
  6. Researched on third party libraries which could be used for the project and obtained permission from the lecturer on behalf of the team. (Issues: #31 #40)

Review/mentoring contributions

I helped the team with giving implementation advise of some features and reviewing code of the team in general to ensure everything is in place and enhance the project’s code quality. Here are some example of the pull requests where I reviewed and refactored the project code:

Contributions beyond the project team

  1. Performed bug hunting, reviewed UG and DG on other products such as MojoHr.