Project: TA-Tracker
Overview
TA-Tracker is a productivity tool made for NUS Computing Teaching Assistants (TAs) who want to be able to track and manage all of their claimable hours and the students they are teaching in one place.
Summary of contributions
-
Major Enhancement - Statistic Report Generation
One of the key features of TA-Tracker that ties almost every other system together is the generation of a summary report. As the primary owner of this feature, I was able to integrate almost all of my teammates features into one single cohesive system. This report allowed users to have a overview of the most important data that has been keyed into TA-Tracker.
As there were no similar system in The report feature was built from the ground-up. It was necessary for me to build an entire new set of UI systems, as well as new pipelines such that data from all over the application can be gathered in one location.
-
Major Enhancement: Sessions
Sessions are the core of what makes TA-Tracker work. Users create, edit, and use sessions to accomplish the main goal of TA-Tracker: to manage TAs' teaching dutities.
As sessions are used by many systems, I needed to design the Session model in way such that it would be easy for my team to both extend and use my system. This includes exposing clear extension points and APIs for my teammates.
-
Minor Enhancement: System Notifications
I had also worked on a cross-platform notification system. This system allowed TA-Tracker to create a OS-Level notification from anywhere within the code base.
As with my other features, the design of the notification system was one that was rooted in ease of use by other developers. I was able to do this effectively through the Singleton design pattern. This allowed other features such as timed sessions to work.
Other contributions & Team tasks
-
Setting up GitHub Team, repository and protected branches
-
Application styling & themeing
-
Managed the project by giving feedback on critical pull requests
-
Contributions to various documentations
Some of my relevant PRs are as follows: Relevant PRs: [#213], [#239], [#358], [#84], [#100], [#101], [#103], [#115], [#116], [#151], [#149]
The sections of code that I contributed can be found: [All commits]
Contributions to the User Guide
Statistics Window
Generate Statistic Report : report
(Contributed by Haoyi)
You can use this command to generate a report to display information such as:
-
A breakdown and summary of completed sessions
-
The number of hours of each type of completed sessions
-
A breakdown of your student’s ratings
Optionally, you can specify a module code. If a module code is specified, the report generated will only include data from the specified module.
Pressing the esc key on your keyboard will close the statistics window.
Format: report [MOD_CODE]
|
Example:
-
report
Generate and display a report of sessions and students from all modules.
-
report CS2103T
Generate and display a report of sessions and students from the module CS3243.
Contributions to the Developer Guide
Statistic Report Generation
The Statistics Window can be generated and displayed using the report command.
The command is used to generate a report to display information such as:
-
A breakdown and summary of completed sessions
-
The number of hours of each type of completed sessions
-
A breakdown of your student’s ratings
A module code can be specified such that the generated report will only include data from a specific module.
Implementation
This section describes the implementation of the report command.
The following Sequence Diagram shows the interactions between the UI and the Logic components of TA-Tracker,
when the user enters the command report CS3247.
The following is an example scenario when the user requests for a report of a particular module,
with the command report CS3247.
-
The user command is first read by
MainWindow, through JavaFX.MainWindowpasses the command as aStringto theLogicManagerto be processed. -
LogicManagersends the command toTaTrackerParserfor the command to be parsed. -
The
TaTrackerParserprocesses the first word in the command, and identifies it as aShowStatisticCommand. -
TaTrackerParsercreates aShowStatisticCommandParserobject and passes the command argumentCS3247to theShowStatisticCommandParserobject. -
The
ShowStatisticCommandParserstores the target module,CS3247, in aShowStatisticCommandobject and this command object is returned all the way back to theLogicManager. -
LogicManagerexecutes theShowStatisticCommand, which creates and return aStatiscCommandResult. This command result is returned byLogicManagertoMainWindow -
MainWindowdetects that the command result is of typeStatisticCommandResult, and prepares theStatisticWindowby creating aStatisticobject that retrieves data necessary for generating the report, fromReadOnlyTaTracker. -
The data is then processed further by
Statistic. This includes computing the total number of sessions per session type and sorting the students by rating. -
A
StatisticWindowobject is now created byMainWindow. TheStatisticobject is passed into the constructor ofStatisticWindow. -
Finally,
StatisticWindowupdates its FXML elements and is shown to the user.
System Notification - Ready for Use
(Contributed by Haoyi)
Overview
TA-Tracker supports a cross-platform OS-level notification system. Notifications can be triggered from anywhere within TA-Tracker’s code base. This feature can be used to implement time-based features in V2.0.
Usage
Notifications can be triggered via the Notification class. For example:
Notification.sendNotification("TA Tracker", "You have a consultation scheduled in 15 minutes!", TrayIcon.MessageType.INFO);
On MacOS, the following notification will be triggered.
Implementation
Notifications are implemented with Java’s SystemTray. A SystemTray object will be created when
Notification.sendNotification is invoked for the first time. In order to guarantee that only one
instance of SystemTray is ever created, Notifications are implemented using the defensive Singleton pattern.
The following Activity Diagram shows an example of how a notification can be triggered.
The following is an example scenario when a seperate system requests for two seperate notifications from within TA-Tracker.
-
The static
Notification.sendNotification(…)method is invoked for the very first time. -
The
Notificationclass calls its owngetInstance()function to try to locate an existing instance of the notification singleton object. -
Since this is the first time a notification has been requested,
getInstance()constructs the first notification singleton object. -
A notification in then requested from the singleton.
-
The singleton creates and triggers an OS-level notification.
-
Some time later,
Notification.sendNotification(…)is invoked again. -
The
Notificationclass calls its owngetInstance()function to try to locate an existing instance of the notification singleton object. -
Since the singleton already exists, a notification is requested directly from the existing singleton.
-
The singleton creates and triggers the second OS-level notification.