PROJECT: Something Daily


Overview

Something Daily is a desktop application which is written in Java. We build this application based on the Address Book (Level 4) which is used for teaching software engineering course. We morph the Address Book into To-do list and Expenditure tracker. After that, we enhance its ability with modifying Model, Logic, Storage and UI part and import new api from other sources. The user interacts with it using a CLI, and it has a GUI created with JavaFX. Generally, our product is a combination of to-do list and expenditure tracker. It has 5 key components: to-do list, calendar, expenditure tracker, command box and result box. The target audiences of our product are NUS SoC students and this product can help them manage their academic tasks and spending which can increase their efficiency in management of their student life.

Main features of Something Daily

  • Record and track user’s module related tasks

  • Notify user when deadline of uncompleted tasks are coming or have passed

  • Record and track user’s spending

  • Give advice and summary based on user’s expenditure history

  • Simply and clear GUI to show all data stored

Summary of contributions

Given below are sections I contributed to the code.

  • Major enhancement #1: designed the logic (commands/ parser) for To-do List

    • What it does: the most basic components of To-do List, parser will judge which "command" function to execute and "commands" will run corresponding methods in "model".

    • Justification: This enhancement is the foundation of To-do List, it provides users the way to use certain features by keying in certain commands.

    • Specific features: (include add/ delete/ edit) Users can add, delete and edit certain tasks in the To-do List.

  • Major enhancement #2: designed user interface for To-do List

    • What it does: display tasks recorded in To-do List

    • Justification: This enhancement make it possible for user checking tasks more visually and easier.

  • Major enhancement #3: designed the ability to sort tasks in To-do List

    • What it does: Provide users a way to sort tasks in the To-do List by certain task attribution (name, module code, deadline) and users can also reverse the rank of sorting

    • Justification: This enhancement make users easier to check their tasks recorded in the To-do list based on a certain standard.

  • Major enhancement #4: designed deadline notification

    • What it does: Notify users the deadline is approaching or have due by changing the font color.

    • Justification: This enhancement is one of key components of manging the to-do list

  • Minor enhancement #1: add "undoable_command" class related methods to fix "undo" command on both To-do List side and Expenditure Tracker side.

  • Minor enhancement #2: write test files in command, parser and ui parts to make sure every class related can work..

  • Code contributed: [RepoSense Dashboard]

  • Other contributions:

    • Documentation:

      • Write implementation of TDL_sort command in the Developer Guide and update To-do List-related logic part in both User guide and Developer guide.

      • Write implementation of deadline notification in the Developer Guide

      • Update deadline notification and calendar in the User Guide.

      • Write Q&A in the user guide

      • Update use cases in the user guide

    • Community:

      • PRs reviewed: [PRs]

      • Participating in group discussion on WhatsApp

      • Helped debug and provide suggestion for other group: [Bug report & suggestions]

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Sorting tasks : TDL_sort

Sorts and displays the to-do list by a certain task parameter.
Format: TDL_sort PARAMETER

  • PARAMETER is either module, date or priority.

  • PARAMETER can be set as default and tasks will be sorted alphabetically by their names regardless of upper/lower cases.

  • PARAMETER can also be set as reverse and the former order of tasks will be reversed.

  • Users can use TDL_sort after TDL_view for sorting certain tasks (completed/uncompleted).

Examples:

  • TDL_sort date
    The tasks are now sorted by its due date.

  • TDL_view uncompleted and then followed by TDL_sort priority
    All uncompleted tasks will be sorted by their priority level.

Deadline GUI notification

Notify when the uncompleted tasks is due within the following seven days from the current time or when the deadline of uncompleted tasks have passed.
No command inputs are required.

  • If one task is uncompleted and its deadline has passed, the colour of index, task name, module code, deadline date and priority will turn into red.

  • If one task is uncompleted and its deadline comes within seven days, the colour of index, task name, module code, due date and priority will turn into yellow.

  • The current time in the application is the same as system time.

  • All tasks are currently assumed to be in the same year of 2018.

  • Only the year 2018 is supported for now, future releases will support future years. [Coming in v2.0]

Example:

deadline notification

As shown above (current date: 9th Nov 2018)

No command related examples are available.

Calendar GUI

