diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 4abb17e3e..320b750ad 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -72,6 +72,11 @@ Examples: Shows a list of all persons, along with their non-private details, in the address book. + Format: `list` +== Sorting all persons alphabetically: `sort` + +Shows a list of all persons, along with their non-private details, sorted alphabetically, in the address book. + +Format: `sort` + == Finding all persons containing any keyword in their name: `find` Finds persons whose names contain any of the given keywords. + diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index 2ff8f1575..8ea15bfb7 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -41,7 +41,7 @@ public static String getMessageForPersonListShownSummary(List sortedList = addressBook.sortListByName(); + return new CommandResult(getMessageForPersonListShownSummary(sortedList), sortedList); + } +} diff --git a/src/seedu/addressbook/data/AddressBook.java b/src/seedu/addressbook/data/AddressBook.java index 537d35c89..e8c4e94de 100644 --- a/src/seedu/addressbook/data/AddressBook.java +++ b/src/seedu/addressbook/data/AddressBook.java @@ -6,6 +6,8 @@ import seedu.addressbook.data.person.UniquePersonList.DuplicatePersonException; import seedu.addressbook.data.person.UniquePersonList.PersonNotFoundException; +import java.util.List; + /** * Represents the entire address book. Contains the data of the address book. */ @@ -68,6 +70,10 @@ public UniquePersonList getAllPersons() { return new UniquePersonList(allPersons); } + public List sortListByName() { + return allPersons.sortListByName().immutableListView(); + } + @Override public boolean equals(Object other) { return other == this // short circuit if same object diff --git a/src/seedu/addressbook/data/person/UniquePersonList.java b/src/seedu/addressbook/data/person/UniquePersonList.java index d7acd8b4a..da5c577ee 100644 --- a/src/seedu/addressbook/data/person/UniquePersonList.java +++ b/src/seedu/addressbook/data/person/UniquePersonList.java @@ -1,11 +1,6 @@ package seedu.addressbook.data.person; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; +import java.util.*; import seedu.addressbook.common.Utils; import seedu.addressbook.data.exception.DuplicateDataException; @@ -128,6 +123,28 @@ public void remove(ReadOnlyPerson toRemove) throws PersonNotFoundException { public void clear() { internalList.clear(); } + + /** + * Comparator used for sorting in sortListByName method. + */ + class SortByName implements Comparator { + @Override + public int compare (ReadOnlyPerson person1, ReadOnlyPerson person2) { + return person1.getName().toString().compareTo(person2.getName().toString()); + } + } + + public UniquePersonList sortListByName() { + try { + UniquePersonList sortedList = new UniquePersonList(this.internalList); + sortedList.internalList.sort(new SortByName()); + return sortedList; + } catch (DuplicatePersonException e) { + e.printStackTrace(); + } + // return empty list if there are no names to sort + return new UniquePersonList(); + } @Override public Iterator iterator() { diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index abddb3f45..c582efe1c 100644 --- a/src/seedu/addressbook/parser/Parser.java +++ b/src/seedu/addressbook/parser/Parser.java @@ -11,17 +11,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import seedu.addressbook.commands.AddCommand; -import seedu.addressbook.commands.ClearCommand; -import seedu.addressbook.commands.Command; -import seedu.addressbook.commands.DeleteCommand; -import seedu.addressbook.commands.ExitCommand; -import seedu.addressbook.commands.FindCommand; -import seedu.addressbook.commands.HelpCommand; -import seedu.addressbook.commands.IncorrectCommand; -import seedu.addressbook.commands.ListCommand; -import seedu.addressbook.commands.ViewAllCommand; -import seedu.addressbook.commands.ViewCommand; +import seedu.addressbook.commands.*; import seedu.addressbook.data.exception.IllegalValueException; /** @@ -72,34 +62,36 @@ public Command parseCommand(String userInput) { final String arguments = matcher.group("arguments"); switch (commandWord) { - - case AddCommand.COMMAND_WORD: - return prepareAdd(arguments); - - case DeleteCommand.COMMAND_WORD: - return prepareDelete(arguments); - - case ClearCommand.COMMAND_WORD: - return new ClearCommand(); - - case FindCommand.COMMAND_WORD: - return prepareFind(arguments); - - case ListCommand.COMMAND_WORD: - return new ListCommand(); - - case ViewCommand.COMMAND_WORD: - return prepareView(arguments); - - case ViewAllCommand.COMMAND_WORD: - return prepareViewAll(arguments); - - case ExitCommand.COMMAND_WORD: - return new ExitCommand(); - - case HelpCommand.COMMAND_WORD: // Fallthrough - default: - return new HelpCommand(); + case AddCommand.COMMAND_WORD: + return prepareAdd(arguments); + + case DeleteCommand.COMMAND_WORD: + return prepareDelete(arguments); + + case ClearCommand.COMMAND_WORD: + return new ClearCommand(); + + case FindCommand.COMMAND_WORD: + return prepareFind(arguments); + + case ListCommand.COMMAND_WORD: + return new ListCommand(); + + case SortCommand.COMMAND_WORD: + return new SortCommand(); + + case ViewCommand.COMMAND_WORD: + return prepareView(arguments); + + case ViewAllCommand.COMMAND_WORD: + return prepareViewAll(arguments); + + case ExitCommand.COMMAND_WORD: + return new ExitCommand(); + + case HelpCommand.COMMAND_WORD: // Fallthrough + default: + return new HelpCommand(); } } diff --git a/test/expected.txt b/test/expected.txt index 56fe5fcac..ae94d2335 100644 --- a/test/expected.txt +++ b/test/expected.txt @@ -102,24 +102,24 @@ || || 2 persons listed! || =================================================== -|| Enter command: || [Command entered: add Charlie Dickson pp/333333 e/charlie.d@nus.edu.sg a/333, gamma street t/friends t/school] -|| New person added: Charlie Dickson Phone: (private) 333333 Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] +|| Enter command: || [Command entered: add Dickson Ee p/444444 pe/dickson@nus.edu.sg a/444, delta street t/friends] +|| New person added: Dickson Ee Phone: 444444 Email: (private) dickson@nus.edu.sg Address: 444, delta street Tags: [friends] || =================================================== || 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] +|| 3. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] || || 3 persons listed! || =================================================== -|| Enter command: || [Command entered: add Dickson Ee p/444444 pe/dickson@nus.edu.sg a/444, delta street t/friends] -|| New person added: Dickson Ee Phone: 444444 Email: (private) dickson@nus.edu.sg Address: 444, delta street Tags: [friends] +|| Enter command: || [Command entered: add Charlie Dickson pp/333333 e/charlie.d@nus.edu.sg a/333, gamma street t/friends t/school] +|| New person added: Charlie Dickson Phone: (private) 333333 Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] || =================================================== || 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] +|| 3. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 4. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] || || 4 persons listed! || =================================================== @@ -129,8 +129,8 @@ || 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] +|| 3. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 4. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] || 5. Esther Potato Phone: 555555 Email: esther@not.a.real.potato Tags: [tubers][starchy] || || 5 persons listed! @@ -138,6 +138,15 @@ || 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 || =================================================== +|| Enter command: || [Command entered: sort] +|| 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: view] || Invalid command format! || view: Views the non-private details of the person identified by the index number in the last shown person listing. @@ -222,8 +231,8 @@ || 1 persons listed! || =================================================== || Enter command: || [Command entered: find Dickson] -|| 1. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] -|| 2. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 1. Dickson Ee Phone: 444444 Address: 444, delta street Tags: [friends] +|| 2. Charlie Dickson Email: charlie.d@nus.edu.sg Address: 333, gamma street Tags: [school][friends] || || 2 persons listed! || =================================================== diff --git a/test/input.txt b/test/input.txt index eb8df81f8..c58eb49b6 100644 --- a/test/input.txt +++ b/test/input.txt @@ -44,16 +44,23 @@ list add Betsy Choo pp/222222 pe/benchoo@nus.edu.sg pa/222, beta street t/secretive list - add Charlie Dickson pp/333333 e/charlie.d@nus.edu.sg a/333, gamma street t/friends t/school - list add Dickson Ee p/444444 pe/dickson@nus.edu.sg a/444, delta street t/friends list + add Charlie Dickson pp/333333 e/charlie.d@nus.edu.sg a/333, gamma street t/friends t/school + list add Esther Potato p/555555 e/esther@not.a.real.potato pa/555, epsilon street t/tubers t/starchy list - + # should not allow adding duplicate persons add Esther Potato p/555555 e/esther@not.a.real.potato pa/555, epsilon street t/tubers t/starchy +########################################################## +# test sort command +########################################################## + + # should display Charlie Dickson before Dickson Ee + sort + ########################################################## # test view/viewall persons command ########################################################## diff --git a/test/java/seedu/addressbook/commands/FindCommandTest.java b/test/java/seedu/addressbook/commands/FindCommandTest.java index f21b1e8e7..47e567135 100644 --- a/test/java/seedu/addressbook/commands/FindCommandTest.java +++ b/test/java/seedu/addressbook/commands/FindCommandTest.java @@ -1,7 +1,5 @@ package seedu.addressbook.commands; -import static org.junit.Assert.assertEquals; - import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -15,6 +13,8 @@ import seedu.addressbook.data.person.ReadOnlyPerson; import seedu.addressbook.util.TypicalPersons; +import static org.testng.AssertJUnit.assertEquals; + public class FindCommandTest { private final AddressBook addressBook = new TypicalPersons().getTypicalAddressBook(); diff --git a/test/java/seedu/addressbook/commands/ViewCommandTest.java b/test/java/seedu/addressbook/commands/ViewCommandTest.java index f2e4d420a..1d2108d64 100644 --- a/test/java/seedu/addressbook/commands/ViewCommandTest.java +++ b/test/java/seedu/addressbook/commands/ViewCommandTest.java @@ -149,5 +149,4 @@ private static void assertViewBehavior(Command viewCommand, AddressBook addressB // addressbook was not modified. assertEquals(expectedAddressBook.getAllPersons(), addressBook.getAllPersons()); } - }