Chong Wen Hao - Project Portfolio Page
Overview
GULIO is a module planner designed for efficiency for people that can type fast. It is capable of storing lessons and tasks for individual modules, as well as lesson notes via cheat-sheets.
Summary of Contributions
Click here to view code contribution.
Enchancements Contributed:
- Implemented ModuleList class and storage system, excluding cheat-sheets.
- Implemented shortcut listener for text editor.
Using KeyListener, I implemented shortcuts such as “ctrl-s” to save. The shortcuts would call methods that Hemrish created in the TextEditor class.
- Cleaned up code for most components.
I cleaned up the code after we merged our parts for V1.0 as there were inconsistencies and duplicates. This includes shifting of constants and messages to their respective classes, removing of duplicate methods, etc…
- Added days remaining for undone task and used it for sorting.
Contributions to Documentation:
- Added data & storage section.
- Created skeleton for the command section.
- Converted user guide from Google Docs into Markdown.
The team originally did the user guide on Google Docs. I converted it to markdown before we split it up and pushed our respective portions. It was really tedious, but not difficult.
Contributions to Developer Guide:
- Created the architecture diagram and did the parts relating to storage.
- Added instruction for manual testing.
- Converted developer guide from Google Docs into Markdown.
Like the user guide, we did the developer guide on Google Docs. I converted it into markdown before splitting it up with the others.
Contribution to Team-Based Tasks:
- Did the release for V1.0.
- Fixed minor bugs for some components.
Examples include fixing the formatting of various list commands, as well as getting focus for the text editor.
- Created issues and added labels on the issue tracker.
Review/mentoring contributions:
- Reviewed pull requests.
Examples:
- https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/129
- https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/125
- https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/43
- Helped Hemrish resolve some issues regarding cheat-sheets.
Contributions Beyond the Team
- Identified bugs during dry run PE. Click here to view.
- Answered a few question on the forum.
Examples:
- https://github.com/nus-cs2113-AY2021S2/forum/issues/2
- https://github.com/nus-cs2113-AY2021S2/forum/issues/11
[Optional] Contributions to User Guide
Example of parts that I wrote:
Data & Storage
Automatic Saving
Data for each module is stored in their respective module’s text file, located in a folder called “Data” created in the same directory as the GULIO.jar file. When moving this folder, please ensure that it is placed in the same directory as your GULIO.jar file. After every modification, changes are automatically saved to the file.
Manual Editing Outside of GULIO
Files can be modified outside of the program. Invalid inputs will not be loaded when the program is run and will be removed from the file. To ensure that your data loads properly, please follow the format stated in the data files strictly.
Format for Lessons:
lesson | <type> | <Day & Time>
lesson | <type> | <Day & Time> | <Link>
lesson | <type> | <Day & Time> | <Link> | <Teaching Staff Name>
lesson | <type> | <Day & Time> | <Link> | <Teaching Staff Name> | <Teaching Staff Email>
⚠ Only accepts 3 lesson types: “lecture”, “lab” and “tutorial”.
Format for Tasks:
task | <description> | <deadline> | <is done> | <is graded>
task | <description> | <deadline> | <is done> | <is graded> | <remarks>
⚠ For
<is done>
and<is graded>
, use ‘T’ for true and ‘F’ for false.
[Optional] Contributions to Developer Guide
Example of parts that I wrote:
Loading & Storing of Data
This section covers how the Storage component works, from the loading of all module codes to the loading of individual module and creation of data files.
Saving of Data
The
Writer
class is responsible for writing any changes to the module’s data file, as well as creating the file itself. Interaction with theWriter
class is done through theModuleList
class, whose methods are called by the other components of the app.
Figure 11 - writeModule() Sequence DiagramWhenever some data in a module changes, the command that made those changes would call the method
writeModule()
inModuleList
to update the change in the data file. This method would then call a method of the same name in theWriter
class, which overwrites the existing data in the file with the new data.Due to how much data needs to be written each time, we decided to split the data file by module. That way, we only need to overwrite the module’s data when changes are made.
Loading of Data
The
Loader
class is responsible for identifying all the modules currently added, as well as loading the data file of the selected class. Methods in theLoader
class are accessed by the other components via theModuleList
class.
Figure 12 - loadModuleCodes() Sequence DiagramTo identify modules in the “Data” directory, Duke would call
loadModuleCodes()
method in theModuleList
. This method would then call thegetModules()
method inLoader
, which returns a list of module codes. For each of the identified module code,ModuleList
would call its owninsertModule()
method to add it to the module list.
Figure 13 - setSelectedModule() Sequence DiagramWhen a module is selected via the
setSelectedModule()
method, the specified module code would be searched for in the module list. If it is inside,loadModule()
method in theLoader
would be called. This method reads the module’s data file for data and adds them into a new instance ofModule
class. ThisModule
is then returned toModuleList
and set as the selected module.If the
Loader
failed to load the file, null would be returned. If null is not returned,ModuleList
would sort the data and then useWriter
to override the existing file. This is done to remove invalid entries that were initially in the file.