A GUI related feature, the calendar will automatically show the full calendar for this current month and the current date.

  • The current month shown follows the system time.

  • A summary of all tasks due and spendings on a certain day will be shown by clicking on the calendar GUI. [Coming in v2.0]

  • User can switch the calendar view from the current month to the next or previous months. [Coming in v2.0]

Example:

Calendar

As shown above (screenshot from GUI)

No click-event related examples available now.

FAQ

Q: How do I transfer my data to another computer?
A: Install the app in the other computer and overwrite the empty data files it creates with the files that contains the data in your previous data folder.

Q: How can I run this product in Linux terminal/Dos terminal?
A: After installing/updating the java package, you can run java -jar somethingdaily.jar in terminal.

Q: Can I import my to-do list related or expenditure tracker related data into your application?
A: At current release, you cannot import any related data from other sources. However, our team is considering to add a feature in future release to help users in importing data from other sources by CSV files.

Q: When I run this application, it shows java.lang.NoClassDefFoundError: javafx/application/Application error.
A: You are missing JavaFX, you can run our application after installing it with sudo apt install openjfx.

Q: How can I read the User Guide in the interface of your product?
A: You can simply use the help command to read this User Guide.

Q: How can I update the application if you release a new version?
A: Unfortunately, we do not support incremental updates right now, so users can only obtain the latest release from our GitHub directly. We are considering to use API from Google to implement over-the-air updating in future release.

Q: Since it’s a CLI based product, can I use terminal to run it locally or SSH remotely?
A: Although it’s a CLI based product, we have not adapted it to CLI yet, so you can only run commands by opening the jar file.

Q: How big is this software?
A: It is a light product. The jar file is only 20+ MB and the source code is only 70+ MB.

Q: I cannot add CS2113T to the to-do list.
A: Do refer to the user guide. We currently do not support module codes with an additional character at the end that denotes a variant of a module. In future release, we will include support for it.

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Sort To-do list

Current Implementation

Sorting tasks in the to-do list uses both Logic and Model components. Generally, the implementation of TDL_sort date, TDL_sort priority and TDL_sort module are quite similar, and they use different comparators which are stored in SortComparator.

Firstly, after getting the input from user, SortCommandParser split command to get the parameter and choose the corresponding sorting method. Then, we use Collection.sort() in UniqueTaskList to sort ObservableList<Task> versionedTodoList

TDL_sort reverse use the method Collection.reverse() to reverse the sequence of tasks in to-do list.

To avoid the sequential order of upper case and lower case, we use TaskName a → a.toString().toLowerCase() transfer all upper case into lower case.

The following sequence diagram shows how the TDL_complete operation works:

SortTaskSequenceDiagram

Design Considerations

Aspect: Methods to support the sort commands
  • Alternative 1 (current choice): write methods for each sort parameter separately

    • Pros: easily to implement and have already gathered all comparators in SortComparator

    • Cons: hard to read and debug

  • Alternative 2: In Model part, write only one methods and use if sentence to execute corresponding one.

    • Pros: Easy to read and debug

Deadline Notification

Current Implementation

Deadline Notification in the to-do list uses both Model and UI components.

  • In Model part: We convert all deadline of task from TaskDate into Date type which can easily be processed with Java library. Besides that, we set all deadline to 0am and assume all tasks listed in the to-do list are in the same year as the date in system. We new a Date variable which initialized with the system date and compare it with the deadline of tasks.

  • In UI part: We use setStyle method of Label class to change the font color of id, task name, module code and deadline for distinguishing uncompleted tasks with different deadline.

  • In commons part: We store all Date type related methods in the TimeUtil class.

The following sequence diagram shows how the DeadlineNotification operation works:

DeadlineNotification

Aspect: Methods to support the deadline notification feature

  • Alternative 1 (current choice): Add related methods to Task class and Model class directly

    • Pros: Easy to implement

    • Cons: Hard to read and debug

  • Alternative 2: build a new class for Deadline notification

    • Pros: Easy to debug and increase new features like notify deadline with CLI output

    • Cons: Hard to implement

Use case 13: Get deadline notification

System: To-do list

MSS

1.The color of one task turns red which means this task is uncompleted and the deadline has passed already 2.The color of one task turns yellow which means this task is uncompleted and the deadline will come within 7 days

Use case 14: Sort Uncompleted tasks by deadline

System: To-do list

MSS

  1. User enter TDL_view uncompleted to list uncompleted tasks

  2. User enter TDL_sort date to sort all uncompleted tasks by deadline date