Anthony Lie's Project Portfolio Page
Project: HelloFile
HelloFile is a file management application created as an extension to AddressBook - Level 3 (AB3), specifically made for tech savvy CS2103T CS students. By using HelloFile, students can tag frequently used files/folders with a short nickname, and open their files with intuitive commands.
Given below are my contributions to the project.
-
New Feature: Added
show
command (Pull request #88)- What it does: Allows the user to see the file path and label information of a tag.
- Justification: This feature helps the user to see a specific tag’s information if the information is too long for the UI to display it properly.
- Highlights: This feature needs to find the tag according to the tag’s nickname provided by the user.
Hence, I implemented
TagNameEqualsKeywordPredicate
to get the specified tag easier, and potentially helps to implement commands that takes in tag’s nickname as argument in the future.
-
New Feature: Added
unlabel
command (Pull request #193)- What it does: Allows the user to delete multiple labels of a certain tag.
- Justification: This feature improves the product significantly as managing tag’s labels is important since labels can be used to open multiple files at the same time.
- Highlights: This feature is able to take in multiple labels as argument and delete them. This helps the users to save time if a certain tag has a lot of labels that needed to be deleted at the same time.
-
Code contributed: RepoSense link
-
Project management:
- Created some GitHub issues and assign them the corresponding labels and milestone.
- Maintaining team tasks with other members.
- Enhancements to existing features:
-
Documentation:
- User Guide:
- Developer Guide:
- Community:
Contributions to the User Guide (Extract)
Expressions with ...
at the end can be provided any number of times.
e.g. t/TAG [l/LABEL]...
can be used as t/TAG
, t/TAG l/label
, or t/TAG l/label1 l/label2 l/label3
.
Warning for multiple expressions
Expressions without ...
at the end takes the last parameter as the argument when provided with multiple same expressions.
e.g. tag t/TAG1 t/TAG2
will take TAG2
as the parameter, ignoring the parameter TAG1
.
4.1 Adding a tag with filepath : tag
Examples:
-
tag t>Tag1 f>C:\Users
(Adds a tag with nicknameTag1
using absolute path. The tag has no label and points toC:\Users
) -
tag t>Tag2 f>C:\Users l>Important
(Adds a tag with nicknameTag2
using absolute path. The tag has a labelimportant
and points toC:\Users
) -
tag t>Tag3 f>.\Users
(Adds a tag with nicknameTag3
using relative path. The tag has no label and points to a folderUsers
in the current directory) -
tag t>Tag4 f>.\Users l>folder l>readonly
(Adds a tag with nicknameTag4
using relative path. The tag has labelsfolder
as well asreadonly
and points to a folderUsers
in the current directory)
4.5 Renaming a tag : retag
Renames a tag.
Changes the specified tag’s nickname into the new one in order to make the tag’s nickname more descriptive for the user.
Note that this command can only change nickname. It can’t change any other information such as label and file path.
Existing data will be carried over.
4.7 Deleting multiple labels from a tag : unlabel
Deletes one or more labels from a tag.
This command lets you to uncategorized a certain tag.
If some labels are invalid, all the other valid labels will be deleted from the tag,
and the invalid ones will be shown to the user.
FAQ
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous HelloFile home folder.
Q: What if the name or the directory of the file I tagged is changed? Can I still access the file using HelloFile?
A: No. HelloFile cannot trace the file if its name or directory is changed, but if you still want to manage the file, you can tag it again.
Q: Can tag name be duplicated?
A: No. The tag names must be unique for all files being managed.
Contributions to the Developer Guide (Extract)
Storage component
The Storage
component converts java objects into json format and store it to the hard drive.
It is also used for converting data in json format to java objects when executing the app.
- can save
UserPref
objects in json format and read it back. - can save the address book data in json format and read it back.
This diagram shows how the AddressBook
is saved to json file after executing a command.
This diagram shows how the AddressBook
is read from json file when executing the app.
Showing a tag’s file path: ShowCommand
ShowCommand
searches the list of Tags stored in AddressBook
and shows the tag’s file path in the ResultDisplay
.
CommandException
is thrown if tag is not present.
This diagram shows a successful execution of ShowCommand
to show the information of the specified tag.
ShowCommand gets the specified tag by applying TagNameEqualsKeywordPredicate
that extends from java.util.function.predicate
to ObservableList<Tag>
using model.findFilteredTagList()
.
Listing out all the tags: ListCommand
ListCommand
lists the Tags stored in AddressBook
and shows them as TagCard
which is contained in TagListPanel
.
ListCommand shouldn’t take in any argument. A CommandException
will be thrown if the user’s input contains an argument.
This diagram shows a successful execution of ListCommand
.
ListCommand updates the ObservableList<Tag>
by using java.util.function.predicate
.
Deleting a tag’s label: UnlabelCommand
UnlabelCommand
searches the list of Tags stored in AddressBook
and deletes the specified labels.
The user can provide 1 or more labels to be deleted simultaneously.
If any of the input is invalid, this command will delete all the valid input from the specified Tag
and show all the invalid input back to the user.
This diagram shows a successful execution of UnlabelCommand
using 1 label as the argument.
UnlabelCommand checks the existence of the specified Tag
using model.findFilteredTagList()
.
It takes the Set<Label>
of the Tag
and deletes all the labels that matches with user’s input with the help of java.util.stream
.
Then, a new Tag
is created using the modified Set<Label>
and added back to the AddressBook
using model.setTag()
.