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
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.
- The implementation of
- Implemented
InfoCommand
class to show module information.- The idea of implementing
InfoCommand
is to prevent convoluted view for theListCommand
by displaying all information of the specified module to the user.
- The idea of implementing
- Implemented
DoneCommand
class for user to mark module as taken.- The
DoneCommand
class is responsible for executing and providing thedone
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.
- The
- Implemented
ListCommand
class with Oscar.- I programmed the
available
and list bymodule type
options’ logic. For theavailable
option, I checked through all the modules and display only the modules where all their prerequisites are satisfied. As for themodule type
option, 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
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.
- I added three
- Incorporated the ability to differentiate child module classes to the
Storage
component.- The default
Gson
method does not differentiate the parent classModule
object with its child class object. As such, I researched onRuntimeTypeAdapterFactory
and included it to generate theJson
data with labels that distinguishes the child classes.
- The default
Contributions to the UG
- Added
Show module information: info
andManual Modification of Data
section. - Added and updated
List modules: list
,FAQs
andCommand Summary
section. - Restructuring, reformatting and maintenance of UG.
Contributions to the DG
- Added
introduction
,setting up, getting started
,logging
anddocumentation
section. - Added
module package
and its class diagram under the design of model component. - Added
AddCommand
,InfoCommand
and 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.