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).