Skip to content

Commit

Permalink
Merge pull request #134 from tanhengyeow/v1.5-documentation
Browse files Browse the repository at this point in the history
v1.5-documentation
  • Loading branch information
tanhengyeow authored Apr 15, 2018
2 parents 71db28e + 1a3f0f2 commit 625a56e
Show file tree
Hide file tree
Showing 11 changed files with 8,894 additions and 8,087 deletions.
4,896 changes: 2,474 additions & 2,422 deletions collated/functional/Ang-YC.md

Large diffs are not rendered by default.

608 changes: 304 additions & 304 deletions collated/functional/kexiaowen.md

Large diffs are not rendered by default.

2,218 changes: 1,109 additions & 1,109 deletions collated/functional/mhq199657.md

Large diffs are not rendered by default.

3,015 changes: 1,511 additions & 1,504 deletions collated/functional/tanhengyeow.md

Large diffs are not rendered by default.

1,332 changes: 846 additions & 486 deletions collated/test/Ang-YC.md

Large diffs are not rendered by default.

1,786 changes: 893 additions & 893 deletions collated/test/kexiaowen.md

Large diffs are not rendered by default.

720 changes: 360 additions & 360 deletions collated/test/mhq199657.md

Large diffs are not rendered by default.

2,345 changes: 1,358 additions & 987 deletions collated/test/tanhengyeow.md

Large diffs are not rendered by default.

