Developer Guide

Table of content

1. Introduction

1.1 Software Overview

1.2 Purpose

1.3 Scope

2. Setting up and getting started

3. Design

3.1 Architecture

3.2 Classes

3.2.1 Ui class
3.2.2 Parser class
3.2.3 Module class
3.2.4 Task class
3.2.5 TimeTable class
3.2.6 TaskList class
3.2.7 ProjectManager class

4. Implementation

5. Documentation and Dev-ops

Appendix A: Product Scope

Target user profile

Value proposition

Appendix B: User Stories

Appendix C: Non-Functional Requirements

Appendix D: Glossary

Appendix E: Instructions for manual testing

1. Introduction

1.1 Software Overview

CEGMods is a command line (CLI) application that helps computer engineering (CEG) students to manage their modules, tasks and projects.

CEGMods will allow students to categorize their tasks based on their modules and automatically help prioritize them by deadlines. It will also help students manage project deadlines by splitting them into mini-milestones.

1.2 Purpose

This document describes the architecture and software design of CEGMods. The goal of this document is to cover the high-level system architecture and design.

The document is divided into three main parts: design, implementation and documantation. The design includes the architecture diagram and the introduction of each class. The implementation describes some details on how certain features are implemented. The documentation details the logging, testing and configuration of CEGMods. It also includes the requirement and the instructions for manual testing in the appendices.

1.3 Scope

The intended audience of this document is the developers, designers, and software testers of CEGMods.

2. Setting up and getting started

Setting up the project in your computer

<font color=#FF5733>Caution: </font> <font color=#00000><font color=#00000> Please follow each steps in the guide carefully. </font>

Before you start:

Please ensure you have Java 11 installed in you computer.

  1. Fork this repo from this link
  2. Clone the fork to your own computer. You are highly recommended to use Git tool (like Sourcetree) to track your work.
  3. Use your own IDEA to program. You are highly recommended to use IntelliJ IDEA. Please check whether you have correct JDK version (JDK 11) in your computer and congiure the JDK.

    If you are using IntelliJ IDEA:

    • Open IntelliJ
    • Set up JDK 11 for Gradle
      1. Click Configure -> Project Defaults -> Project Structure
      2. Click New... and set it to the directory of the JDK 11 installed
  4. Import the project as a Gradle project.

    <font color=#FF5733>Note: </font> <font color=#00000> It is different from importing a normal Java project.</font>

    If you are using IntelliJ IDEA:

    • Click Import Project (or Open or Import in newer version of Intellij).
    • Locate the build.gradle file (not the root folder as you would do in a normal importing) and select it. Click OK.
    • Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project.
    • Wait for importing process to complete
  5. Do the testing. Please follow the testing guide

    3. Design

    3.1 Architecture

    The Class diagram given below shows the interaction between major classes, and explains the structure of the software system. F2bCN9.md.png

3.2 Classes

The CEGMods consists of six classes:

3.2.1 Ui class

The Ui class reads the user’s input and response relevant messages. It also contains the welcome message and help message to help the user navigate the

3.2.2 Parser class

The Parser class deals with making sense of the user’s command and execute the command relevantly:

3.2.3 Module class

The Module class contains the information of a module, including the title, description, and time slots of lectures, tutorials and labs.

3.2.4 Task class

The Task class contains the information of a task, including the todo, event and deadline tasks.

3.2.5 TimeTable class

The Timetable class shows the timetable for all the module slots and tasks. It also stores Module details in an arraylist and checks whether there is a time conflict between two classes.

3.2.6 TaskList class

Feature: Add a module

The user type in command in module mod/<MODULE_CODE> lec/<LECTURE_DAY> <LECTURE_TIME> tut/<TUTORIAL_DAY> <TUTORIAL_TIME> lab/<LAB_DAY> <LAB_TIME> this form to add a module into the timetable. The time slot of lab is optional. The program will detect whether the user command is in this form, and store module data in arraylist modules in Timetable class after Ui passing command and calling addModule() in Parser class.

The sequence diagram below shows the interaction between these classes when the user adds a module. F2bWSp.md.png

Feature: Delete a module

The user enters the command: delete mod/<MODULE_CODE> to delete a module in the timetable. The Parser class will take this user command and pass it to Command class to enable the deleteModule() method in the TimeTable class.

Feature: Add a task

The user enters the command: todo <DESCRIPTION> to add a todo task in the tasklist.

The user enters the command: deadline <DESCRIPTION> /by <YYYY-MM-DD HH:mm> to add a deadline in the tasklist.

The user enters the command: event <DESCRIPTION> /at <YYYY-MM-DD HH:mm> to add an event in the tasklist.

The user enters the command: mod/<MODULE_CODE> ptask/<DESCRIPTION> by/<TIME_DESCRIPTION> to add a project subtask in the tasklist.

The Parser class will take the user command and pass it to the Command class to enable the addToDo/addDeadline/addEvent/addProjectTask/ method, and then call both addTask method in TaskList class and appendToFile method in Storage class to update the task list.

Feature: Delete a task

The user enters the command: delete task/<TASK_INDEX> to delete a task from the tasklist. The Parser class will take the user command and pass it to the Command class to enable the deleteTask method, and then call both the deleteTask method in TaskList class and deleteTaskFromFile method in Storage class to update the task list.

07e49575c71a4dca7fd8f90387972a09b5b874cc

Feature: Print task list

The user enters the command: task list to view the task list. The Parser class will take the user command and pass it to the TaskList class to enable the printList method.

Feature: View time table

The user enters the command: today timetable or this week timetable to view the the timetable. The Parser class will take the user command and pass it to the Command class to enable the printTodayTimetable or printWeeklyTimetable method, and then call printTodayTimetable or printWeeklyTimetable method in TimeTable class.

5. Documentation and Dev-ops

Documentation

Setting up and maintaining the project website:

Style guidance:

Diagrams:

Converting a document to the PDF format:

See the guide [se-edu/guides] Saving web documents as PDF files.

DevOps Guide

Making a release

Here are the steps to create a new release.

  1. Update the version number in Main.java.
  2. Generate a fat JAR file using Gradle (i.e., gradlew shadow).
  3. Tag the repo with the version number. e.g. v0.1
  4. Create a new release using GitHub. Upload the JAR file you created.

Build Automation

We use Gradle for tasks related to build automation, such as running tests, and checking code for style compliance.

To run all build-related tasks:

  1. Open a terminal in the project’s root directory.
  2. Run the command:
    • Windows: gradlew build
    • MacOS/Linux: ./gradlew build
  3. A message stating BUILD SUCCESSFUL will be shown in the terminal if all tasks run successfully. Otherwise, use the error report provided to resolve the issue before trying again.

Appendix A: Product Scope

Target user profile

This application is intended for users who

Appendix D: Glossary

Appendix E: Instructions for manual testing

This portion contains instructions on how to perform manual testing.

=======

07e49575c71a4dca7fd8f90387972a09b5b874cc