PROJECT: LearnVocabulary


Overview

LearnVocuabulary is a desktop application for people who prefer to use an offline version of the dictionary for learning purposes.

Summary of contributions

  • Major enhancement: Added the group feature to the application

    • What it does: This feature is used to manage the word group inside the application. For now, it bascally support four functionalities including add a empty word group, delete a word group and all the words inside, show all created wordgroups, and show words particularly in some word group.

    • Justification: This feature allows users to better manage and classify words that they want to learn into different groups. For example, in real life, words may need to be grouped for different purpose, different difficulty level and so on.

  • Minor enhancement: Enhanced the add command, which prevents user from adding word into group which has not been created.

  • Minor enhancement: Enhanced the edit command, which prevents user from editing word into group which has not been created.

  • Code contributed: [RepoSense collated code] (https://nus-cs2103-ay1819s1.github.io/cs2103-dashboard/#=undefined&search=harryqu123)

  • Other contributions:

    • Project management:

      • Managed releases v1.0 - v1.4 (3 releases) on GitHub

    • Enhancements:

      • Updated the add and edit commands to ensure that word can not be added or edited to group which does not exist (Pull request #108, #19)

    • Community:

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)

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.

Showing word by different group: showgroup

(1). Shows all the existed group.
Format: showgroup

  • the group name is now set to be four per line

(2). Shows word inside some particular group.
Format: showgroup GROUPNAME

  • can only show those existed group

Examples:

  • showgroup toLearn
    Returns all the word inside group toLearn

Creating a new empty group: groupadd

Creates a new group.
Format: groupadd GROUPNAME

  • the group name cannot be dublicately added

  • after clear, all the added group would also be cleared except the default toLearn group

Examples:

  • groupadd mustLearn
    Creates a new empty group called mustLearn

deleting an existing group: groupdelete

Deletes a existed group with all the word inside.
Format: groupdelete GROUPNAME

  • the group must has existed

  • after clear, words which do not belong to any group would be deleted automately also

Examples:

  • groupdelete mustLearn
    Deletes group mustLearn and all the words inside

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.

Group features

Current Implementation

The group feature is mainly for user to manage their word lists inside our LearnVocabulary application and it now supports three functionalitys, which are groupadd, groupdelete, and showgroup.

groupadd functionality implementation

Similar to the other existed functionalities, the groupadd functionality mainly consists of a GroupaddCommandParser and a GroupaddCommand. The groupadd parser is indicated as GroupaddCommand in parser, and inherits the Parser class. It enables the application to handle the input given by the the user, check its validity and delete whitespaces. The groupadd command is indicated as Groupadd in commands, and inherits the Command class. It handles a valid group name input and enables the user to "add" a empty word group to the application.

Given below is an example usage scenario and how the groupadd functionality behaves at each step.

Step 1: User calls “groupadd + [groupname]” where groupname is the name of the newly added group.

Step 2: GroupAddCommandParser checks the validity of the groupname, trim the given groupname and create the GroupaddCommand.

Step 3a: If the user set a group name that has already existed, the system throws an exception to the user to indicate that the group name has existed.

Step 3b: Otherwise it lets the model component to add the group with given groupname.

groupaddSequentialDiagram
groupdelete functionality implementation

Similar to the other existed functionalities, the groupdelete functionality mainly consists of a GroupDeleteCommandParser and a GroupdeleteCommand. The groupdelete parser is indicated as GroupDeleteCommand in parser, and inherits the Parser class. It enables the application to handle the input given by the the user. The groupdelete command is indicated as Groupdelete in commands, and inherits the Command class. It handles a valid group name input and enables the user to "delete" a word group and all the words inside.

Given below is an example usage scenario and how the groupdelete functionality behaves at each step.

Step 1: User calls “groupdelete + [groupname]” where groupname is the name of the desired deleted group.

Step 2: GroupDeleteCommandParser checks the validity of the groupname, trim the given groupname and create the GroupdeleteCommand.

Step 3: GroupDeleteCommand checks passed arguments.

Step 4a: If the user set a group name that does not exist, the system throw an exception to indicate that the desired deleted group does not exist.

step 4b: Otherwise it lets the model component to delete the group with given groupname. Especially, for those words which exist in this only deleted group, those words would also be deleted automately.

groupdeleteSequentialDiagram
showgroup functionality implementation

Similar to the other existed functionalities, the showgroup functionality mainly consists of a ShowGroupCommandParser and a ShowGroupCommand. The showgroup parser is indicated as ShowGroupCommand in parser, and inherits the Parser class. It enables the application to handle the input given by the the user. The showgroup command is indicated as ShowGroup in commands, and inherits the Command class. It handles a valid group name input and enables the user to either see all the existing groups or open a selected word group and see all the words inside.

Given below are two example usage scenarios and how the showgroup functionality behaves at each step.

Example a

Step 1: User calls “showgroup + [groupname]” where groupname is the name of the desired checked group.

Step 2: ShowGroupCommandParser checks the validity of the groupname, trims the given groupname and create the ShowGroupCommand.

Step 3: ShowgroupCommand checks passed arguments.

Step 4a: If the user set a group name that does not exist, the system throw an exception to indicate that the desired checked group does not exist.

Step 4b: Otherwise it lets the model component to update the groupname as the predicate in the filterList.

showgroupSequentialDiagram2
Example b

Step 1: User calls “showgroup”.

Step 2: ShowGroupCommandParser creates the ShowGroupCommand.

Step 3: ShowGroupCommand gets all the existing groupname from the model by calling getTags() and show these groupnames to the user.

showgroupSequentialDiagram1

Create a word group (Manual Testing)

  1. Create a new empty word group.

    1. Test case: groupadd test
      Expected: If the group test has not been created, then "test" will be created as a new word group. Otherwise some exception is handled and the user will see "The group typed has existed"

    2. Test case: 'groupadd '
      Expected: Some exception is handled and the user will see "please type in the group".

    3. Test case: groupadd stud_ispm
      Expected: Some exception is handled and the user will see "Tags names should be alphanumeric".

    4. Test case: groupadd groupa groupb
      Expected: Some exception is handled and the user will see "Only one group can be created once".

Delete a word group (Manual Testing)

  1. Delete a word group with all the word inside.

    1. Test case: groupdelete test
      Expected: If the group test do exist, then group "test" and all the word inside will be deleted. Otherwise some exception is handled and the user will see "The group typed does not exist."

    2. Test case: 'groupdelete '
      Expected: Some exception is handled and the user will see "please type in the group".

    3. Test case: 'groupdelete toLearn test'
      Expected: Some exception is handled and the user will see "Only one group can be deleted once.".

    4. Test case: groupdelete stud_ispm
      Expected: Some exception is handled and the user will see "Tags names should be alphanumeric".

Show a word group or all the word group name (Manual Testing)

  1. Show a word group or all the word group name.

    1. Test case: showgroup test
      Expected: If the group test do exist, then all the words inside test group will be filtered and shown. Otherwise some exception is handled and the user will see "The group typed does not exist."

    2. Test case: 'showgroup '
      Expected: All the existed word group will be shown.

    3. Test case: 'showgroup toLearn test'
      Expected: Some exception is handled and the user will see "Only one group can be shown once.".

    4. Test case: showgroup stud_ispm
      Expected: Some exception is handled and the user will see "Tags names should be alphanumeric".