By: T12-04 Since: Sep 2018 Licence: MIT

1. Introduction

Developers usually search google to find solutions to technical problems. However, bookmarking a certain web-page does not tell developers much about for which problem they searched. If developers encounter the same problem again, instead of searching through their bookmarks, it is likely for them to search on google again.

SaveIt is geared at keeping track of the issues that users find and linking it with solution web-page found on google. More importantly, SaveIt is optimized for those who prefer to work with a Command Line Interface (CLI) while still has the benefits of a Graphical User Interface (GUI). If you can type fast, SaveIt can help you search the entry saved previously faster than traditional GUI apps.

2. Quick Start

To get started with SaveIt, please follow the instructions below:

  1. Ensure that Java version 9 or later is installed in your Computer.

  2. Download the latest saveit.jar here.

  3. Copy the file to a folder as the home folder for your SaveIt.

  4. Double-click the file to start the app. The GUI should appear in a few seconds, as shown below.

    Ui
    Figure 1. Application Interface
  5. Type the command in the command box and press Enter to execute it.
    e.g. typing help and pressing Enter will open the help window.

  6. Try some example commands:

    • list : lists all issues

    • addi/map_function d/How to use map function in python t/python : records a issue of map function with description "How to use map function in python" tagged as "python"

    • delete3 : deletes the 3rd issue shown in the current list

    • exit : exits the app

3. Features

The following is a list of commands that you can use in the application.

Command Format

  • Words in UPPER_CASE are the parameters to be provided by the user e.g. in add i/ISSUE_STATEMENT d/DESCRIPTION, ISSUE_STATEMENT and DESCRIPTION are parameters which can be used as add i/Segment_Fault d/java.

  • Items in square brackets are optional e.g i/ISSUE_STATEMENT d/DESCRIPTION [t/TAG] can be used as i/map_function d/how to use map in python t/python or as i/map_function d/how to use in python.

  • Items with ​ after them can be used multiple times including zero times e.g. [t/TAG]…​ can be used as   (i.e. 0 times), t/python, t/python t/java etc.

  • Parameters can be in any order e.g. if the command specifies t/TAG, d/DESCRIPTION i/ISSUE_STATEMENT is also acceptable.

  • Command alias can be used instead of lengthy command words.

3.1. Viewing help : (h)help

Type help to view the handy help page!

Format: help

Examples:

  • help

3.2. Selecting an issue/solution : (s)select

If the user is at the home directory, the command selects an issue identified by the index number used in the issue panel. The command also displays the solutions of the selected issue in the solution panel. Now the edit directory is changed to issue level.

  • When an issue is selected, the directory is changed to SaveIt/Issue */. Then the user is not allowed to add, edit, or select issue. The change directory will be displayed in the UI as shown below.

Format: select INDEX

Example:

directory change
Figure 2. Direcotry Change
select issue
Figure 3. Select an Issue

If the user is at the issue directory, the command load the web link of the indexed solution in the built-in browser.

Example:

  • select 2

select solution
Figure 4. Seleting a Solution
  • The index refers to the index number shown in the list.

  • The index must be a positive integer and 1, 2, 3, …​

  • The index cannot be bigger than the number of issues.

  • All properties of this solutions will be displayed at the left side of the interface.

3.3. Adding: (a)add

Adds an issue to the SaveIt App.

Format: add i/ISSUE_STATEMENT d/DESCRIPTION [t/TAG]…​

Adds a solution to an existing issue in SaveIt App.

Format: add s/SOLUTION_LINK r/REMARK

  • Select an issue before adding a solution

  • The link validation check only provides most basic format checking

Examples:

  • add i/ArrayIndexOutOfBound d/issue description t/unsolved
    Adds a new issue which has a issue statment called ArrayIndexOutOfBounds and issue description called issue description

AddingNewIssue
Figure 5. Add new issue to the issue list
  • select 3

  • add s/www.stackoverflow.com r/use functional programming
    Adds a new solution which has a solution link called www.stackoverflow.com and a solution remark called use functional programming

AddingNewSolution
Figure 6. Add new solution to the third issue in the issue list
  • The order of the issues may be updated if the user uses sort command.

  • If multiple identical prefixes are entered, the last prefix value will be accepted

  • An issue can have only one statement and description

  • An issue can have any number of tags (including 0)

  • The index refers to the index number shown in the displayed issue list.

  • The index must be a positive integer and 1, 2, 3, …​

  • The index cannot be bigger than the number of issues.

  • User needs to select the issue index to add a solution to that issue

  • A solution contains one solution link and one remark

  • User can add solutions to the same issue continuously

