Project: EduMate

EduMate is a desktop application designed for NUS students to manage their academic and social lives. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 30 kLoC.

Contributions to project

  • Code contributed: RepoSense link

  • New Feature: Added the ability to save/load EduMate to/from a data file. (#81)
    • Justification: The feature serves as a safety net in case the user’s data is lost to corruption or accidental behaviour. It also allows the user to practice their commands without fear of losing their progress.
    • Highlights: This enhancement required the refactoring of the Command Result class, to better support the exit, help, view, save and load commands.
  • New Feature: Added the ability to sort the contacts in EduMate. Users can chain together these comparators to give more sophisticated sorts. (#76, #150, #151)
    • Justification: It allows the user to quickly find contacts that they want, as this sort command will bring those contacts to the top of the list.
    • Highlights: This enhancement required the refactoring of the Prefix class into an enumeration, as these sort keys need to be easily converted into descriptors (Email: Descending). In addition, the person fields needed to be comparable, necessitating the creation of the Module Tag Set and the Group Tag Set. Finally, the FilteredList of persons required an additional SortedList wrapper, in order to sort the person list under JavaFX standards.
  • New feature: Added the ability to generate a sample EduMate. (#40, #80)
    • Justification: The feature allows the user to practice the other commands on a typical EduMate, rather than being forced to insert their own data.
    • Highlights: This feature required the modification of the Sample Data Util to support random selection of contacts. Sample Data was created using Python; module data was retrieved from NUSMods.
  • New Feature: Added the ability to recommend meet, eat, and study locations and timings based on their addresses and schedule. (#144, #194)
    • Justification: This feature simplifies the process of organising meet ups with people by suggesting locations and times that are convenient for everyone.
    • Highlights: Firstly, the data for meet up locations (libraries and malls) was scraped from the internet using Python. Then, the address of the person was repurposed as Station, and uses MRT data retrieved from LTA. The code takes the timing suggestions from the Timing Recommender. From there, the Location Tracker predicts the position of each person at each given time, which is then used by the Location Recommender to suggest locations to meet up. Finally, the Recommender collates this information and gives the most suitable meet ups.
  • Enhancement: Integrated the module tags with the timetable. Enables users to add and remove lessons to a person’s schedule. (#194)
    • Justification: This feature allows the Recommender to suggest more suitable timings to meet up, since it now has access to the person’s schedule.
    • Highlights: When tagging a lesson, EduMate first checks whether the timetable allows the addition. On the other hand, when untagging a lesson, EduMate first checks whether the person has that lesson. Such checks were necessary to ensure the validity of the lessons and schedules.
  • Location: Implemented Location, Distance Util and Location Data Util to handle operations regarding locations. (#119)
  • Commitment: Implemented Commitment to track when a person is available. (#194)
  • Storage: Implemented the Json storage of: Group Tag, Lesson, Location, Module Tag, Recommendation, Tag, Time Period and User. (#8, #76, #194)
  • Testing: Wrote a few test cases for the features mentioned. Sample test data was generated using Python, and test cases were targeted at achieving high coverage rate. (#33, #63, #76, #81, #119, #269)
  • User Guide: Edited the structure, and filled up sections for the implemented features. (#125, #239)
  • Developer Guide: Edited the structure, filled up sections for the implemented features, and created the diagrams for Add, Add Parser, Edit, Edit Parser, Recommender (Class), Recommender (Sequence), Save, Load, Person, Tag, Untag, Commitment and Location. (#56, #77, #156, #157, #162, #236, #330)
  • PRs Authored
  • PRs Reviewed
  • Issues and Bugs Reported
  • Tools:
    • Java 11 and JavaFX and Joda-Time