PROJECT: Mark


1. Introduction

This document will introduce my role and contribution in Mark. Mark is a 6 weeks group project for the module CS2103T Software Engineering. Our team composed of 5 NUS Computer Science year 2 students. From this project, we learn the skill of designing a Java application with basic CRUD structure, working on git, distributing works on Github, negotiating and teamwork.

Mark is a enhanced version of Address Book (Level 3) and target on NUS computing students. This application is a desktop bookmark manager used for organising websites. This application can help the user organize websites by bookmarks, manage the bookmarks into folders, take note on the offline copy and set reminders for the task. The user interacts with Mark using a Command Line Interface (CLI), and it uses a Graphical User Interface (GUI) created with JavaFX. Mark is written in Java.

This is what our app looks like:

400

My role is to design and implement the reminder feature. The following section will illustrate more about this feature.

Note the following symbols and formatting used in this document:

Represents the things you need to notice.

reminder: Represents the command.

  • TAG : Represents the constraints of the command.

2. Summary of contributions

  • Major enhancement:
    added the ability to add, edit, delete and goto reminders.

    • What it does: allows the user to add a reminder to a specific bookmark. The reminder will remind users at the time they indicate. Users can also edit and delete it, or even using reminder to open the bookmark .

    • Justification: When users want to plan to read or do some task on bookmark, this feature can provide them a better way to plan and organize their task, and they would not forget to doing it.

    • Highlights: This feature will help the user automatically cleanup expired reminders after one hour, so they do not need to bother themselves to delete it. The notification will show up twice, the first time will show before five hour to leave users some time before the deadline. Even if users do not close the notification, the notification will disappear after one minute.

    • Credits: Stackoverflow gives me the idea of how to implement a reminder notification.

  • Code contributed:
    Please click this link to see a sample of my code. [Here]

  • Other contributions:

    • Project management:

      • Check and merge pull requests on GitHub

    • Enhancements to existing features:

      • Improve the GUI style and format (Pull requests #228, #123)

      • Wrote tests for existing features to increase coverage form 77.01% to 77.10% (Pull requests #251)

    • Documentation:

      • Added the reminder part for User Guide and Developer Guide: Pull requests #48, #53, #130, #162

      • Edited About Us and Contact Us document: Pull requests #24, #26

    • Community:

      • PRs reviewed (with non-trivial review comments): #66, #133, #139

      • Reported bugs and fix issue (Issue #229, #194, #178)

    • Tools:

      • Integrated a third party library (ControlsFX) to the project (Pull requests #42)

3. Contributions to the User Guide

This part is about the sections I contributed to the User Guide. The section extracted from the User Guide below showcase my ability to write a formal document to our target users.

------------- This is the start of the excerpt -------------


3.1. Reminders

The following commands carry out operations on reminders in Mark. You can find reminders on the Dashboard tab.

3.1.1. Adding a reminder: reminder

This command adds a reminder to a specified bookmark. The reminder will inform you at the time you indicate.

You can have at most one reminder for one bookmark.

The reminder cannot set the reminding time in the past.

Each reminder will reminds you with popup notification twice:

The first notification will show when the reminding time is within five hours, the second time is on the reminding spot.

The expired reminder will be auto delete after one hour.

Format: reminder INDEX t/TIME_DATE [n/NOTE=Open]

For example:

You are using Mark, and you want to remind yourself to do the quiz on Luminus bookmark tomorrow night, which is 18/11/2019 8p.m. Now you can use the reminder command to add a reminder to Luminus.

To add a reminder:

  • The index of Luminus on reminder list is 2. You type the command reminder 2 t/18/11/2019 2000 n/Do the quiz into the command box and press Enter to execute it.

400
  • The result box will show the message:
    "New reminder added: Do the quiz Time: 18/11/2019 2000 URL:https://luminus.nus.edu.sg/".
    And the reminder is added to the reminder list.

400

There are some parameter constraints:

  • INDEX is the index of the bookmark that you want to add with a reminder.

  • TIME_DATE follows dd/MM/uuuu HHmm format. It should be a valid time.

  • NOTE is the description of the reminder, the default value is Open.

Other examples:

  • reminder 1 t/02/07/2019 2359
    This command line adds a reminder for bookmark 1, and sets the time of the reminder as 23:59 of 02/07/2019. It reminds you to open the bookmark.

  • reminder 1 t/02/07/2019 2359 n/Read announcements
    This command line adds a reminder for bookmark 1, and sets the time of the reminder as 23:59 of 02/07/2019. The reminder reminds you to read announcements.

3.1.2. Editing a reminder: reminder-edit

This command edits the reminder in the list at the specified index. You can edit either the time or the note of the reminder.

Format: reminder-edit INDEX [t/TIME_DATE] [n/NOTE]

For example:

You have another assignment on Luminus that need to be done tomorrow morning, which is 10/11/2019 7 a.m. You want to change the note for reminder to remind you do the assignment. Now you can use the reminder-edit command to edit the reminder for Luminus.

To edit a reminder:

  • The index of the reminder in the reminder list is 1. You type the command reminder-edit 1 n/Do the quiz and the assignment into the command box and press Enter to execute it.

400
  • The result box will show the message:
    "Edited Reminder: Do the quiz and the assignment Time: 18/11/2019 2000 URL:https://luminus.nus.edu.sg/".
    The reminder is edited in the reminder list.

400

There are some parameter constraints:

  • INDEX is the index of the reminder you want to edit on the dashboard.

  • TIME_DATE is the time you want to edit. The time follows dd/MM/uuuu HHmm format. It should be a valid time.

  • NOTE is the description of the reminder that you want to edit.

Other examples:

  • reminder-edit 1 t/02/07/2019 2359
    This command edits the reminder of index 1. Reset the time of the reminder to 23:59 of 02/07/2019.

  • reminder-edit 1 t/02/07/2019 2359 n/Check daily news
    This command edits the reminder of index 1. Reset the time of the reminder to 23:59 of 02/07/2019. Reset the note to Check daily news.

3.1.3. Deleting a reminder: reminder-delete

This command deletes the the reminder in the reminder list at the specified index.

Format: reminder-delete INDEX

  • INDEX is the index of the reminder you want to delete on the dashboard.

For example:

You finished your task on Luminus early, and you do not need the reminder for Luminus anymore. Now you can use the reminder-delete command to delete the reminder for Luminus.

To delete a reminder:

  • The index of the reminder in the reminder list is 1. You type the command reminder-delete 1 into the command box and press Enter to execute it.

400
  • The result box will show the message:
    "Deleted Reminder: Do the quiz and the assignment Time: 18/11/2019 2000 URL:https://luminus.nus.edu.sg/"
    The reminder is deleted in the reminder list.

400

Other examples:

  • reminder-delete 2
    This command deletes the reminder of index 2.

3.1.4. Opening a bookmark from a reminder: reminder-goto

Opens the related bookmark of the specified reminder from the bookmark manager.

Format: reminder-goto INDEX

  • INDEX is the index of the reminder as viewed on the dashboard.

  • INDEX must be a positive integer 1, 2, 3, …​

For example:

You want to check your course curriculum , which is a task on reminder list. Now you can use the reminder-goto command to open the website.

To open the bookmark of a reminder:

  • The index of the reminder in the reminder list is 2. You type the command reminder-goto 2 into the command box and press Enter to execute it.

400
  • The result box will show the message:
    "Opening Reminder: Open Time: 07/12/2019 1000 URL:https://www.comp.nus.edu.sg/programmes/ug/cs/curr/"
    The tab will switch to Online and show NUS Computing website.

400

Other examples:

  • reminder-goto 1
    If reminder 1 points to bookmark 5, this command is equivalent to goto 5. (i.e. opens the 5th bookmark in the bookmark manager.)

------------- This is the end of the excerpt -------------

4. Contributions to the Developer Guide

This part is about the sections I contributed to the Developer Guide. The section extracted from the Developer Guide below showcase my ability to write a technical documentation to a developer and show technique depth of my contribution.

------------- This is the start of the excerpt -------------

4.1. Reminder feature

4.1.1. Implementation

A bookmark can attach a reminder, and a reminder can be used to open the bookmark and send notifications to the user. This mechanism is facilitated by Reminder and ReminderAssociation.

Reminder contains a reminding time, the Url of the Bookmark and a Note.

ReminderAssociation represents the association between Reminder and Bookmark, containing the relation from Reminder to Bookmark and Reminder to Bookmark.

600
Figure 1. Class diagram of the Reminder component

There are four parts of the reminder feature:

  • Add a reminder to a specific bookmark (executed by AddReminderCommand#execute())

  • Edit a reminder (executed by EditReminderCommand#execute())

  • Delete a reminder (executed by DeleteReminderCommand#execute())

  • Goto the bookmark of a specific reminder (executed by GotoReminderCommand#execute())

These command are triggered by reminder command line entered into the command box, which will calls the respective command parser to create the command. The bookmark of the reminder will be retrieved and handled according to the command.

The following sequence diagram illustrates how the adding reminder operation works:

AddReminderSequenceDiagram
The lifeline for AddReminderCommandParser and AddReminderCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.

In the reminder-delete command, instead of calling addReminder(bookmark, reminder) in Model, it will call removeReminder(reminder).

In the reminder-edit command, instead of calling addReminder(bookmark, reminder) in Model, EditReminderCommand will create a edited copy of the target reminder and call editReminder(target, editedReminder) in Model.

In the reminder-goto command, it will retrieved the bookmark of the reminder and generate a GotoCommandResult. It works the same as goto command of the bookmark.

The following activity diagram summarizes what happens when a user attempts to use a reminder command:

600

4.1.2. Design Considerations

Aspect: How to represent the relationship between reminder and bookmark
  • Alternative 1 (current choice): Use two hashmaps to store both the relationship from reminder to bookmark and bookmark to reminder.

    • Pros: More OOP and can easily find the relationship.

    • Cons: More complex when doing any operation to a reminder. Need to check two hashmaps.

  • Alternative 2: Reminder is a field of bookmark.

    • Pros: Easier to implement.

    • Cons: Reminder is a field of bookmark, so using a reminder to open the bookmark violate the relationship.

------------- This is the end of the excerpt -------------