From 11cd0d0a7f29cac8845e563f06c5873bf24fd2a2 Mon Sep 17 00:00:00 2001 From: Robert Victoreen Date: Thu, 13 Sep 2018 20:01:01 +0800 Subject: [PATCH 1/4] Add sort command --- .../addressbook/commands/SortCommand.java | 19 +++++++ src/seedu/addressbook/data/AddressBook.java | 7 +++ src/seedu/addressbook/data/person/Person.java | 7 ++- .../data/person/UniquePersonList.java | 7 +++ src/seedu/addressbook/parser/Parser.java | 4 ++ test/expected.txt | 14 +++++ test/input.txt | 8 +++ .../addressbook/commands/SortCommandTest.java | 53 +++++++++++++++++++ 8 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/seedu/addressbook/commands/SortCommand.java create mode 100644 test/java/seedu/addressbook/commands/SortCommandTest.java diff --git a/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java new file mode 100644 index 000000000..edcecdb4b --- /dev/null +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -0,0 +1,19 @@ +package seedu.addressbook.commands; + +/** + * Clears the address book. + */ +public class SortCommand extends Command { + + public static final String COMMAND_WORD = "sort"; + public static final String MESSAGE_USAGE = "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); + } +} diff --git a/src/seedu/addressbook/data/AddressBook.java b/src/seedu/addressbook/data/AddressBook.java index 537d35c89..de57c768c 100644 --- a/src/seedu/addressbook/data/AddressBook.java +++ b/src/seedu/addressbook/data/AddressBook.java @@ -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. */ diff --git a/src/seedu/addressbook/data/person/Person.java b/src/seedu/addressbook/data/person/Person.java index 64551c7fe..b73c5f41d 100644 --- a/src/seedu/addressbook/data/person/Person.java +++ b/src/seedu/addressbook/data/person/Person.java @@ -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 { private Name name; private Phone phone; @@ -88,4 +88,9 @@ public String toString() { return getAsTextShowAll(); } + @Override + public int compareTo(Person o) { + return this.getName().toString().compareTo(o.getName().toString()); + } + } diff --git a/src/seedu/addressbook/data/person/UniquePersonList.java b/src/seedu/addressbook/data/person/UniquePersonList.java index d7acd8b4a..0783d4222 100644 --- a/src/seedu/addressbook/data/person/UniquePersonList.java +++ b/src/seedu/addressbook/data/person/UniquePersonList.java @@ -129,6 +129,13 @@ public void clear() { internalList.clear(); } + /** + * Sorts the list. + */ + public void sort() { + Collections.sort(internalList); + } + @Override public Iterator iterator() { return internalList.iterator(); diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index abddb3f45..2ebaa82c1 100644 --- a/src/seedu/addressbook/parser/Parser.java +++ b/src/seedu/addressbook/parser/Parser.java @@ -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; @@ -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(); diff --git a/test/expected.txt b/test/expected.txt index 56fe5fcac..adb83da0a 100644 --- a/test/expected.txt +++ b/test/expected.txt @@ -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 @@ -135,6 +137,18 @@ || || 5 persons listed! || =================================================== +|| Enter command: || [Command entered: sort] +|| Address book has been sorted! +|| =================================================== +|| Enter command: || [Command entered: list] +|| 1. Adam Brown Phone: 111111 Email: adam@gmail.com Address: 111, alpha street Tags: +|| 2. Betsy Choo Tags: [secretive] +|| 3. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] +|| 4. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 5. Esther Potato Phone: 555555 Email: esther@not.a.real.potato Tags: [tubers][starchy] +|| +|| 5 persons listed! +|| =================================================== || Enter command: || [Command entered: add Esther Potato p/555555 e/esther@not.a.real.potato pa/555, epsilon street t/tubers t/starchy] || This person already exists in the address book || =================================================== diff --git a/test/input.txt b/test/input.txt index eb8df81f8..bb8a73eae 100644 --- a/test/input.txt +++ b/test/input.txt @@ -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 ########################################################## diff --git a/test/java/seedu/addressbook/commands/SortCommandTest.java b/test/java/seedu/addressbook/commands/SortCommandTest.java new file mode 100644 index 000000000..509590f7c --- /dev/null +++ b/test/java/seedu/addressbook/commands/SortCommandTest.java @@ -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; + } + +} From 9f17c1df331ac0bf74261df41123dc6c91a6db77 Mon Sep 17 00:00:00 2001 From: Robert Victoreen Date: Thu, 13 Sep 2018 20:26:35 +0800 Subject: [PATCH 2/4] Fix test input/output --- .../addressbook/commands/HelpCommand.java | 1 + test/expected.txt | 24 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/seedu/addressbook/commands/HelpCommand.java b/src/seedu/addressbook/commands/HelpCommand.java index 9be217d89..d20a0125c 100644 --- a/src/seedu/addressbook/commands/HelpCommand.java +++ b/src/seedu/addressbook/commands/HelpCommand.java @@ -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 diff --git a/test/expected.txt b/test/expected.txt index adb83da0a..4f41d41eb 100644 --- a/test/expected.txt +++ b/test/expected.txt @@ -137,18 +137,6 @@ || || 5 persons listed! || =================================================== -|| Enter command: || [Command entered: sort] -|| Address book has been sorted! -|| =================================================== -|| Enter command: || [Command entered: list] -|| 1. Adam Brown Phone: 111111 Email: adam@gmail.com Address: 111, alpha street Tags: -|| 2. Betsy Choo Tags: [secretive] -|| 3. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] -|| 4. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] -|| 5. Esther Potato Phone: 555555 Email: esther@not.a.real.potato Tags: [tubers][starchy] -|| -|| 5 persons listed! -|| =================================================== || Enter command: || [Command entered: add Esther Potato p/555555 e/esther@not.a.real.potato pa/555, epsilon street t/tubers t/starchy] || This person already exists in the address book || =================================================== @@ -212,6 +200,18 @@ || Enter command: || [Command entered: viewall 5] || Viewing person: Esther Potato Phone: 555555 Email: esther@not.a.real.potato 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: adam@gmail.com Address: 111, alpha street Tags: +|| 2. Betsy Choo Tags: [secretive] +|| 3. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] +|| 4. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 5. Esther Potato Phone: 555555 Email: esther@not.a.real.potato 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. From 1dfd644e42d0e9f6cd866880b7a65628c219dab4 Mon Sep 17 00:00:00 2001 From: Robert Victoreen Date: Thu, 13 Sep 2018 20:33:25 +0800 Subject: [PATCH 3/4] Usage message format --- src/seedu/addressbook/commands/SortCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java index edcecdb4b..238390d9b 100644 --- a/src/seedu/addressbook/commands/SortCommand.java +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -6,7 +6,7 @@ public class SortCommand extends Command { public static final String COMMAND_WORD = "sort"; - public static final String MESSAGE_USAGE = "Sorts the address book in lexical order.\n" + 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!"; From a01f42e70096856dbe44fcbcc7add5b6c022f1fe Mon Sep 17 00:00:00 2001 From: Robert Victoreen Date: Thu, 13 Sep 2018 20:48:35 +0800 Subject: [PATCH 4/4] Fixed expected output --- test/expected.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/expected.txt b/test/expected.txt index 4f41d41eb..c99ed4ded 100644 --- a/test/expected.txt +++ b/test/expected.txt @@ -204,12 +204,12 @@ || Address book has been sorted! || =================================================== || Enter command: || [Command entered: list] -|| 1. Adam Brown Phone: 111111 Email: adam@gmail.com Address: 111, alpha street Tags: +|| 1. Adam Brown Phone: 111111 Email: adam@gmail.com Address: 111, alpha street Tags: || 2. Betsy Choo Tags: [secretive] || 3. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] || 4. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] || 5. Esther Potato Phone: 555555 Email: esther@not.a.real.potato Tags: [tubers][starchy] -|| +|| || 5 persons listed! || =================================================== || Enter command: || [Command entered: find]