3.4. Choosing one primary solution: (sp)setprimary

Chooses one solution of the issue and make it the primary solution.

If there is an existing primary solution, setprimary will reset the primary solution to the latest one.

The primary solution is shown on the top of the solution list and is highlighted in white.

Format: setprimary INDEX

  • The index refers to the index number on the solution list.

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

  • The index cannot be larger than the number of solutions of this issue.

  • This command can only be executed in the issue or solution directory.

3.5. Resetting the primary solution: (rp)resetprimary

Resets the primary solution and make all solutions normal and not highlighted.

Even if there is no primary solution, this command can still be executed, but no change will be shown.

Format: resetprimary

  • This command can only be executed in the issue or solution directory.

3.6. Editing: (e)edit

Edits an issue in the SaveIt App.

Format: edit INDEX [i/NEW_ISSUE] [d/NEW_DESCRIPTION] [t/TAG]…​

Edits a solution in an exit solution in the issue.

Format: edit INDEX s/NEW_SOLUTION_LINK r/NEW_SOLUTION_REMARK

  • Select an issue before editing the solution.

Examples:

  • edit 3 i/git command t/git
    Edits the issue statement and the tag of the third issue to become git command and git respectively.

  • edit 1 i/map function d/how to use map
    Edits the issue statement and description of the first issue to become map function and how to use map respectively.

edit issue
Figure 7. Edits issue statement and tag of an issue
edit solution
Figure 8. Edits solution link and remark of a solution
  • Edits the issue at the specified INDEX, which refers to the index number shown in the displayed issue list.

  • Edits the solution at the specified Index, which refers to the index number shown in the displayed solution list.

  • The index must be a positive integer (1, 2, 3…​), otherwise it will be considered as invalid command.

  • At least one of the optional fields must be provided.

  • Removes all the tags by typing t/ without specifying any tags after it.

3.7. Refactoring tag: (rt)refactortag

Renames or removes a specific tag for all entries with that tag.

Format: refactortag t/OLD_TAG [n/NEW_TAG]

  • Replace the old tag with the new tag provided

  • Remove the old tag if the user does not provide a new tag

Examples:

  • refactortag t/notSolved n/solved
    Changes all issue entries tagged with notSolved to be tagged with solved.

refactor tag2
Figure 9. Refactor tag (rename)
  • refactortag t/solved
    Removes the tag solved from all issue entries.

  • The old tag must be provided.

  • If user provides multiple old tags or new tags, only take the last one as an effect.

  • If the new tag exits in the issue already, it will only remove the old tag.

  • The order of the issues may be updated if the user uses sort command.

  • This command can only be executed in the home directory.

3.8. Adding tag: (at)addtag

Adds tags for issue(s).

Format: addtag INDEX t/TAG1 [t/TAG2]…​

Examples:

  • addtag 1 t/python
    Adds the python tag to the first issue in the issue list.

  • addtag 2 t/python t/java
    Adds the python and java tag to the second issue in the issue list.

  • addtag 1 2 3 t/difficult
    Adds the difficult tag to the first, second and third issues in the issue list.

  • addtag 1-4 t/TIL t/java
    Adds the TIL tag from first to fourth issues in the issue list.

add tag
Figure 10. Add tag (range index)
  • It will not take any action if the tag exits in the issue.

  • The INDEX refers to the index number shown in the issue list.

  • The index must be a positive integer (1, 2, 3…​), otherwise it will be considered as invalid command.

  • The range of the index can be used.

  • The lower limit of the range must be smaller than or equal to the upper limit (2-4, 2-2).

  • The range cannot be used with multiple index(es) together.

  • The order of the issues may be updated if the user uses sort command.

  • This command can only be executed in home directory.

Retrieves the solution link so that the link is copied to the system clipboard

Format: retrieve INDEX

  • Select an issue before retrieving solution link

Examples:

  • retrieve 1

  • The index refers to the index number on the solution list of a certain issue.

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

  • The index cannot be bigger than the number of solutions of a certain issue.

3.10. Deleting a statement : (d)delete

Deletes the specified issue from SaveIt App.

Format: delete INDEX

Examples:

  • delete 5

  • The index refers to the index number on the issue list.

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

  • The index cannot be bigger than the number of issues.

  • This command can only be executed in the home directory.

3.11. Locating issues by statement: (f)find

Finds issues whose statement contain any of the given search queries.

Format: find [KEYWORDS…​]

  • The issues matching the keywords (based on their statements or descriptions) will be displayed on the issue list.

  • There can be more than 1 keywords

