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.7][W12-4]Victoreen Robert Elliot #450

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
1 change: 1 addition & 0 deletions src/seedu/addressbook/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public CommandResult execute() {
+ "\n" + ClearCommand.MESSAGE_USAGE
+ "\n" + FindCommand.MESSAGE_USAGE
+ "\n" + ListCommand.MESSAGE_USAGE
+ "\n" + SortCommand.MESSAGE_USAGE
+ "\n" + ViewCommand.MESSAGE_USAGE
+ "\n" + ViewAllCommand.MESSAGE_USAGE
+ "\n" + HelpCommand.MESSAGE_USAGE
Expand Down
19 changes: 19 additions & 0 deletions src/seedu/addressbook/commands/SortCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package seedu.addressbook.commands;

/**
* Clears the address book.
Copy link

Choose a reason for hiding this comment

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

Incorrect comment

*/
public class SortCommand extends Command {

public static final String COMMAND_WORD = "sort";
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Sorts the address book in lexical order.\n"
+ "Example: " + COMMAND_WORD;

public static final String MESSAGE_SUCCESS = "Address book has been sorted!";

@Override
public CommandResult execute() {
addressBook.sort();
return new CommandResult(MESSAGE_SUCCESS);
}
}
7 changes: 7 additions & 0 deletions src/seedu/addressbook/data/AddressBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ public void clear() {
allPersons.clear();
}

/**
* Sorts the address book in lexical order.
*/
public void sort() {
allPersons.sort();
}

/**
* Returns a new UniquePersonList of all persons in the address book at the time of the call.
*/
Expand Down
7 changes: 6 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,9 @@ public String toString() {
return getAsTextShowAll();
}

@Override
public int compareTo(Person o) {
return this.getName().toString().compareTo(o.getName().toString());
}

}
7 changes: 7 additions & 0 deletions src/seedu/addressbook/data/person/UniquePersonList.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,13 @@ public void clear() {
internalList.clear();
}

/**
* Sorts the list.
*/
public void sort() {
Collections.sort(internalList);
}

@Override
public Iterator<Person> iterator() {
return internalList.iterator();
Expand Down
4 changes: 4 additions & 0 deletions src/seedu/addressbook/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import seedu.addressbook.commands.HelpCommand;
import seedu.addressbook.commands.IncorrectCommand;
import seedu.addressbook.commands.ListCommand;
import seedu.addressbook.commands.SortCommand;
import seedu.addressbook.commands.ViewAllCommand;
import seedu.addressbook.commands.ViewCommand;
import seedu.addressbook.data.exception.IllegalValueException;
Expand Down Expand Up @@ -85,6 +86,9 @@ public Command parseCommand(String userInput) {
case FindCommand.COMMAND_WORD:
return prepareFind(arguments);

case SortCommand.COMMAND_WORD:
return new SortCommand();

case ListCommand.COMMAND_WORD:
return new ListCommand();

Expand Down
14 changes: 14 additions & 0 deletions test/expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
|| Example: find alice bob charlie
|| list: Displays all persons in the address book as a list with index numbers.
|| Example: list
|| sort: Sorts the address book in lexical order.
|| Example: sort
|| view: Views the non-private details of the person identified by the index number in the last shown person listing.
|| Parameters: INDEX
|| Example: view 1
Expand Down Expand Up @@ -198,6 +200,18 @@
|| Enter command: || [Command entered: viewall 5]
|| Viewing person: Esther Potato Phone: 555555 Email: [email protected] Address: (private) 555, epsilon street Tags: [tubers][starchy]
|| ===================================================
|| Enter command: || [Command entered: sort]
|| Address book has been 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: find]
|| Invalid command format!
|| find: Finds all persons whose names contain any of the specified keywords (case-sensitive) and displays them as a list with index numbers.
Expand Down
8 changes: 8 additions & 0 deletions test/input.txt
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,14 @@
viewall 4
viewall 5

##########################################################
# test sort persons command
##########################################################

# should sort the address book in lexical order
sort
list

##########################################################
# test find persons command
##########################################################
Expand Down
53 changes: 53 additions & 0 deletions test/java/seedu/addressbook/commands/SortCommandTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
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.exception.IllegalValueException;
import seedu.addressbook.util.TypicalPersons;
import seedu.addressbook.util.TestUtil;

public class SortCommandTest {

private final TypicalPersons td = new TypicalPersons();

@Test
public void execute() throws IllegalValueException {
AddressBook sortedAddressBook;
AddressBook unsortedAddressBook;

sortedAddressBook = TestUtil.createAddressBook(td.amy, td.bill, td.candy, td.dan);
unsortedAddressBook = TestUtil.createAddressBook(td.bill, td.dan, td.candy, td.amy);
assertSortCommandBehavior(unsortedAddressBook, sortedAddressBook);

sortedAddressBook = TestUtil.createAddressBook(td.amy, td.bill);
unsortedAddressBook = TestUtil.createAddressBook(td.amy, td.bill);
assertSortCommandBehavior(unsortedAddressBook, sortedAddressBook);

sortedAddressBook = TestUtil.createAddressBook();
unsortedAddressBook = TestUtil.createAddressBook();
assertSortCommandBehavior(unsortedAddressBook, sortedAddressBook);
}

/**
* Executes the find command for the given keywords and verifies
* the result matches the persons in the expectedPersonList exactly.
*/
private void assertSortCommandBehavior(AddressBook input, AddressBook expected) {
SortCommand command = createSortCommand(input);
command.execute();

assertTrue(input.equals(expected));
}

private SortCommand createSortCommand(AddressBook input) {
SortCommand command = new SortCommand();
command.setData(input, Collections.emptyList());
return command;
}

}