Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[W5][W13-1]Gong Changda #151

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/UserGuide.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@ Views all details of the 2nd person in the address book.
`viewall 1` +
Views all details of the 1st person in the results of the `find` command.

== Sort all persons: `sort`

Sorts all persons according to their names in ascending order. +
Format: `sort`

== Clearing all entries : `clear`

Clears all entries from the address book. +
Expand Down
1 change: 1 addition & 0 deletions src/seedu/addressbook/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public CommandResult execute() {
+ "\n" + ViewAllCommand.MESSAGE_USAGE
+ "\n" + HelpCommand.MESSAGE_USAGE
+ "\n" + ExitCommand.MESSAGE_USAGE
+ "\n" + SortCommand.MESSAGE_USAGE
);
}
}
16 changes: 16 additions & 0 deletions src/seedu/addressbook/commands/SortCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package seedu.addressbook.commands;

public class SortCommand extends Command {

public static final String COMMAND_WORD = "sort";
public static final String MESSAGE_USAGE = COMMAND_WORD
+ " : Sorts all the persons in the address book according to their names in alphabetical order.\n"
+ "Example: " + COMMAND_WORD;
public static final String MESSAGE_SUCCESS = "Address book sorted!";

@Override
public CommandResult execute() {
addressBook.sort();
return new CommandResult(MESSAGE_SUCCESS);
}
}
4 changes: 4 additions & 0 deletions src/seedu/addressbook/data/AddressBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,14 @@ public UniquePersonList getAllPersons() {
return new UniquePersonList(allPersons);
}


@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof AddressBook // instanceof handles nulls
&& this.allPersons.equals(((AddressBook) other).allPersons));
}
public void sort(){
allPersons.sort();
}
}
5 changes: 4 additions & 1 deletion src/seedu/addressbook/data/person/Person.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Represents a Person in the address book.
* Guarantees: details are present and not null, field values are validated.
*/
public class Person implements ReadOnlyPerson {
public class Person implements ReadOnlyPerson, Comparable<Person> {

private Name name;
private Phone phone;
Expand Down Expand Up @@ -88,4 +88,7 @@ public String toString() {
return getAsTextShowAll();
}

public int compareTo(Person another){
return this.name.fullName.compareTo(another.name.fullName);
}
}
3 changes: 3 additions & 0 deletions src/seedu/addressbook/data/person/UniquePersonList.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,4 +140,7 @@ public boolean equals(Object other) {
|| (other instanceof UniquePersonList // instanceof handles nulls
&& this.internalList.equals(((UniquePersonList) other).internalList));
}
public void sort(){
Collections.sort(internalList);
}
}
4 changes: 4 additions & 0 deletions src/seedu/addressbook/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import seedu.addressbook.commands.ListCommand;
import seedu.addressbook.commands.ViewAllCommand;
import seedu.addressbook.commands.ViewCommand;
import seedu.addressbook.commands.SortCommand;
import seedu.addressbook.data.exception.IllegalValueException;

