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:
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.
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:
-
Documentation:
-
Community:
-
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.
-
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.
There are some parameter constraints:
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.
-
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.
There are some parameter constraints:
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
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.
-
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.
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
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.
-
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.
Other examples:
-
reminder-goto 1
If reminder 1 points to bookmark 5, this command is equivalent togoto 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
.
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:
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:
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 -------------