Lin Yuan Xun, Caleb's Project Portfolio Page
Project: Lifebook
Lifebook is a desktop task management application created during a collaborative project for a module that teaches Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 13 kLoC.
Given below are my contributions to the project.
- New feature: TaskList and tasks: Added the ability to create
Tasks, and add or delete them to or from theTaskListrespectively.- What it does: allows the user to create
Tasksthat may either beTodosorEventsand keep a record of them in theTaskList. - Justification: This feature improves the product significantly because a user can now record information about tasks in Lifebook for future reference and planning.
- Highlights: This required an implementation of the TaskList and Tasks (along with its subclasses). This a basis for more commands and features to be added in the future.
- Credits: inspired from the creation of Bob - the personal assistant, which was my individual project.
- What it does: allows the user to create
- New feature List out Tasks, Events or Todos: Implemented the ability for users to list out all
Tasks,Events, orTodos.- What it does: allows the user to list out
Tasks,Events, orTodos. - Justification: allows the user to view all
Tasks, or if needed, a filtered list of allEventsorTodos. - Credits: inspired from the creation of Bob - the personal assistant, which was my individual project.
- What it does: allows the user to list out
- New feature: Mark tasks as done: Implemented the ability for users to mark tasks as done.
- What it does: allows the user to mark completed tasks as done.
- Justification: allows users to have a record of the tasks that have been completed.
- Credits: inspired from the creation of Bob - the personal assistant, which was my individual project.
- New feature: Sort TaskList and AddressBook Implemented the ability for users to sort the
TaskListandAddressBook.- What it does: allows users to sort the
TaskListandAddressBookby name and date respectively. Users also have the option of restoring both lists to their natural order if needed. - Justification: provides users with intuitively sorted lists. Users normally prefer to look through contact details in alphabetical order, and task details in the order of imminence.
- Highlights: To implement sorting easily, the
TaskListandAddressBookhad to be wrapped by the JavaFX sorted list class, since the JavaFX filtered list class does not support sorting. Also, thanks to bug reporting by peers, I was able to make further refinements to the sorting command in cases whereby the displayed filtered list is empty, or whereby the unfiltered list had no added items.
- What it does: allows users to sort the
- New feature: TaskList GUI: Created a simple GUI for the
TaskListandTasksin the first iteration, which was further enhanced and modified in proceeding iterations by other members.- What it does: allows users to view the
TaskListand its contents. - Justification: provides a means for users to easily access the contents of the
TaskListvia a graphical representation. - Highlights: made it easier for the developing team to visualise any features that they may have implemented in regards to the
TaskListand/orTasks. Implementing this was initially challenging due to my lack of experience with JavaFX. It required me to scrap my initial implementation of the TaskList to create a new one that could provide an observable list to the GUI. - Credits: this GUI implementation for the
TaskListwas inspired by the GUI of contact list of AB3.
- What it does: allows users to view the
- New feature: Storage for TaskList: Implemented storage for the
TaskList- What it does: allows users to store
TaskListdata. - Justification: provides a means for users to easily store and access the contents of the
TaskListfor future sessions. - Highlights: enables greater ease of implementing storage for data of other features pertaining to
Tasksin the future. I had encountered some challenges due to my lack of familiarity with JSON. For instance, I was not aware I had to make additional annotations to serialize/deserialize polymorphic objects with JSON. - Credits: implementation inspired by the existing
Storagecomponent of address book. I referred to a Stack Overflow discussion forum to gain insight on how to resolve my issue regarding JSON adapted polymorphic objects.
- What it does: allows users to store
-
Code contributed: RepoSense link
- Project management:
- Created release
v1.3on GitHub
- Created release
- Enhancements to existing features:
- Reduced coupling of
ModelandLogicin the implementation of the Recurrence feature. #148 - Wrote unit tests for all added storage components that support storage of the contents of
TaskList. #134 - Wrote unit tests for the logical components of the Sorting feature, and updated various test files to fix bugs after correcting the
equalsmethod ofModelManager.#248
- Reduced coupling of
- Documentation:
- User Guide:
- Developer Guide:
- Updated the model architecture diagram to include the newly added model components of Lifebook. #234
- Added implementation details of the
Add Taskfeature. #120 - Added user stories, use cases, and manual testing for the features I implemented #37, #234, #259
- Contributed to the “Effort” section of the appendix #276
- Community:
- Other contributions:
- Contributed to the creation of Lifebook’s demonstration video (script and voiceover).