/**
Expand Down Expand Up @@ -88,6 +89,9 @@ public Command parseCommand(String userInput) {
case ListCommand.COMMAND_WORD:
return new ListCommand();

case SortCommand.COMMAND_WORD:
return new SortCommand();

case ViewCommand.COMMAND_WORD:
return prepareView(arguments);

Expand Down
38 changes: 38 additions & 0 deletions test/expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
|| Example: help
|| exit: Exits the program.
|| Example: exit
|| sort : Sorts all the persons in the address book according to their names in alphabetical order.
|| Example: sort
|| ===================================================
|| Enter command: || [Command entered: delete 1]
|| The person index provided is invalid
Expand Down Expand Up @@ -297,6 +299,42 @@
||
|| 0 persons listed!
|| ===================================================
|| Enter command: || [Command entered: add Charlie Dickson pp/333333 e/[email protected] a/333, gamma street t/friends t/school]
|| New person added: Charlie Dickson Phone: (private) 333333 Email: [email protected] Address: 333, gamma street Tags: [school][friends]
|| ===================================================
|| Enter command: || [Command entered: add Adam Brown p/111111 e/[email protected] a/111, alpha street]
|| New person added: Adam Brown Phone: 111111 Email: [email protected] Address: 111, alpha street Tags:
|| ===================================================
|| Enter command: || [Command entered: add Esther Potato p/555555 e/[email protected] pa/555, epsilon street t/tubers t/starchy]
|| New person added: Esther Potato Phone: 555555 Email: [email protected] Address: (private) 555, epsilon street Tags: [tubers][starchy]
|| ===================================================
|| Enter command: || [Command entered: add Betsy Choo pp/222222 pe/[email protected] pa/222, beta street t/secretive]
|| New person added: Betsy Choo Phone: (private) 222222 Email: (private) [email protected] Address: (private) 222, beta street Tags: [secretive]
|| ===================================================
|| Enter command: || [Command entered: add Dickson Ee p/444444 pe/[email protected] a/444, delta street t/friends]
|| New person added: Dickson Ee Phone: 444444 Email: (private) [email protected] Address: 444, delta street Tags: [friends]
|| ===================================================
|| Enter command: || [Command entered: list]
|| 1. Charlie Dickson Email: [email protected] Address: 333, gamma street Tags: [school][friends]
|| 2. Adam Brown Phone: 111111 Email: [email protected] Address: 111, alpha street Tags:
|| 3. Esther Potato Phone: 555555 Email: [email protected] Tags: [tubers][starchy]
|| 4. Betsy Choo Tags: [secretive]
|| 5. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends]
||
|| 5 persons listed!
|| ===================================================
|| Enter command: || [Command entered: sort]
|| Address book sorted!
|| ===================================================
|| Enter command: || [Command entered: list]
|| 1. Adam Brown Phone: 111111 Email: [email protected] Address: 111, alpha street Tags:
|| 2. Betsy Choo Tags: [secretive]
|| 3. Charlie Dickson Email: [email protected] Address: 333, gamma street Tags: [school][friends]
|| 4. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends]
|| 5. Esther Potato Phone: 555555 Email: [email protected] Tags: [tubers][starchy]
||
|| 5 persons listed!
|| ===================================================
|| Enter command: || [Command entered: exit]
|| Exiting Address Book as requested ...
|| ===================================================
Expand Down
16 changes: 16 additions & 0 deletions test/input.txt
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,22 @@
list

##########################################################
# test sort command
##########################################################
# first we add some persons to the address book.
add Charlie Dickson pp/333333 e/[email protected] a/333, gamma street t/friends t/school
add Adam Brown p/111111 e/[email protected] a/111, alpha street
add Esther Potato p/555555 e/[email protected] pa/555, epsilon street t/tubers t/starchy
add Betsy Choo pp/222222 pe/[email protected] pa/222, beta street t/secretive
add Dickson Ee p/444444 pe/[email protected] a/444, delta street t/friends
list

# Now we sort the address book
sort

# After that we examine what we get
list
##########################################################
# test exit command
##########################################################

Expand Down
37 changes: 37 additions & 0 deletions test/java/seedu/addressbook/commands/SortCommandTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package seedu.addressbook.commands;


import static org.junit.Assert.assertTrue;
import java.util.Collections;
import org.junit.Test;
import seedu.addressbook.data.AddressBook;
import seedu.addressbook.data.person.Address;
import seedu.addressbook.data.person.Email;
import seedu.addressbook.data.person.Name;
import seedu.addressbook.data.person.Person;
import seedu.addressbook.data.person.Phone;
import seedu.addressbook.util.TestUtil;


public class SortCommandTest {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good effort in writing JUnit test.

private AddressBook addressBook;
private String testResult;

@Test
public void sortTest() throws Exception{
Person johnDoe = new Person(new Name("John Doe"), new Phone("61234567", false),
new Email("[email protected]", false), new Address("395C Ben Road", false), Collections.emptySet());
Person janeDoe = new Person(new Name("Jane Doe"), new Phone("91234567", false),
new Email("[email protected]", false), new Address("33G Ohm Road", false), Collections.emptySet());
Person samDoe = new Person(new Name("Sam Doe"), new Phone("63345566", false),
new Email("[email protected]", false), new Address("55G Abc Road", false), Collections.emptySet());
Person davidGrant = new Person(new Name("David Grant"), new Phone("61121122", false),
new Email("[email protected]", false), new Address("44H Define Road", false),
Collections.emptySet());

addressBook = TestUtil.createAddressBook(johnDoe, janeDoe, davidGrant, samDoe);
addressBook.sort();
testResult = addressBook.getAllPersons().immutableListView().get(0).getName().fullName;
assertTrue(testResult.equals("David Grant"));
}
}