FlowCLI

Logo

A fast, minimal CLI project task manager for efficient task and project management

View the Project on GitHub AY2526S1-CS2113-W13-2/tp

Xylon Chan - Project Portfolio Page

Overview

FlowCLI is a command-line app for managing tasks and projects, built for speed and full keyboard control. Track priorities, deadlines, and statuses, filter and sort in an instant, then export your current view to TXT. If you type fast, FlowCLI helps you move faster than click-heavy apps.

Summary of Contributions

Code contributed

My contributions

Enhancements implemented

Project Management implementation

Summary

The project management component managed all project-related functionality in FlowCLI. They define how projects are created, stored, retrieved, and displayed within the application. Key classes handle the project list, individual project objects, and persistence of project data.

Example

The Create-project command class enables users to add new projects through the CLI by parsing user input, validating project names, checking for duplicates, and updating the project list accordingly. Together, these components form the backbone of project creation and management in FlowCLI.

Testing of code

Contributed to the maintainance as well as the testing of the commands and new features at every stage of the app development. Using concepts learnt in class like assertions , logging and design test cases , created Junit tests to ensure the code work the way it was intended do

Contributions to the User Guide (UG)
Contributions to the Developer Guide (DG)
Contributions to team-based tasks
Contributions beyond the team project
Contributions to the Developer Guide (Extracts)

Project Management features by Xylon Chan

CreateCommand

The Create-project command is facilitated by ProjectListand it is accessed by CommandContext. It extends Command with the feature of reading the user’s project name input and creating a project entity. Additionally , it implements the following operations:

Given below is an example usage scenario and how the create-project feature behaves at each step

User Input: The user enters the create-project command with the project name (e.g., create-project Alpha).

Parsing: The CommandParser identifies the command as create-project and constructs a CreateCommand with the raw arguments.

Execution: The FlowCLI main loop invokes CreateCommand#execute(CommandContext). (Note: CreateCommand extends Command.)

Argument Parsing: Inside execute, CreateCommand extracts the project name from the arguments

Validation: The command validates that the name is non-blank; if blank, it throws MissingArgumentException. It then checks duplicates via context.getProjects().getProject(name) if present, it throws ProjectAlreadyExistsException.

Creating the Project: On success, the command calls context.getProjects().addProject(name) to persist the new project in the model.

UI Feedback: The command obtains the UI via context.getUi() and calls showAddedProject() (or the equivalent success method) to confirm creation to the user.

Return/Logging: The command returns true to signal success and logs at info/fine levels; failures log at warning and do not mutate the model.

Here is a sequence diagram illustrating the process:

CreateCommandSequenceDiagram

Project, ProjectList, Task, and TaskList classes

ProjectRelationshipDiagram

Class Relationships:

This hierarchical structure allows for organized task management within distinct projects, with clear ownership and encapsulation of responsibilities.

Project class

Overview

Represents a single project and encapsulates its name and task collection TaskList. Allows for adding/updatig/deleting tasks within a project without directly coordinating multiple lower-level classes.

Requirements

projectName is non null and should be non-blank when constructed projectTasks is non null after construction

Helping classes

-ProjectList (container) creates and returns Project instances.

API

ProjectList class

Overview

An ArrayList container of Project instances offering indexed access, name-lookup, and simple rendering. This is the central point for commands to manipuate the collection of projects (e.g., create-project, delete-project, list-projects).

Requirements

projects is non null after construction

Helping classes
API