<== Back to About Us

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:

  1. Implemented ModuleList class and storage system, excluding cheat-sheets.
  2. 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.

  3. 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…

  4. Added days remaining for undone task and used it for sorting.

Contributions to Documentation:

  1. Added data & storage section.
  2. Created skeleton for the command section.
  3. 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:

  1. Created the architecture diagram and did the parts relating to storage.
  2. Added instruction for manual testing.
  3. 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:

  1. Did the release for V1.0.
  2. Fixed minor bugs for some components.

    Examples include fixing the formatting of various list commands, as well as getting focus for the text editor.

  3. Created issues and added labels on the issue tracker.

Review/mentoring contributions:

  1. Reviewed pull requests.

    Examples:

    1. https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/129
    2. https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/125
    3. https://github.com/AY2021S2-CS2113T-W09-3/tp/pull/43
  2. Helped Hemrish resolve some issues regarding cheat-sheets.

Contributions Beyond the Team

  1. Identified bugs during dry run PE. Click here to view.
  2. Answered a few question on the forum.

    Examples:

    1. https://github.com/nus-cs2113-AY2021S2/forum/issues/2
    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:

  1. lesson | <type> | <Day & Time>
  2. lesson | <type> | <Day & Time> | <Link>
  3. lesson | <type> | <Day & Time> | <Link> | <Teaching Staff Name>
  4. lesson | <type> | <Day & Time> | <Link> | <Teaching Staff Name> | <Teaching Staff Email>

⚠ Only accepts 3 lesson types: “lecture”, “lab” and “tutorial”.

Format for Tasks:

  1. task | <description> | <deadline> | <is done> | <is graded>
  2. 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 the Writer class is done through the ModuleList class, whose methods are called by the other components of the app.

writeModule() Sequence Diagram
Figure 11 - writeModule() Sequence Diagram

Whenever some data in a module changes, the command that made those changes would call the method writeModule() in ModuleList to update the change in the data file. This method would then call a method of the same name in the Writer 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 the Loader class are accessed by the other components via the ModuleList class.

loadModuleCodes() Sequence Diagram
Figure 12 - loadModuleCodes() Sequence Diagram

To identify modules in the “Data” directory, Duke would call loadModuleCodes() method in the ModuleList. This method would then call the getModules() method in Loader, which returns a list of module codes. For each of the identified module code, ModuleList would call its own insertModule() method to add it to the module list.

setSelectedModule() Sequence Diagram
Figure 13 - setSelectedModule() Sequence Diagram

When 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 the Loader would be called. This method reads the module’s data file for data and adds them into a new instance of Module class. This Module is then returned to ModuleList 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 use Writer to override the existing file. This is done to remove invalid entries that were initially in the file.