PROJECT: ModuleBook

Overview

The purpose of this portfolio is to document my role and contributions to the ModuleBook project.

My team of four software engineering students and I were tasked with enhancing a basic command line interface desktop addressbook application. It is a requirement for CS2103T Software Engineering project taught at National University of Singapore(NUS). We chose to morph it into a module tracking cum management application called ModuleBook.

This application is tailored to meet the needs of NUS students’ module management problems. It helps students to find and track modules, manage module-specific deadlines and other useful information like quick-links. ModuleBook is a desktop application where user interacts with it using CLI, and it has GUI created with JavaFX. It is written in Java.

This is what our project looks like:

ModuleBookUILayout

My role was to design and write codes for the management of module deadline feature. The following sections illustrate these enhancements in more details, as well as the relevant documentation I have added to the user and developer guides in relation to these enhancements.

Summary of contributions

This section shows a summary of my coding, documentation, and other helpful contributions to the team project.

  • Major Enhancement: Added the deadline management feature.

    • What it does: Allows users to create deadlines by adding description, due date and priority. Deadline tasks are colored to indicate priority and sorted according to priority, date and time. Users can record their progress by marking deadline tasks as done, in progress or undone. They can edit and delete as well.

    • Justification: This benefits students to keep track of the countless deadlines, especially if student is lazy to manually keep track of them. For busy and forgetful students, it helps them to prioritise and organise deadlines for each module. For students who prefer easy navigation and flexibility, deadline feature is customisable as users can easily edit, mark and delete deadlines.

    • Highlights: This enhancement automatically sorts deadlines according to priority, date and time when user adds a deadline task. There is no need for users to sort again after adding deadline tasks.

  • Minor Enhancement: refactored part of commands and parsers.

  • Code contributed: Code contributed

  • Other contributions:

    • Project management:

      • Took part in the release of v1.1 - v1.4 (4 releases) on GitHub

    • Enhancements to existing features:

      • Write codes for exception and error handling (Pull requests #147, #160 )

      • Write tests for deadline tasks (Pull request #169, #177)

    • Documentation:

      • Updated the contact us page, deadline section of developer guide and user guide.

    • Community:

      • PRs reviewed (with non-trivial review comments): (Pull requests #40)

      • Reported bugs and suggestions for other teams: PE Dry Run

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.

Manage deadline tasks: deadline

add

Format: deadline MODULE_LIST_NUM a/add d/DESCRIPTION t/TIME p/PRIORITY

Adds deadline task consisting of description, time and priority to the respective module. Priority inputs are HIGH, MEDIUM OR LOW. Deadline task with HIGH priority is displayed in red, MEDIUM in yellow and LOW in green. Deadline list is sorted according to priority and deadline date and time. All parameters are compulsory. Date and Time must be in dd/MM/yyyy HHmm format.

Example: deadline 1 a/add d/tutorial 1 t/22/10/2019 2359 p/HIGH

Here is result of inputting the above command successfully.

AddDeadlineUI

edit

  • Edit Description

Format: deadline MODULE_LIST_NUM a/edit task/TASK_NUMBER_IN_LIST d/NEW_DESCRIPTION

Edits description from the deadline task numbered in deadline list for the respective module.

Example: deadline 2 a/edit task/2 d/finish increments

  • Edit Time

Format: deadline MODULE_LIST_NUM a/edit task/TASK_NUMBER_IN_LIST t/NEW_TIME

Edits time from the deadline task numbered in deadline list for the respective module. Date and Time must be in dd/MM/yyyy HHmm format.

Example: deadline 3 a/edit task/2 t/29/10/2018 2359

done

Format: deadline MODULE_LIST_NUM a/done task/TASK_NUMBER_IN_LIST

Marks the deadline task numbered in deadline list as done with a tick.

Example: deadline 1 a/done task/2

Here is result of inputting the above command successfully.

DoneDeadlineUI

doneAll

Format: deadline MODULE_LIST_NUM a/doneAll

Marks all the deadline tasks in deadline list as done with a tick.

Example: deadline 1 a/doneAll

in Progress

Format: deadline MODULE_LIST_NUM a/inProgress task/TASK_NUMBER_IN_LIST

Marks the deadline task numbered in deadline list as in-progress with a dash.

Example: deadline 1 a/inProgress task/1

undone

Format: deadline MODULE_LIST_NUM a/undone task/TASK_NUMBER_IN_LIST

Marks the deadline task numbered in deadline list as undone with empty space.

Example: deadline 1 a/undone task/1

delete

Format: deadline MODULE_LIST_NUM a/delete task/TASK_NUMBER_IN_LIST

Deletes deadline task numbered in deadline list from the respective module.

Example: deadline 1 a/delete task/2

deleteAll

Format: deadline MODULE_LIST_NUM a/deleteAll

Deletes all the deadline tasks from the respective module.

Example: deadline 1 a/deleteAll

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.

Deadline Management Feature

As a module management system, one of the important features will be the management of deadlines for each modules.

This section will elaborate the current implementation and design considerations of deadline management feature.

Current implementation

The deadline management feature supports the following main operations.

  • add - adds a new deadline task to the respective module.

  • edit - edits the description or date and time of deadline task.

  • done - marks a deadline task as done.

  • doneAll - marks all the deadline tasks as done.

  • inProgress - marks a deadline task as inProgress.

  • undone - marks a deadline task as undone

  • delete - deletes an existing task from the deadline list.

  • deleteAll - deletes the entire deadline list from a module.

The following activity diagram summarises what happened when a user executes the AddDeadlineCommand:

AddDeadlineActivityDiagram
Figure 1. Activity Diagram for the execution of AddDeadlineCommand.

The format to add deadline command is as follows:

deadline 2 a/add d/description t/dateAndTime p/priority

The add deadline mechanism is facilitated by AddDeadlineCommand and AddDeadlineCommandParser. It takes in the following input from the user: MODULE_LIST_NUMBER, DESCRIPTION, DATE_AND_TIME and PRIORITY which will construct a Deadline object to be added to the deadline list.

Given below is an example usage scenario of how add deadline mechanism behaves at each step.

Step 1. The user executes:

deadline 2 a/add d/do homework t/2/12/2019 1645 p/MEDIUM

Step 2. LogicManager would use ModuleBookParser#parseCommand() to parse input from the user.

Step 3. ModuleBookParser would determine which command is being used and creates the respective parser. In this case, DeadlineCommandParser is being created from the COMMAND.WORD: deadline and the user’s input would be passed in as a parameter.

Step 4. DeadlineCommandParser would then determine which action is being used and creates the respective parser. In this case, AddDeadlineCommandParser is created and user’s input would be parsed.

Step 5. AddDeadlineCommandParser would do a validation check on the user’s input before creating and returning a AddDeadlineCommand with index and Deadline as its attributes. index represents the TrackedModule list index (i.e 2) which the Deadline object will be added to.

Step 6. LogicManager would execute AddDeadlineCommand#execute(), checks whether there is an existing module, then adds to the TrackedModule.

Step 7. AddDeadlineCommand would return a CommandResult to the LogicManager.

The following sequence diagram illustrates how the add deadline operation works:

AddDeadlineSequenceDiagram
Figure 2. Sequence Diagram diagram for AddDeadlineCommand.

Design Considerations

Aspect: Data Structure used to support add command

  • Alternative 1(Current choice) : Use of ArrayList to store deadline tasks in a TrackedModule.

    • Pros: Commands (eg. edit, sort, delete) can be easily supported by a list operations.

    • Pros: Ensures that only one deadline list is maintained for each TrackedModule.

    • Cons: More difficult to maintain over the course of the project. New commands(eg. done, priority) need to edit and maintain the list constantly.

    • Cons: Duplicate deadline tasks harder to identify.

  • Alternative 2 : Use a HashSet to store deadline tasks in a TrackedModule.

    • Pros: Duplicate deadline tasks can be identified easily.

    • Cons: Not easy to identify tasks using index.