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
- Implemented
AddCommandclass with Le Jun.- The implementation of
AddCommandis 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.
- The implementation of
- Implemented
InfoCommandclass to show module information.- The idea of implementing
InfoCommandis to prevent convoluted view for theListCommandby displaying all information of the specified module to the user.
- The idea of implementing
- Implemented
DoneCommandclass for user to mark module as taken.- The
DoneCommandclass is responsible for executing and providing thedonefeature 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.
- The
- Implemented
ListCommandclass with Oscar.- I programmed the
availableand list bymodule typeoptions’ logic. For theavailableoption, I checked through all the modules and display only the modules where all their prerequisites are satisfied. As for themodule typeoption, I filter out modules which matches the specified module type and display them to the user.
- I programmed the
- Designed and implemented underlying logic for prerequisites processing.
- I added three
ArrayListfor 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.
- I added three
- Incorporated the ability to differentiate child module classes to the
Storagecomponent.- The default
Gsonmethod does not differentiate the parent classModuleobject with its child class object. As such, I researched onRuntimeTypeAdapterFactoryand included it to generate theJsondata with labels that distinguishes the child classes.
- The default
Contributions to the UG
- Added
Show module information: infoandManual Modification of Datasection. - Added and updated
List modules: list,FAQsandCommand Summarysection. - Restructuring, reformatting and maintenance of UG.
Contributions to the DG
- Added
introduction,setting up, getting started,logginganddocumentationsection. - Added
module packageand its class diagram under the design of model component. - Added
AddCommand,InfoCommandand their sequence diagrams under implementation. - Added implementation for
ModuleList. - Restructuring, reformatting and maintenance of DG.
Contributions to team-based tasks
- Setup the GitHub team organization and repository.
- Managed the milestones, issue tracker and releases for team repository.
- Setup logging configuration file. (Pull Request: #74)
- Implemented skeleton code for the team project including project structure, command class and module class. (Pull Requests: #8 #26 #32 #39 #41)
- 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)
- 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
- Performed bug hunting, reviewed UG and DG on other products such as MojoHr.