Examples:

  • find python

  • find python java

  • The search is case-insensitive. e.g hans will match Hans

  • The order of the keywords does not matter. e.g. ‘kill port’ will match ‘port kill’

  • Searches through the issue statement.

  • The keywords can partially match the statement.

  • Issues matching at least one keyword will be returned.

  • Searching the keyword will increment the search frequency of the issue (so that it can be ordered accordingly later on).

  • This command can only be executed in the home directory.

3.12. Locating issues by tags: (ft)findtag

Finds issues that contain the tags entered in the search queries.

  • The issues with matching tags (given the keywords) will be displayed on the issue list.

  • There can be more than 1 keywords representing multiple tags

Examples:

  • findtag t/java

  • findtag t/cplusplus t/segmentationFault

  • The search is case-sensitive

  • The keywords must match exactly to the tag names of the issue’s tags

  • If multiple tags are searched, only issues containing all the searched tags will be displayed

  • A matched issue can have other tags (aside from the ones searched). e.g issue[cplusplus][segmentation] will match with a single searched tag [cplusplus]

  • This command can only be executed in the home directory.

3.13. Listing all issues : (l)list

Shows a list of all issues.

  • This command can only be executed in the home directory.

3.14. Sorting the list of issues: (sr)sort

Sorts the list of issues according to a specified sort type.

The list always follows the specified sort type until another sort command is executed.

Format: sort

  • Sorts the issues based on the time when they are created. The first issue created has the highest priority.

Format: sort chro

  • Sorts the issues by their last modified time chronologically. The last modified one has the highest priority.

  • Creation is considered as a modification, i.e. last modified time is set to the created time when an issue is added.

Format: sort freq

  • Sorts the issues by their search frequency. The one which matches the search keywords most frequently has the highest priority.

Format: sort tag

  • Sorts the issues by each issue’s tag set in a lexicographical order, following ASCII lexicography.

  • Puts the issues without tags at the end of the displayed issue list.

  • This command can only be executed in the home directory.

Examples:

  • sort

  • edit 1 d/First edited issue (edit to update last modified time)
    edit 4 d/Second edited issue
    add i/Third created issue d/Third created issue (add a new issue)
    sort chro

sort chro command
Figure 11. Sort Chro Command
  • find ArrayIndexOutOfBounds (find to update search frequency)
    list
    find ClassNotFoundException
    find ClassNotFoundException
    list
    sort freq

sort freq command
Figure 12. Sort Freq Command
  • sort tag

sort tag command
Figure 13. Sort Tag Command

3.15. Returning to home directory : (hm)home

Changes the current editing directory to the home directory. Besides, Shows a list of all issues in the list panel by index.

Format: home

Examples:

  • home

home
Figure 14. Return to Home Directory
  • All issues are listed in the list panel in home directory.

  • The following commands can only be executed at home directory: sort, addtag, refactortag, find, findtag.

3.16. Undoing previous command : (u)undo

Restores the SaveIt App to the state before the previous undoable command was executed.

Format: undo

  • Undoable commands: those commands that modify the application’s content (add, edit, delete, and clear).

Examples:

  • delete 1
    sort chro
    undo (reverses the delete 1 command)

  • select 1
    sort chro
    undo
    The undo command fails as there are no undoable commands executed previously.

  • delete 1
    clear
    undo (reverses the clear command)
    undo (reverses the delete 1 command)

  • Users can use redo (refer to next command) to restore their changes if they regret undo a command.

3.17. Redoing the previously undone command: (r)redo

Reverses the most recent undo command.

Format: redo

Examples:

  • delete 1
    undo (reverses the delete 1 command)
    redo (reapplies the delete 1 command)
    The redo command deletes an issue 1

  • delete 1
    redo
    The redo command fails as there are no undo commands executed previously.

  • delete 1
    clear
    undo (reverses the clear command)
    undo (reverses the delete 1 command)
    redo (reapplies the delete 1 command)
    redo (reapplies the clear command)

3.18. Clearing all entries : (c)clear

Clears all issues and their solutions from SaveIt.

Format: clear

Example:

  • clear

clear command ask for confirmation
Figure 15. Clear Command - Ask for confirmation
  • Yes or Y (confirm the clear decision)

clear command confirmed
Figure 16. Clear Command - Confirmed
  • The user needs to confirm this command before the operation can be executed.

  • The user can undo this operation to restore the issue lists.

3.19. Listing entered commands : (his)history

Lists all the commands that you have entered in reverse chronological order.

