Project Portfolio Page (PPP)
Project overview
Jikan is a CLI time-tracker built in Java that aims to help manage tasks and projects.
Users can set tags and goals for their entries,
ultimately being able to keep track of what’s left to do and maintain an overview of how time was spent.
Summary of contributions
Code contributed
Enhancements implemented
- Find and Filter Activities
- Developed the
findandfiltercommands for users to view a sub-list of activities, matching for name and tag keywords respectively. - Both commands allow for multiple keywords to be matched with
findaccepting/separated keywords andfilteraccepting space-separated keywords. Activities which match either keyword will be included in the sub-list. - Both commands can be limited to only searching activities in the last shown list by including the
-sflag. This is particularly helpful when used before graphing functions to omit undesired activities.- This can also be included as a single-line user input, separating commands by
;which reduces the number of user inputs and printing calls required to achieve the same results.
- This can also be included as a single-line user input, separating commands by
- Developed the
- Last Shown List Implementation
- Proposed and implemented the last shown list which is used in
list,find,filterandgraphcommands. - This proposal sets the direction for how the Jikan software is used, as all analysis done by the user revolves
around this functionality (combining
listby date range,findandfilterchaining, to allowgraphto be clutter-free).
- Proposed and implemented the last shown list which is used in
- Activity Progress and Ui
- Proposed and implemented the progress percentage based user messages, allowing for the progress bars in
endandgraphcommands.
- Proposed and implemented the progress percentage based user messages, allowing for the progress bars in
Contributions to documentation
- Implemented and de-conflicted the high-level flow of the User Guide, distinguishing from Basic to Advanced features for improved format standardisation.
- Provided instructions and examples for
findandfiltercommands and their multiple variations.
Contributions to the DG
- Drafted write-ups and diagrams in the design section, mainly the overall architecture diagram and class diagram.
- Drafted the
findandfiltersections, including the sequence diagram, design considerations, and proposed features.
Contributions to team-based tasks
- Generated ideas with the team on the set of features for the Jikan application.
- Made use of the issue tracker extensively to track enhancement and bugs found.
- Developed jUnit tests for
find,filterandlistcommands.
Review/mentoring contributions
- Provided feedback to teammates before and after implementation to ensure that everyone is on the same page.
Contributions beyond the project team
- Provided feedback to the developer guide of another team.
- Reported bugs in other team’s product in PE dry run.
Contributions to the User Guide (Extracts)
Finding Activities by Name: find
Usage: Users can request for a sub-list of activities that has names which contain any of the given keywords. If there are more than one keyword, each keyword should be separated with ` / `.
Format:
find KEYWORDfind KEYWORD1 / KEYWORD2 / KEYWORD3
Filtering Activities by Tags: filter
Usage: Users can request for a sub-list of activities that has specific tags. Each tag should be space separated.
Format:
filter TAGNAMEfilter TAGNAME1 TAGNAME2
Chaining Finds & Filters: -s
Usage: Users can provide the find and filter command on the last shown list (also compatible after a list
command) by providing the -s flag after each find or filter command.
Format:
find -s KEYWORDfilter -s TAGNAMEfilter -s TAGNAME1 TAGNAME2find -s KEYWORD1 / KEYWORD2 / KEYWORD3
Example:
If we want to find all CS2106 tutorials, we can first use filter 2106 to filter out all activities tagged 2106, then use the find command with the flag, find -s Tutorial to get a list of all 2106 Tutorials.
Single Input Chaining: ;
Usage: Users can achieve the same outcome as multiple -s chaining with a single input. This is done by separating
find and filter commands with ` ; `.
Examples:
filter TAGNAME ; find KEYWORD1 ; find KEYWORD2filter -s TAGNAME ; find KEYWORD1 ; find KEYWORD2
Note: -s is only relevant in the first command of the entire input string, as subsequent commands are automatically chained.
Contributions to the Developer Guide (Extracts)
2. Design
The section provides a high-level explanation of how the Jikan software is designed.
2.1 High-Level Architecture
The users interact with the Jikan software which modifies the local storage data file.
Within the Jikan software, there are 5 main components:
- Parser Component - Parses the user inputs and calls the relevant
Commandobject to execute the desired command. - Ui Component - Prints to the user the output of the desired
Commands. - Commands Component - Contains all the
Commandsto be called by theParserbased on user inputs. - Activities Component - Maintains the non-permanent state of all
Activitiesin theActivity Listto be accessed by the executingCommands. - Storage Component - Interacts with and modifies the local storage file, which contains the permanent (lasting
even after the program terminates) state of all activities. It retrieves this permanent state and populates the
Activity Listat the start of each session.
3.8 Find & Filter Features
Find Feature
This command accepts keyword(s) and searches either the entire activity list or the last shown list for activities with names containing each keyword.
Filter Feature
This feature accepts space-separated keyword(s) to search either the entire list or the last shown list for activities with tags matching each keyword. The keywords should be an exact-match with the tag names.
3.8.1 Design Considerations
As the find and filter commands are important for the user to analyse and eventually graph time-spent on each
activity. The user should be allowed to query for all useful combinations of activities in the activity list.
This entails:
- The user should be allowed to match for multiple keywords at once.
- The user should be allowed to exclude certain activities by limiting his search to a previously shown list as
opposed to the entire activity list.
(chaining
list,find, andfiltercommands).
3.8.2a Current Implementation for Find
- This feature is called by the user when the
findcommand is entered into the command line. The string following the command are the parameters:-sflag indicates that the searching should be limited to activities previously shown to the user.- The remaining parameters are a string of keywords separated by ` / `.
- The Parser will create a FindCommand object.
- The FindCommand will invoke its own
executeCommand()method.- The Parser’s
lastShownListwill be cleared. - Then it will loop through
activityListto find activities with names that contain the keyword. - If one is found, it will be added to
lastShownList. printResults()of the Ui will be called:- If
lastShownListis not empty, it will print the matching activities. - Else, it will respond to the user that there are no tasks which match the given keyword.
- If
- The Parser’s
3.8.2b Current Implementation for Filter
- This feature is called by the user when the
filtercommand is entered into the command line. The space separated strings following the command are the keywords to match activity tags with. - The Parser will create a FilterCommand object.
- The FindCommand will invoke its own
executeCommand()method. - The Parser’s
lastShownListwill be cleared. - For each keyword:
- Then it will loop through
activityListto find activities with tags that contain the keyword. - If one is found, it will be added to
lastShownList. printResults()method of the Ui will be called- If
lastShownListis not empty, it will print the matching activities. - Else, it will respond to the user that there are no tasks which match the given keyword.
- If
- Then it will loop through
3.8.4 Additional features
find and filter command supports the limiting of searches to activities in the last shown list. This
is done in 2 ways:
- The
-sflag following the command (eg.find -s keyword) - The
;delimiter for a combination offindandfilterin a single input (eg.find KEYWORD ; filter TAGNAME)