PROJECT: Mod Manager

Overview

For this software engineering project, my team and I were tasked with morphing Address Book Level 3 (AB3) application into a better and different product. We decided to make ModManager, which aims to help students in managing module related information such as modules, classes, tasks and facilitators. Mod Manager is made for those who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). It is written in Java and has about 25kLoC.

Below is an example of what ModManager looks like:

Ui

Summary of contributions

This section summarizes my contribution to ModManager.

Major enhancement:

  • Implemented the class management feature

    • What it does: allows the user to add, view, edit and delete classes.

    • Justification: This feature improves the product because a user can manage their classes and find upcoming class, which allow the user to better prioritize their time and prepare for their classes.

    • Highlights: There is some dependency between this feature and other features. It required an in-depth analysis of design alternatives. The implementation was tough due to parsing. Since there were various arguments and command formats considered, parsing was tougher than usual.

Minor enhancement:

  • Sorted the classes by time.

  • Enhanced the aesthetics of the GUI.

Code contributed:

Other contributions:

  • Project management:

    • Merged pull requests

  • Enhancements to existing features:

    • Updated the GUI color scheme (Pull requests #117)

    • Wrote additional tests for existing features to increase coverage from 50% to 62% (Pull requests #115)

  • Documentation:

    • Updated contact us, about us and readme file : #5, #22

    • Updated introduction, user profile, value proposition and user stories of Developer Guide : #22

    • Added class feature of User Guide: #12, #181

    • Added implementation and use cases of class management feature of Developer Guide: #22, #124

  • Community:

    • PRs reviewed (with non-trivial review comments) : #95

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Class feature : class

You can add, find, edit or delete classes within Mod Manager.
When managing your classes, you should take note of the following areas in the main viewing area. To find the main viewing area, you can refer to section 3.1.

ClassExplain
Figure 1. Explanation of how to look at classes

Adding a class (Heidi)

You can add a class to a module.

Format:

  • class add /code MOD_CODE /type CLASS_TYPE /at DAY START_TIME END_TIME [/venue VENUE]

Command properties:

  • MOD_CODE must be an existing and valid module code in the list of modules.

  • CLASS_TYPE available for use are LEC, TUT, SEC, REC and LAB.

  • DAY available for use are MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.

  • START_TIME and END_TIME should be in 24 hour HH:mm format.

  • VENUE is optional.

Example:

You have a CS2103T lecture on Friday from 14:00 to 16:00 at i3-Aud. Before adding that class, Mod Manager looks like what you see in the figure below.

ClassAddBefore
Figure 2. Before adding a class

To add that class, you can type:
class add /code CS2103T /type LEC /at FRIDAY 14:00 16:00 /venue i3-Aud.
You will see a new class added to the module CS2103T as shown in the figure below.

ClassAddAfter
Figure 3. After adding a class

Finding classes by day (Heidi)

You can find classes occurring on a particular day.

Format:

  • class find /at DAY

Command properties:

  • DAY available for use are MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.

Example:

To know what classes you have on Friday, you can type class find /at friday and you will be able to see the classes in the result display box as shown in the figure below.

ClassFindDay
Figure 4. After finding class by day

Finding next class (Heidi)

You can find the next class that will start soon.

Format:

  • class find /next

Example:

After typing class find /next, you will be directed to the module’s page and you will see the class as shown in the figure below.

ClassFindNext
Figure 5. After finding next class

Editing a class (Heidi)

You can edit the information of the class. The class to be edited is selected by its index in the displayed module’s class list. You can view the module’s class list by using mod view MOD_CODE as stated in section 3.2.3.

Format:

  • class edit INDEX /code MOD_CODE [/code NEW_MOD_CODE] [/type CLASS_TYPE] [/at DAY START_TIME END_TIME] [/venue VENUE]

Command properties:

  • The index refers to the index number shown in the displayed module list. The index must be a positive integer 1, 2, 3, …​

  • MOD_CODE must be an existing and valid module code in the list of modules.

  • CLASS_TYPE available for use are LEC, TUT, SEC, REC and LAB.

  • DAY available for use are MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.

  • START_TIME and END_TIME should be in 24 hour HH:mm format.

  • At least one of the optional fields must be provided.

Example:

Let’s say that the venue of the CS2103T lecture you just added changed to Home. You can edit the class by typing class edit 1 /code CS2103T /venue Home. Mod Manager will direct you to the module’s page and it will reflect the updated venue as seen below.

ClassEdit
Figure 6. After editing a class

Deleting a class (Heidi)

You can delete the class from the module. The class to be deleted is selected by its index in the displayed module’s class list. You can view the module’s class list by using mod view MOD_CODE as stated in section 3.2.3.

Format:

  • class delete INDEX /code MOD_CODE

Command properties:

  • The index must be a positive integer 1, 2, 3, …​

Example:

You can delete the CS2103T lecture by typing class delete 1 /code CS2103T. The class will not appear in the class list under the module CS2103T as seen below.

ClassDelete
Figure 7. After deleting a class

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Class Management Feature

The class feature manages the classes in Mod Manager and is represented by the Lesson class. A class has a ModuleCode, LessonType, DayAndTime and venue which is a String.

It supports the following operations:

  • add - Adds a class to Mod Manager.

  • find - Finds specific classes in Mod Manager.

  • edit - Edits a class in Mod Manager.

  • delete - Deletes a class in Mod Manager.

Implementation Details

Adding a class (Heidi)

The add class command allows user to add a class to Mod Manager. This feature is facilitated by LessonCommandParser, LessonAddCommandParser and LessonAddCommand. The operation is exposed in the Model interface as Model#addLesson().

Given below is an example usage scenario and how the lesson add mechanism behaves at each step.

  1. The user executes the lesson add command and provides the module code, lesson type, day, start time, end time and venue of the lesson to be added.

  2. LessonAddCommandParser creates a new Lesson, then a new LessonAddCommand.

  3. LogicManager executes the LessonAddCommand.

  4. ModManager adds the Lesson to LessonList.

The following sequence diagram shows how the lesson add command works:

LessonAddSequenceDiagram
Figure 8. Sequence Diagram for class add Command
The lifeline for LessonCommandParser, LessonAddCommandParser and LessonAddCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.

The following activity diagram summarizes what happens when a user executes a lesson add command:

LessonAddActivityDiagram
Figure 9. Activity Diagram for class add Command
Finding a class (Heidi)

The find class command allows user to find a class to Mod Manager. This feature is facilitated by LessonCommandParser, LessonFindCommandParser and LessonFindCommand. The operation is exposed in the Model interface as Model#findNextLesson() and Model#findLessonByDay.

Given below is an example usage scenario and how the lesson find mechanism behaves at each step.

  1. The user executes the lesson find command with the next prefix.

  2. LessonFindCommandParser creates a new LessonFindCommand.

  3. LogicManager executes the LessonFindCommand.

The following sequence diagram shows how the lesson find command works:

LessonFindSequenceDiagram
Figure 10. Sequence Diagram for class find Command
The lifeline for LessonCommandParser, LessonFindCommandParser, LessonFindCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of the diagram.

The following activity diagram summarizes what happens when a user executes a lesson find command:

LessonFindActivityDiagram
Figure 11. Activity Diagram for class find Command
Editing a class (Heidi)

The edit class command allows user to edit a class to Mod Manager. This feature is facilitated by LessonCommandParser, LessonEditCommandParser and LessonEditCommand. The operation is exposed in the Model interface as Model#setLesson().

Given below is an example usage scenario and how the lesson edit mechanism behaves at each step.

  1. The user executes the lesson edit command and provides the index of the lesson to be edited, the module code of the lesson and the fields to be edited.

  2. LessonEditCommandParser creates a new EditLessonDescriptor with the fields to be edited.

  3. LessonEditCommandParser creates a new LessonEditCommand based on the index and module code, and EditLessonDescriptor.

  4. LogicManager executes the LessonEditCommand.

  5. LessonEditCommand retrieves the lesson to be edited.

  6. LessonEditCommand creates a new Lesson.

  7. ModManager sets the existing lesson to the new lesson in the LessonList.

The following sequence diagram shows how the lesson edit command works:

LessonEditSequenceDiagram
Figure 12. Sequence Diagram for class edit Command
The lifeline for LessonCommandParser, LessonEditCommandParser, EditLessonDescriptor and LessonEditCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.

The following activity diagram summarizes what happens when a user executes a lesson edit command:

LessonEditActivityDiagram
Figure 13. Activity Diagram for class edit Command
Deleting a class (Heidi)

The delete class command allows user to add a class to Mod Manager. This feature is facilitated by LessonCommandParser, LessonDeleteCommandParser and LessonDeleteCommand. The operation is exposed in the Model interface as Model#removeLesson().

Given below is an example usage scenario and how the lesson delete mechanism behaves at each step.

  1. The user executes the lesson delete command and provides the index of the lesson to be deleted.

  2. LessonDeleteCommandParser creates a new LessonDeleteCommand.

  3. LogicManager executes the LessonDeleteCommand.

  4. LessonDeleteCommand retrieves the lesson to be deleted.

  5. ModManager deletes the Lesson from LessonList.

The following sequence diagram shows how the lesson delete command works:

LessonDeleteSequenceDiagram
Figure 14. Sequence Diagram for class delete Command
The lifeline for LessonCommandParser, LessonDeleteCommandParser and LessonDeleteCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of the diagram.

The following activity diagram summarizes what happens when a user executes a lesson delete command:

LessonDeleteActivityDiagram
Figure 15. Activity Diagram for class delete Command

Design Considerations (Heidi)

Aspect: Prefix of day and time
  • Alternative 1 (current choice): Have one prefix for all three day, startTime and endTime fields.

    • Pros: User types less.

    • Cons: When user wants to edit one field only, user have to key in other unnecessary details.

  • Alternative 2: Have one prefix each for day, startTime and endTime fields.

    • Pros: Easier to parse and less invalid inputs to take note of. User can also edit any field.

    • Cons: More prefixes to remember and command will be very lengthy.

Appendix A: User Stories

Priorities:
High (must have) - * * *
Medium (nice to have) - * *
Low (unlikely to have) - *

Priority As a …​ I can …​ so that …​

* * *

new user

see usage instructions

I can refer to instructions when I forget how to use the App

* * *

student

add a module I am taking

I can keep track of the information related to the module

* * *

student

add a class

I can keep track of the classes I have for a particular module

* * *

student

add a task

I can keep track of the tasks I have for a particular module

* * *

student

add facilitators' information

I can keep track of the information of the facilitators

* * *

student

view information related to a module

I can prepare for each module

* * *

student

view all tasks across all modules

I can organise, plan, and manage my tasks better

* * *

student

view tasks for a specific module

I can manage and keep track of homework, programming assignments, and other tasks specifically for the module

* * *

student

view all tasks not done

I know what tasks are not yet completed and do them

* * *

student

view facilitators' information

I can contact them when I need help

* * *

student

edit a module

I can update the module

* * *

student

edit a class

I can keep my classes up to date

* * *

student

edit a task

I can keep my tasks up to date

* * *

student

mark a task as done

I can keep track of what tasks I have completed and what I have not yet completed

* * *

student

edit a facilitator’s information

I can keep their contact details up to date

* * *

student

delete a module

I can use the App for different semesters

* * *

student

delete a class

I can remove classes that I am no longer in

* * *

student

delete a task

I can remove tasks that I no longer need to track

* * *

student

delete a facilitator’s information

I can remove information that I no longer need

* * *

busy student

view schedule for the current week

I can prepare for them

* * *

busy student

view schedule for the upcoming week

I can prepare for them

* * *

new user

view all commands

I can learn how to use them

* * *

new user

view commands for a specific feature

I can learn how to use them

* * *

user

import and export data

I can easily migrate the data to another computer

* * *

user

undo or redo my commands

I can save time from trying to fix my mistakes

* *

student

find a facilitator by name

I can locate details of facilitators without having to go through the entire list

* *

student

find tasks by description

I can find the exact tasks that I want to do, such as a particular programming assignment on multimedia streaming

* *

student

search tasks by its date

I know what tasks are happening today, tomorrow, this month, next month, or any other time periods

* *

student

find upcoming tasks

I can prioritise them

* *

busy student

find empty slots in my schedule

I can manage my time easily

* *

user

see my past commands quickly

I can re-use a command without having to type it again

*

student

mark a task as done

I can not take note of them anymore

*

student

add a priority level to a task

I can prioritise my tasks

*

student

tag my tasks

I can categorise them

*

student

see countdown timers

I can be reminded of deadlines

*

busy student

I can receive reminders about deadlines and events the next day

take note of them

*

student

mass delete the modules

I can delete them quickly once the semester is over

*

advanced user

I can use shorter versions of a command

type a command faster

*

careless user

undo my commands

I can undo the mistakes in my command

*

visual user

see a clear GUI

I can navigate the App more easily

Appendix C: Use Cases

Use case: UC06 - Add class

MSS

  • 1. User request to add a class and provides the details of the new class.

  • 2. Mod Manager adds a class.

    Use case ends.

  • 1a. Compulsory fields are not provided or fields provided are invalid.

    • 1a1. Mod Manager shows an error message.

      Use case resumes from step 1.

Use case: UC07 - Find class by day

MSS

  • 1. User request to list all the classes by day and provides the day.

  • 2. Mod Manager replies with the list of classes.

    Use case ends.

  • 1a. Day provided is invalid.

    • 1a1. Mod Manager shows an error message.

      Use case resumes from step 1.

  • 1b. No class on the day provided.

    Use case ends.

Use case: UC08 - Find next class

MSS

  • 1. User request to find the next class.

  • 2. Mod Manager replies with the next class.

    Use case ends.

  • 1a. No next class.

    Use case ends.

Use case: UC09 - Edit class

MSS

  • 1. User request to edit a class and provides the index and necessary details to be edited.

  • 2. Mod Manager edits the class.

    Use case ends.

  • 1a. Index is not provided or invalid, or details are not provided or invalid.

    • 1a1. Mod Manager shows an error message.

      Use case resumes from step 1.

Use case: UC10 - Delete class

MSS

  • 1. User requests to delete a class and provides the index.

  • 2. Mod Manager deletes the class.

    Use case ends.

  • 1a. Index is not provided or is invalid.

    • 1a1. Mod Manager shows an error message.

      Use case resumes from step 1.