Format: history

Pressing the and arrows will display the previous and next input respectively in the command box.

3.20. Exiting the program : (x)exit

Exits the SaveIt App.

Format: exit

Examples:

  • exit

3.21. Autosuggesting existing issue in find command

To prevent the issue list is so large such that user can hardly remember all the issues, whenever user types in any keyword in find command, SaveIt will auto suggest any related issue name according to the keyword entered.

Example:

FindIssueAutoSuggestion
Figure 17. Autosuggesting of exsiting issues statements

3.22. Autosuggesting existing tags in findByTag command

To prevent the user from creating many similar tags / duplicates, whenever the user creates a record with a tag, or modifies a record’s tag, the application searches for similar tags in the system and prompts the user with a list of similar tags.

Example:

autosuggest tag
Figure 18. Autosuggesting of existing tags

3.23. Suggesting to copy existing values

When editing fields in an issue (e.g. Editing an issue statement), if only slight modifications are required, the user will have to copy paste the existing issue statement and modify it, or type it out again. To make things more convenient, after the application prompts the user if they want to copy the existing value onto the command line.

Example:

copy existing
Figure 19. Copying existing fields

3.24. Highlighting command parameters

When the user types the command in the command line, it is difficult for user to distinguish his inputs and parameters. Hence highlighted command is essential to help user to differentiate the parameters and values that he inputs.

Examples:

command highlight1
Figure 20. Command highlight 1
command highlight2
Figure 21. Command highlight 2
  • The index will be highlighted only for certain commands that requires index (e.g. edit, select).

3.25. Team based - Creating / Switching projects [coming in v2.0]

Records are organized into projects, that way, each project only stores information (bugs/issues) relevant to that project.

3.26. Team based - Data access from cloud [coming in v2.0]

Developers usually work in teams, and since they are working on the same code base, it is likely that they will encounter the same issues. Developers can be added into projects (mentioned in 3.16), and have access to the same recorded issues that others have added. The data will be hosted on a cloud server so that any updates are accessible by other developers straight away.

  • Creating projects: new cs2103project

  • Viewing projects: projects

    • 1. cs2103project

    • 2. cs1010sproject

  • Switching projects: switch 1 OR switch cs2103project

3.27. Highlighting the page : highlight [coming in v2.0]

Highlights the certain part of the page that shows on the window, use an annotation box. Format: highlight

4. FAQ

Due to the immaturity of our product, There may be some minor problems when you use SaveIt in unintended situations. Here are questions that may arise during your usage.

Q: How do I transfer my data to another Computer?
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 SaveIt folder.

Q: Can I use the app without Internet Connection?
A: For our current version of SaveIt, you will need to store all the web-page locally if there is not the Internet connection. Otherwise, the web-page will not be displayed correctly.

5. Command Summary

Here is a summary of all command formats for your reference. Please note that some commands may implement more than one format.

  • Help : help

  • Select : select INDEX
    e.g.select 2

  • Add
    For issues: add i/[ISSUE_STATEMENT] d/[DESCRIPTION] t/[Tag]
    e.g. add i/Bug d/exception thrown not handled t/java
    For solutions: add s/[SOLUTION_LINK] r/[REMARK]
    e.g. add s/www.github.com r/A git website

  • Set Primary : setprimary [INDEX]

  • Reset Primary : resetprimary

  • Edit
    For issues: edit INDEX i/[ISSUE_STATEMENT] d/[DESCRIPTION]
    e.g. edit 2 i/exception thrown not handled d/statement solved
    For solutions: edit INDEX s/[SOLUTION_LINK] r/[REMARK]
    e.g. edit 3 s/www.google.com r/add a catch block

  • Refactor Tag : refactortag t/OLDTAG [n/NEWTAG]
    e.g. refactortag t/java n/C++

  • Add Tag : addtag INDEX t/TAG1 [t/TAG2]…​
    e.g. addtag 2 t/python t/java t/TIL

  • Retrieve : retrieve INDEX
    For solutions: retrieve SOLUTION_INDEX
    e.g. retrieve 3

  • Delete : delete INDEX
    e.g. delete 3

  • Find : find KEYWORD [MORE_KEYWORDS]
    e.g. find BST

  • Find Tag : findtag KEYWORD [MORE_KEYWORDS]
    e.g. findtag python

  • List : list

  • Home : home

  • Undo : undo

  • Redo : redo

  • List : list

  • Clear : clear

  • History : history

  • Exit : exit

  • Sort : sort TYPE
    e.g. sort chro