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
Summary of contributions
-
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
Examples:
-
TDL_sort date
The tasks are now sorted by its due date. -
TDL_view uncompleted
and then followed byTDL_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.
Example:
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.
Example:
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:
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 fromTaskDate
intoDate
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 aDate
variable which initialized with the system date and compare it with the deadline of tasks. -
In
UI
part: We usesetStyle
method ofLabel
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 allDate
type related methods in theTimeUtil
class.
The following sequence diagram shows how the DeadlineNotification
operation works:
Aspect: Methods to support the deadline notification feature
-
Alternative 1 (current choice): Add related methods to
Task
class andModel
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
-
User enter
TDL_view uncompleted
to list uncompleted tasks -
User enter
TDL_sort date
to sort all uncompleted tasks by deadline date