From f81f535388d8d391a08b707b856f787e4a1127b3 Mon Sep 17 00:00:00 2001 From: fishTT <1070450490@qq.com> Date: Mon, 5 Mar 2018 20:45:10 +0800 Subject: [PATCH 1/3] added method to sort by name --- src/seedu/addressbook/commands/Command.java | 11 +++++++- .../addressbook/commands/HelpCommand.java | 1 + .../addressbook/commands/SortCommand.java | 27 +++++++++++++++++++ src/seedu/addressbook/common/Messages.java | 1 + src/seedu/addressbook/data/AddressBook.java | 7 ++++- .../data/person/UniquePersonList.java | 13 +++++++++ src/seedu/addressbook/parser/Parser.java | 3 +++ 7 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/seedu/addressbook/commands/SortCommand.java diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index a54cbcb5b..77e4d9365 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -35,7 +35,16 @@ protected Command() { public static String getMessageForPersonListShownSummary(List personsDisplayed) { return String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, personsDisplayed.size()); } - + /** + *Constructs a feedback message to summarise an operation that displayed a sorted list of persons + * + *@param sorted personsDisplayed used to generate summary + *@return summary message for sorted persons displayed + */ + public static String getMessageForPersonSortShownSummary(List personsDisplayed) { + return String.format(Messages.MESSAGE_PERSONS_SORTED_OVERVIEW, personsDisplayed.size()); + } + /** * Executes the command and returns the result. */ diff --git a/src/seedu/addressbook/commands/HelpCommand.java b/src/seedu/addressbook/commands/HelpCommand.java index ef2ed7d0e..49d6a77ed 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..c438da82f --- /dev/null +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -0,0 +1,27 @@ +package seedu.addressbook.commands; + +import seedu.addressbook.data.person.Name; +import seedu.addressbook.data.person.ReadOnlyPerson; + +import java.util.List; + + +/** + * Sort all persons in the address book to the user. + */ +public class SortCommand extends Command { + + public static final String COMMAND_WORD = "sort"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ":\n" + + "Displays all persons sorted by name alphabetically.\n\t" + + "Example: " + COMMAND_WORD; + + + @Override + public CommandResult execute() { + addressBook.sort(); + List allPersons = addressBook.getAllPersons().immutableListView(); + return new CommandResult(getMessageForPersonSortShownSummary(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..5f4cb717e 100644 --- a/src/seedu/addressbook/data/AddressBook.java +++ b/src/seedu/addressbook/data/AddressBook.java @@ -81,7 +81,12 @@ public void addPerson(Person toAdd) throws DuplicatePersonException { syncTagsWithMasterList(toAdd); allPersons.add(toAdd); } - + /** + * Sort all persons by name in alphabectical order. + */ + public void sort() { + allPersons.sort(); + } /** * Checks if an equivalent person exists in the address book. */ diff --git a/src/seedu/addressbook/data/person/UniquePersonList.java b/src/seedu/addressbook/data/person/UniquePersonList.java index c4848a1b4..510634f0e 100644 --- a/src/seedu/addressbook/data/person/UniquePersonList.java +++ b/src/seedu/addressbook/data/person/UniquePersonList.java @@ -30,6 +30,7 @@ public static class PersonNotFoundException extends Exception {} private final List internalList = new ArrayList<>(); + /** * Constructs empty person list. */ @@ -106,6 +107,18 @@ public void remove(ReadOnlyPerson toRemove) throws PersonNotFoundException { } } + /** + * Sort all persons in alphabetical order + * + */ + public void sort() { + internalList.sort( + Comparator.comparing((Person p) -> p.getName().toString(), + (p1,p2)->(p1.compareToIgnoreCase(p2)==0) ? p1.compareTo(p2): p1.compareToIgnoreCase(p2)) + ); + } + + /** * Clears all persons in list. */ diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index 58f4f7e6c..be623e70b 100644 --- a/src/seedu/addressbook/parser/Parser.java +++ b/src/seedu/addressbook/parser/Parser.java @@ -71,6 +71,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 5d8a3ce1c98c0627087059208250d581a1cb87ec Mon Sep 17 00:00:00 2001 From: fishTT <1070450490@qq.com> Date: Mon, 5 Mar 2018 21:05:34 +0800 Subject: [PATCH 2/3] added sort function to UserGuide added sort to test case --- doc/UserGuide.md | 4 ++++ test/java/seedu/addressbook/parser/ParserTest.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/doc/UserGuide.md b/doc/UserGuide.md index d03dfce73..4dae15c3f 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` +## Listing all persons : `sort` +Shows a sorted list of all persons 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.
Format: `find KEYWORD [MORE_KEYWORDS]` diff --git a/test/java/seedu/addressbook/parser/ParserTest.java b/test/java/seedu/addressbook/parser/ParserTest.java index f01be613c..117f8b968 100644 --- a/test/java/seedu/addressbook/parser/ParserTest.java +++ b/test/java/seedu/addressbook/parser/ParserTest.java @@ -58,6 +58,12 @@ public void listCommand_parsedCorrectly() { final String input = "list"; parseAndAssertCommandType(input, ListCommand.class); } + + @Test + public void listCommand_parsedCorrectly() { + final String input = "sort"; + parseAndAssertCommandType(input, SortCommand.class); + } @Test public void exitCommand_parsedCorrectly() { From 86fc129147bd0c915aadf979174b819fa49ad809 Mon Sep 17 00:00:00 2001 From: fishTT <1070450490@qq.com> Date: Mon, 5 Mar 2018 21:13:07 +0800 Subject: [PATCH 3/3] Revert "added sort function to UserGuide" This reverts commit 5d8a3ce1c98c0627087059208250d581a1cb87ec. --- doc/UserGuide.md | 4 ---- test/java/seedu/addressbook/parser/ParserTest.java | 6 ------ 2 files changed, 10 deletions(-) diff --git a/doc/UserGuide.md b/doc/UserGuide.md index 4dae15c3f..d03dfce73 100644 --- a/doc/UserGuide.md +++ b/doc/UserGuide.md @@ -38,10 +38,6 @@ Examples: Shows a list of all persons in the address book.
Format: `list` -## Listing all persons : `sort` -Shows a sorted list of all persons 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.
Format: `find KEYWORD [MORE_KEYWORDS]` diff --git a/test/java/seedu/addressbook/parser/ParserTest.java b/test/java/seedu/addressbook/parser/ParserTest.java index 117f8b968..f01be613c 100644 --- a/test/java/seedu/addressbook/parser/ParserTest.java +++ b/test/java/seedu/addressbook/parser/ParserTest.java @@ -58,12 +58,6 @@ public void listCommand_parsedCorrectly() { final String input = "list"; parseAndAssertCommandType(input, ListCommand.class); } - - @Test - public void listCommand_parsedCorrectly() { - final String input = "sort"; - parseAndAssertCommandType(input, SortCommand.class); - } @Test public void exitCommand_parsedCorrectly() {