17 changes: 13 additions & 4 deletions docs/DeveloperGuide.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -509,12 +509,12 @@ The execution of the find command comprises the following steps:
The following code snippets show how methods `formOrPredicate` and `formAndPredicate` are implemented:
[source,java]
----
public static Predicate<Person> formOrPredicate(Predicate<Person>... predicates) {
public final Predicate<Person> formOrPredicate(Predicate<Person>... predicates) {
return Stream.of(predicates).filter(Objects::nonNull)
.reduce(condition -> false, Predicate::or);
}
public static Predicate<Person> formAndPredicate(Predicate<Person>... predicates) {
public final Predicate<Person> formAndPredicate(Predicate<Person>... predicates) {
return Stream.of(predicates).filter(Objects::nonNull)
.reduce(condition -> true, Predicate::and);
}
Expand All @@ -537,9 +537,9 @@ Figure 3.4.1.5 Activity diagram when user executes `find` command

==== Aspect: Implementation of find command

* *Alternative 1 (current choice)*: Each field has its own field predicate composing of the predicates corresponding to the search pattern. The AllPredicate class is used to manage all these field predicates.
* *Alternative 1 (current choice)*: Each field has its own field predicate composing of the predicates corresponding to the search pattern. The `AllPredicate` class is used to manage all these field predicates.

** Pros: It is easy for new developers to understand. New developers can test each predicate easily, resulting in the debugging process to be smoother. They can also add or remove new predicates of each field easily as all predicates all grouped separately. This choice also adheres to Single Responsibility Principle and (SRP) and Separation of Concerns (SoC).
** Pros: It is easy for new developers to understand. New developers can test each predicate easily, resulting in the debugging process to be smoother. They can also add or remove new predicates of each field easily as all predicates all grouped separately. This choice also adheres to Single Responsibility Principle (SRP) and Separation of Concerns (SoC).

** Cons: It results in a lot of classes to be created. Although there is increased cohesion, there is also increased coupling. Furthermore, this choice also violates Open-Closed Principle (OCP).

Expand Down Expand Up @@ -1717,3 +1717,12 @@ Scheduling an interview for a student
.. Command: `filter y/2019 r/3.5-4.5` +
Expected: The student list now only contains students with 2019 as their expected graduation year and with overall rating score between 3.5 to 4.5, inclusive.

=== Finding every field of the student
. Finding the list of students with **any** fields that match the search keyword according to the search support stated in the User Guide.
.. Command `find bernice, charlot` +
Expected: The student list now displays students `Bernice Yu` and `Charlotte Oliveiro` with reference to the sample data provided.

=== Finding specific field of the student
. Finding the list of students with **chosen** fields that match the search keyword according to the search support stated in the User Guide.
.. Command `find e/[email protected], [email protected] j/Software p/87438807` +
Expected: The student list now displays student `Alex Yeoh` with reference to the sample data provided.
28 changes: 15 additions & 13 deletions docs/UserGuide.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ These are the prefixes supported by the `find` command: +
1. Name - `n/` +
2. Phone - `p/` +
3. Email - `e/` +
4. Address - `n/` +
4. Address - `a/` +
5. University - `u/` +
6. Major - `m/` +
7. Job Applied - `j/` +
Expand All @@ -292,7 +292,7 @@ These are 3 types of features that are supported for the `find` command: +
1. Exact keyword match - Matches your search keyword with exact keywords found in the fields of persons. +
2. Fuzzy keyword match - Matches your search keyword that is a fuzzy match with keywords found in the fields of persons. The fuzzy matching algorithm is based on the Levenshtein distance (LD) , which is a measure of the similarity between two strings. The threshold is set to 2 in HR+. This means that any keyword that is 2 characters different from the search keyword will be detected. If you are interested in finding out how the fuzzy match algorithm works, you can refer to the Java documentation on how this feature is implemented.
2. Fuzzy keyword match - Matches your search keyword that is a fuzzy match with keywords found in the fields of persons. The fuzzy matching algorithm is based on the `Levenshtein distance (LD)` , which is a measure of the similarity between two strings. The threshold is set to `2` in HR+. This means that any keyword that is 2 characters different from the search keyword will be detected. If you are interested in finding out how the fuzzy match algorithm works, you can refer to the Java API on how this method is implemented.
3. Wildcard keyword match – Matches your search keyword with 3 types of wildcard support. You should substitute the keyword " example " with your desired keyword. +
• Wildcard "example" searches for field that contains keyword example
Expand All @@ -306,20 +306,20 @@ Search results are displayed in the application console. The format is: +
(PREFIX) - represents which field the matched keyword was in. +
****

The fuzzy search algorithm is implemented to cater users that fits the following profile: +
The fuzzy search algorithm is implemented to cater to users that fit the following profiles: +
1. Unsure what they want to search for +
2. Aware of some patterns of the keywords but not the full keyword +
3. Prone to typos +

If you are certain that you want to find a certain keyword, please use the wildcard `"example"` so that all fields that contains the search keyword would be displayed only. Customizing fuzzy searching is one of our considerations for v2.0.
If you are certain that you want to find a certain keyword, please use the wildcard `"example"` so that all fields that contains the search keyword would be displayed only. Customizing fuzzy searching is one of our considerations for `v2.0`.

Examples: +

[TIP]
General tips are not repeated across different examples!

* `find bernice, charlot` +
Returns list of persons whose keywords in **any** of their fields that are of an exact match **OR** fuzzy match with `bernice` **OR** `charlot`. In the sample data provided, the list will return persons `Bernice Yu` and `Charlotte Oliveiro`. Keyword `bernice` is an exact match with one of the keywords `Bernice` and `charlot` is a fuzzy match with one of the keywords `Charlotte` in `Charlotte Oliveiro`.
Returns list of persons whose keywords in **any** of their fields are of an exact keyword match **OR** fuzzy keyword match with `bernice` **OR** `charlot`. In the sample data provided, the list will return persons `Bernice Yu` and `Charlotte Oliveiro`. Keyword `bernice` is an exact keyword match with one of the keywords `Bernice` and `charlot` is a fuzzy keyword match with one of the keywords `Charlotte` in `Charlotte Oliveiro`.

[TIP]
The search is case insensitive in HR+. e.g `bernice` might match `Bernice`. +
Expand All @@ -332,7 +332,7 @@ Returns list of persons that matches the following conditions: +
1. Keywords in their `email` field are of an exact match **OR** fuzzy match with `[email protected]` **OR** `[email protected]` **AND** +
2. Keywords in their `job applied` field are of an exact match **OR** fuzzy match with `Software` **AND** +
3. Keywords in their `phone` field are of an exact match **OR** fuzzy match with `87438807`. +
In the sample data provided, the list with return person `Alex` as he is the only person that matches all these conditions.
In the sample data provided, the list will return person `Alex` as he is the only person that matches all these conditions.

[TIP]
The first keyword is prepended with a prefix, thus this command assumes a prefix search. A prefix search does an **OR** search between keywords in the same prefix and an **AND** search between different prefixes. +
Expand All @@ -357,10 +357,10 @@ Keywords are not comma separated, thus they are treated as one keyword.

* `find bernice, "alex", ir&ast;, &ast;li` +
Returns list of persons with **any** of their fields that matches the following conditions: +
1. Keywords that are of an exact match **OR** fuzzy match with keyword `bernice`
2. Field contains keyword `alex`
3. Field starts with keyword `ir`
4. Field ends with keyword `li`
1. Keywords that are of an exact match **OR** fuzzy match with keyword `bernice` **OR**
2. Field contains keyword `alex` **OR**
3. Field starts with keyword `ir` **OR**
4. Field ends with keyword `li` +
In the sample data provided, this command will return persons `Alex Yeoh`, `Bernice Yu`, `David Li` and `Irfan Ibrahim`. +

* `find n/bernice, "alex", ir&ast;, &ast;li e/&ast;example.com p/"5" m/Computer&ast;` +
Expand Down Expand Up @@ -666,6 +666,7 @@ There is no need to save manually.

Displays the tags that are added to a student in the left panel.

// tag::futurefind[]
=== Highlights search results in user interface `[coming in v2.0]`

Highlights search results after user executes the `find` command.
Expand All @@ -682,11 +683,12 @@ Allows user to toggle which search support they want at any point of time.

Allows user to view a list of suggested searches on the fly when typing in their search keywords.

=== Customising rating criteria `[coming in v2.0]`
Specifies the criteria that candidates will be rated against.

=== Saving searches `[coming in v2.0]`
Saves searches that can be displayed in future for fast lookups.
// end::futurefind[]

=== Customising rating criteria `[coming in v2.0]`
Specifies the criteria that candidates will be rated against.

=== Sending and receiving emails `[coming in v2.0]`
Sends and receives emails within HR+.
Expand Down
16 changes: 11 additions & 5 deletions docs/team/tanhengyeow.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,33 @@

== Overview

HR+ is a recruiting and talent management desktop application targeting University Talent Acquisition Specialists. It is built to help them manage a significant number of student contacts and find the best-fitting candidates. University Talent Acquisition Specialists interact with HR+ using a Command Line Interface(CLI). HR+ has a Graphical User Interface(GUI) created with JavaFX and it is written in Java with approximately kLOC.
HR+ is a recruiting and talent management desktop application targeting University Talent Acquisition Specialists. It is built to help them manage a significant number of student contacts and find the best-fitting candidates. University Talent Acquisition Specialists interact with HR+ using a Command Line Interface(CLI). HR+ has a Graphical User Interface(GUI) created with JavaFX and it is written in Java with approximately 33 kLOC.


== Summary of contributions

* *Major enhancement*: enhanced *find command to support a variety of search patterns*
** What it does: The `find` command allows the user to search for a student easily through exact keyword match, fuzzy keyword match or wildcard keyword match.
** Justification: This feature is important as users might be managing a large number of contacts and finding the contacts that they desire is not easy.
** Highlights: This enhancement involves adding new predicates on top of existing ones. Various new classes are created to manage the new predicates. A singleton pattern class `FindResults` is created to store find results and provide utility functions for parsing predicates.
** Highlights: This enhancement involves adding new predicates on top of existing ones. Various new classes are created to manage and process the new predicates. A singleton pattern class `FindResults` is created to store find results and provide utility functions for parsing predicates.

* *Minor enhancement*: added `Major` and `GradePointAverage` fields to all students. These fields affect the `add` command and are editable by the `edit` command. They are also crucial details that affect the hiring decision of an university student.
* *Minor enhancement*: added `Major` and `GradePointAverage` fields to all students. These fields affect the `add` command and are editable by the `edit` command. They are crucial details that affect the hiring decision of an university student.

* *Code contributed*: [https://github.com/CS2103JAN2018-W14-B3/main/blob/master/collated/functional/tanhengyeow.md[Functional code]] [https://github.com/CS2103JAN2018-W14-B3/main/blob/master/collated/test/tanhengyeow.md[Test code]]

* *Other contributions*:

** Project Management:
*** Setup Travis, AppVeyor and Coveralls (https://github.com/CS2103JAN2018-W14-B3/main/pull/4[#4])
*** Managed releases `v1.2 - v1.4` on GitHub
*** Managed releases `v1.2 - v1.5` on GitHub
*** Provide updates to main repo (https://github.com/nus-cs2103-AY1718S2/addressbook-level4/pull/8[#8])
*** Maintained the issue tracker

** Enhancements to existing features:
*** Added API for backing up storage in the future (https://github.com/CS2103JAN2018-W14-B3/main/pull/11[#11])

** Documentation:
*** Updated User Guide and Developer Guide (https://github.com/CS2103JAN2018-W14-B3/main/pull/3[#3], https://github.com/CS2103JAN2018-W14-B3/main/pull/19[#19], https://github.com/CS2103JAN2018-W14-B3/main/pull/52[#52], https://github.com/CS2103JAN2018-W14-B3/main/pull/61[#61], https://github.com/CS2103JAN2018-W14-B3/main/pull/79[#79])
*** Updated User Guide and Developer Guide (https://github.com/CS2103JAN2018-W14-B3/main/pull/3[#3], https://github.com/CS2103JAN2018-W14-B3/main/pull/19[#19], https://github.com/CS2103JAN2018-W14-B3/main/pull/52[#52], https://github.com/CS2103JAN2018-W14-B3/main/pull/61[#61], https://github.com/CS2103JAN2018-W14-B3/main/pull/79[#79], https://github.com/CS2103JAN2018-W14-B3/main/pull/118[#118])

** Community:
*** Reported bugs and suggestions for other projects (https://github.com/CS2103JAN2018-W10-B2/main/issues/81[#81], https://github.com/CS2103JAN2018-W10-B2/main/issues/74[#74], https://github.com/CS2103JAN2018-W10-B2/main/issues/71[#71], https://github.com/CS2103JAN2018-W10-B2/main/issues/70[#70])
Expand All @@ -46,6 +50,8 @@ HR+ is a recruiting and talent management desktop application targeting Universi

include::../UserGuide.adoc[tag=find]

include::../UserGuide.adoc[tag=futurefind]

== Contributions to the Developer Guide

|===
Expand Down

0 comments on commit 625a56e

Please sign in to comment.