From 090bd89d27dd5fd7503f6b617cf6e3c3054ca3b1 Mon Sep 17 00:00:00 2001 From: Tan Wei Jie Date: Wed, 28 Feb 2018 22:12:22 +0800 Subject: [PATCH 1/3] Add dummy sort command Update help command Update parser to utilise sort command --- .../addressbook/commands/HelpCommand.java | 1 + .../addressbook/commands/SortCommand.java | 25 +++++++++++++++++++ src/seedu/addressbook/parser/Parser.java | 3 +++ 3 files changed, 29 insertions(+) create mode 100644 src/seedu/addressbook/commands/SortCommand.java diff --git a/src/seedu/addressbook/commands/HelpCommand.java b/src/seedu/addressbook/commands/HelpCommand.java index ef2ed7d0e..0c8006167 100644 --- a/src/seedu/addressbook/commands/HelpCommand.java +++ b/src/seedu/addressbook/commands/HelpCommand.java @@ -16,6 +16,7 @@ public class HelpCommand extends Command { + "\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/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java new file mode 100644 index 000000000..b6a4e8a4d --- /dev/null +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -0,0 +1,25 @@ +package seedu.addressbook.commands; + +import seedu.addressbook.data.person.ReadOnlyPerson; + +import java.util.List; + + +/** + * Lists all persons in the address book to the user sorted alphabetically. + */ +public class SortCommand extends Command { + + public static final String COMMAND_WORD = "sort"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ":\n" + + "Displays all persons in the address book sorted in alphabetical order with index numbers as a list.\n\t" + + "Example: " + COMMAND_WORD; + + + @Override + public CommandResult execute() { + List allPersons = addressBook.getAllPersons().immutableListView(); + return new CommandResult("This is the sort command."); + } +} diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index 58f4f7e6c..2cd0f5a55 100644 --- a/src/seedu/addressbook/parser/Parser.java +++ b/src/seedu/addressbook/parser/Parser.java @@ -72,6 +72,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); From 5d930d626d1015ce6ecc15c0ac92ac4a113a55d5 Mon Sep 17 00:00:00 2001 From: Tan Wei Jie Date: Thu, 1 Mar 2018 12:26:07 +0800 Subject: [PATCH 2/3] Implement actual sort command Add sort command message Update command to show sort message Remove wildcard imports from parser --- src/seedu/addressbook/commands/Command.java | 10 ++++++++++ .../addressbook/commands/SortCommand.java | 3 ++- src/seedu/addressbook/common/Messages.java | 1 + src/seedu/addressbook/data/AddressBook.java | 7 +++++++ .../data/person/UniquePersonList.java | 10 ++++++++++ src/seedu/addressbook/parser/Parser.java | 19 +++++++++++++++++-- 6 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index a54cbcb5b..d8cba4744 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -36,6 +36,16 @@ public static String getMessageForPersonListShownSummary(List sortedPersonsDisplayed) { + return String.format(Messages.MESSAGE_PERSONS_SORTED_OVERVIEW, sortedPersonsDisplayed.size()); + } + /** * Executes the command and returns the result. */ diff --git a/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java index b6a4e8a4d..514ab9510 100644 --- a/src/seedu/addressbook/commands/SortCommand.java +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -19,7 +19,8 @@ public class SortCommand extends Command { @Override public CommandResult execute() { + addressBook.sort(); List allPersons = addressBook.getAllPersons().immutableListView(); - return new CommandResult("This is the sort command."); + return new CommandResult(getMessageForSortListShownSummary(allPersons), allPersons); } } diff --git a/src/seedu/addressbook/common/Messages.java b/src/seedu/addressbook/common/Messages.java index 02cfe6155..6c77a664e 100644 --- a/src/seedu/addressbook/common/Messages.java +++ b/src/seedu/addressbook/common/Messages.java @@ -9,6 +9,7 @@ public class Messages { public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX = "The person index provided is invalid"; public static final String MESSAGE_PERSON_NOT_IN_ADDRESSBOOK = "Person could not be found in address book"; public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!"; + public static final String MESSAGE_PERSONS_SORTED_OVERVIEW = "%1$d persons sorted!"; public static final String MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE = "Launch command format: " + "java seedu.addressbook.Main [STORAGE_FILE_PATH]"; public static final String MESSAGE_WELCOME = "Welcome to your Address Book!"; diff --git a/src/seedu/addressbook/data/AddressBook.java b/src/seedu/addressbook/data/AddressBook.java index 7af05d271..52056f5db 100644 --- a/src/seedu/addressbook/data/AddressBook.java +++ b/src/seedu/addressbook/data/AddressBook.java @@ -98,6 +98,13 @@ public void removePerson(ReadOnlyPerson toRemove) throws PersonNotFoundException allPersons.remove(toRemove); } + /** + * Sorts all persons by name in alphabetical order in the address book. + */ + public void sort() { + allPersons.sort(); + } + /** * Clears all persons and tags from the address book. */ diff --git a/src/seedu/addressbook/data/person/UniquePersonList.java b/src/seedu/addressbook/data/person/UniquePersonList.java index c4848a1b4..c42c1bca0 100644 --- a/src/seedu/addressbook/data/person/UniquePersonList.java +++ b/src/seedu/addressbook/data/person/UniquePersonList.java @@ -106,6 +106,16 @@ public void remove(ReadOnlyPerson toRemove) throws PersonNotFoundException { } } + /** + * Sorts all persons in list alphabetically. Similar names are sorted lexicographically. + */ + public void sort() { + internalList.sort( + Comparator.comparing((Person p) -> p.getName().toString(), + (s1, s2) -> (s1.compareToIgnoreCase(s2) == 0) ? s1.compareTo(s2) : s1.compareToIgnoreCase(s2)) + ); + } + /** * Clears all persons in list. */ diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index 2cd0f5a55..3bb36560c 100644 --- a/src/seedu/addressbook/parser/Parser.java +++ b/src/seedu/addressbook/parser/Parser.java @@ -1,9 +1,24 @@ package seedu.addressbook.parser; -import seedu.addressbook.commands.*; +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.SortCommand; +import seedu.addressbook.commands.ViewAllCommand; +import seedu.addressbook.commands.ViewCommand; import seedu.addressbook.data.exception.IllegalValueException; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; From b46ce8ce06140df14d75d8854a27121f1156024a Mon Sep 17 00:00:00 2001 From: Tan Wei Jie Date: Thu, 1 Mar 2018 14:05:44 +0800 Subject: [PATCH 3/3] Update test cases and user guide Apply minor changes to method name for sort command --- doc/UserGuide.md | 4 ++++ src/seedu/addressbook/commands/Command.java | 2 +- .../addressbook/commands/SortCommand.java | 2 +- .../seedu/addressbook/logic/LogicTest.java | 24 +++++++++++++++++++ .../seedu/addressbook/parser/ParserTest.java | 6 +++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/doc/UserGuide.md b/doc/UserGuide.md index d03dfce73..90f778244 100644 --- a/doc/UserGuide.md +++ b/doc/UserGuide.md @@ -38,6 +38,10 @@ Examples: Shows a list of all persons in the address book.
Format: `list` +## Sort all persons in list : `sort` +Shows a list of all persons in the address book sorted alphabetically.
+Format: `sort` + ## Finding all persons containing any keyword in their name: `find` Finds persons whose names contain any of the given keywords.
Format: `find KEYWORD [MORE_KEYWORDS]` diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index d8cba4744..5dace6fd4 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -42,7 +42,7 @@ public static String getMessageForPersonListShownSummary(List sortedPersonsDisplayed) { + public static String getMessageForSortedListShownSummary(List sortedPersonsDisplayed) { return String.format(Messages.MESSAGE_PERSONS_SORTED_OVERVIEW, sortedPersonsDisplayed.size()); } diff --git a/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java index 514ab9510..4896d324d 100644 --- a/src/seedu/addressbook/commands/SortCommand.java +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -21,6 +21,6 @@ public class SortCommand extends Command { public CommandResult execute() { addressBook.sort(); List allPersons = addressBook.getAllPersons().immutableListView(); - return new CommandResult(getMessageForSortListShownSummary(allPersons), allPersons); + return new CommandResult(getMessageForSortedListShownSummary(allPersons), allPersons); } } diff --git a/test/java/seedu/addressbook/logic/LogicTest.java b/test/java/seedu/addressbook/logic/LogicTest.java index 7efa921ca..4fced7394 100644 --- a/test/java/seedu/addressbook/logic/LogicTest.java +++ b/test/java/seedu/addressbook/logic/LogicTest.java @@ -201,6 +201,30 @@ public void execute_list_showsAllPersons() throws Exception { expectedList); } + @Test + public void execute_sort_showsAllSortedPersons() throws Exception { + TestDataHelper helper = new TestDataHelper(); + Person p1 = helper.generatePersonWithName("John doe"); + Person p2 = helper.generatePersonWithName("John Doe"); + Person p3 = helper.generatePersonWithName("Jane Low"); + Person p4 = helper.generatePersonWithName("Blake Stu"); + Person p5 = helper.generatePersonWithName("Hob wright"); + Person p6 = helper.generatePersonWithName("JohN Doe"); + Person p7 = helper.generatePersonWithName("Leonard"); + Person p8 = helper.generatePersonWithName("Hob Wright"); + + List eightPersons = helper.generatePersonList(p1, p2, p3, p4, p5, p6, p7, p8); + helper.addToAddressBook(addressBook, eightPersons); + List expectedList = helper.generatePersonList(p4, p8, p5, p3, p6, p2, p1, p7); + AddressBook expectedAB = helper.generateAddressBook(expectedList); + + assertCommandBehavior("sort", + Command.getMessageForSortedListShownSummary(expectedList), + expectedAB, + true, + expectedList); + } + @Test public void execute_view_invalidArgsFormat() throws Exception { String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, ViewCommand.MESSAGE_USAGE); diff --git a/test/java/seedu/addressbook/parser/ParserTest.java b/test/java/seedu/addressbook/parser/ParserTest.java index f01be613c..912bb12c1 100644 --- a/test/java/seedu/addressbook/parser/ParserTest.java +++ b/test/java/seedu/addressbook/parser/ParserTest.java @@ -59,6 +59,12 @@ public void listCommand_parsedCorrectly() { parseAndAssertCommandType(input, ListCommand.class); } + @Test + public void sortCommand_parsedCorrectly() { + final String input = "sort"; + parseAndAssertCommandType(input, SortCommand.class); + } + @Test public void exitCommand_parsedCorrectly() { final String input = "exit";