PROJECT: ProManage

ProManage is a professional desktop application for companies that specialises in executing projects that undergoes a long and tedious planning phase. ProManage allow Manager and Employees of project teams to manage their team members and events easily. ProManage is optimized for those who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).

Overview

This project portfolio documents my contributions to the development of the CS2113 project, as part of my team T16-2.

Summary of contributions

  • Major enhancement: Added ability to login, logout, show user personalised event list via the login, logout and showmine command

    • What it does: Allow users to login according to designation

    • Justification: These features allow users to use application’s function according to their designation. Users who login with their personal email are able to list event they are listed as an attendee, therefore remove the need to go through the list of events to find the events they are associated with.

    • Highlights: Users who are at lower privilege level are not allow to use certain commands like add event, edit event, etc. The app will give invalid privilege error message when users attempts to use inappropriate function that does not match their privilege level. This is useful in helping users to differentiate between incorrect input commands and insufficient privilege commands.

  • Minor enhancement:

    • Created sort command which allows user to sort the event list according to the parameters they entered. This create convenient for users to find event in the event list. For example, they are able to sort events according to their date and find events that are occurring at earlier dates.

    • Created the storage components for events so that the event created could be save as XML format.

    • Created the event class and it relevant components to transform the addressbook app to an event planner app.

    • Updated the mainapp to load eventlist xml or a sample of events when the app launches.

    • Implemented ProManageParser which parser all commands

  • Code contributed: [Functional code]

  • Other contributions:

    • Project management:

      • Helped to Managed releases on GitHub

      • Managed the issue tracker on GitHub by creating new issues and closed existing issues that already resolved.

      • Wrote test cases to increase coverage [PR1] [PR2] [PR3] [PR4] [PR5]

    • Documentation:

      • Updated the User Guide for Practical Exam 1

      • Updated the Developer Guide to include sort command, user stories for sort, login and use case for showmine, class diagram for parser.

      • Include new test case for login and sort command for Appendix F under developer guide.

    • Community:

      • PRs reviewed and merged

      • Helped other teammates to debug their code

    • Tools:

      • Setting up of reponsense

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.

Login the app: login

Priority level: default

Login to the app as one of the following identity: manager or employee or as EMAIL.
The user can only login into ProManage if his/her email has been registered in the ProManage system before.
Once login, you will not be able to login again unless the user chooses to logout.

Format: login identity

Example:
login manager
login as johnd@example.com

Logout the app: logout

Priority level: manager, employee

Logout the app once you have login.
After successfully logging out, you will be able to login again.

Format: logout

Example:
logout

Sorting all events: sort

Priority level: all

Sort the event listing based on the key words provided.
Able to sort with event’s name, event’s date, event’s starttime, event’s endtime.

If both event’s have the same date then starttime will be compared.
Key word:
1) event’s name: name
2) event’s date: date
3) event’s starttime: starttime
4) event’s endtime: endtime

Format: sort key word
Example:

  • sort name
    Sort the event list alphabetically

Showing events associated with user: showmine

Priority level: manager, employee

This function is only applicable to users who have login with their email.
Filter and list out events which they are listed as attendees.

Format: showmine

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.

Parser component

ParserClassDiagram
Figure 1. Structure of the Parser Component
  1. ProManageParser use children class of CommandParser (eg. ManagerParser) to parse the user command.

  2. When login/logout command is executed, the CommandParser object within ProManageParser is changed accordingly to DefaultParser, ManagerParser or EmployeeParser.

  3. DefaultParser, ManagerParser or EmployeeParser are subclass of the abstract class CommandParser

  4. This display the behaviour of polymorphism as ProManageParser will always pass the input into CommandParser but its behaviour depends on implementation of its subclass.

  5. Each of it subclass will only know commands that is according to the privilege level.

Event Sorting

Current Implementation

The sort mechanism is facilitated by Comparator<Event>. When the sort method for FXObservableList is called, it will take a Comparator object to be use for sorting the list. The comparator is able to take in two Event class objects and compare the relative parameter values. The parameter can be EventName, Date & StartTime. To allow sorting of these parameters, there are three types of comparators.

SortNewCommand1StateListDiagram
SortSequenceDiagram

Design Considerations

Committing Event List after sorting
  • Alternative 1 (current choice): Commits and saves the entire event list.

    • Pros: Easy to implement and able to use undo to the previous state.

    • Cons: May have performance issues in terms of memory usage.

  • Alternative 2: Does not commit the event list.

    • Pros: Will use less memory.

    • Cons: Unable to use undo function to revert back to the previous view.