Team Member: Lam Cheng Hou
SEPlendid is a versatile application used by prospective exchangers to plan their Student Exchange Programme (SEP) study plans. Students from NUS Computing can use this CLI-based application, with a beautiful GUI, to view partner universities and course mappings. The application is also bundled with many other useful features.
Given below are my contributions to the project.
New Feature 1: Added the ability to list, add and delete local courses.
(PRs:
#68,
#69,
#78,
#92,
#97)
What it does: Allows the user to list local courses, specifying the local course code, local course name and other relevant attributes. The user can also delete local courses, by specifying its local code. Lastly, users are able to list the local courses, to be display on the UI.
Justification: This feature is essential as it allows the user to manage the local courses available to map, which are preloaded in releases and also added by the user. This feature is also essential for the mapping feature, as it represents the NUS local course being mapped.
Highlights: This enhancement began our work on morphing AB3 into SEPlendid. It required an in-depth understanding of the existing code base, and provides the basis for other data types such as partner course (added by Sohyun), university (added by Alyssa) and notes (added by Alicia). It was important to maintain a consistent implementation across the codebase, and thus local course had to be implemented well to ensure that the other data type can follow suit. The main challenge was to identify that a local course cannot be deleted if it is being used in a mapping.
New Feature 2: Added the mappings feature, including ability to list, add, delete, sort and search
(PRs:
#110,
#146,
#176)
Sub-feature 2.1 (list mappings): Allows the user to list mappings, which include details on local courses, partner courses, universities and information description of individual mappings.
Sub-feature 2.2 (add mappings): Allows the user to add mappings from a local course to a partner course offered by an overseas university. The user has to specify a local code of an existing local course, a partner code of an existing partner course and the name of the university offering that partner course.
Sub-feature 2.3 (delete mappings): Allows the user to delete mappings by specifying the local code, partner code 3 and university name tied to an existing mapping.
Sub-feature 2.4 (sort mappings): Allows the user to sort mappings by any of the attributes of a mapping, namely the local course code/name, partner course code/name, overseas university name and mapping-specific information.
Sub-feature 2.5 (search mappings): Allows the user to search mappings by any of the attributes of a mapping, namely the local course code/name, partner course code/name, overseas university name and mapping-specific information.
Justification: This feature is the core of our application, and provides the most value to our target users, NUS Computing students looking to embark on their exchange programmes. On top of basic functionality such as list, add and delete commands, I have decided to add sort and search commands for all mapping attributes. This is because a student might want to search for a mapping by any of the attributes. For instance, searching for a mapping by the university name might show all mappings offered by that partner university. Similarly, students can search for mappings by a specific partner course name e.g. 'Artificial Intelligence', to narrow down universities which offer a certain type of course.
Highlights: This feature greatly depends on my teammates' work, which is why project management was also an important aspect of my experience with this course. The main challenge with this feature was how our data was designed. I decided on a relational-database-like design, in order to not have any data redundancy. Our local course, partner course, university and notes catalogue were akin to relations in a relational database, while the mappings table represented the many-to-many relationship between local courses and partner courses. With this design, I had to come up with a creative way to implement sort and search for mappings, by local/partner course names. I also had to minimise coupling between the components, and ensure that the code was modular and extensible.
New Feature 3: Added the functionality to switch between list views for different data types.
What it does: Allows the User Interface to switch between lists of different data types based on their
respective commands. For instance, localcourse list
will switch to the list of local courses, and partnercourse list
will subsequently switch a list of partner courses.
Justification: This feature was key for the User Interface to function properly, as it switches the view based
on the CommandResult
.
Highlights: This enhancement required some understanding of how the execution flow of a command. As we had to
deliver a minimum viable product, I had to ensure that the ability to switch between views was done effectively.
The main challenge was to identify that CommandResult
was a good way to implement this.
Code contributed: RepoSense link
Project management:
v1.1
, v1.2
, v1.2b
(3 milestones).v1.3.1
(1 release) on GitHub, used for PE-D.Enhancements to existing features:
StorageManager
to be able to handle more data types.SeplendidArgumentMap
, SeplendidArgumentTokenizer
and SeplendidParser
on top of the existing AB3's
parsing logic to implement our command set. See PR here.
(Note: SeplendidParser
had recently been refactored by another teammate who used code from
my PR, which had been closed.)ModelManager
to become SeplendidModelManager
to support more niche functionalities such as
getLocalCourseIfExists
.Documentation:
SeplendidParser
Storage
and SeplendidModel
Community:
Tools: