diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 4abb17e3e..0bf32a1bb 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -176,6 +176,11 @@ Example: * `java seedu.addressbook.Main mydata.txt` +== Sorting people : `sort` + +Sort all the people in the addressbook by name in alphabetically ascending order. +Format: `sort` + [NOTE] ==== The file name must end in `.txt` for it to be acceptable to the program. diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index 2ff8f1575..c9296e71f 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -36,6 +36,16 @@ public static String getMessageForPersonListShownSummary(List personsDisplayed) { + return String.format(Messages.MESSAGE_SORTED, 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 9be217d89..3a7992589 100644 --- a/src/seedu/addressbook/commands/HelpCommand.java +++ b/src/seedu/addressbook/commands/HelpCommand.java @@ -23,6 +23,7 @@ public CommandResult execute() { + "\n" + ViewAllCommand.MESSAGE_USAGE + "\n" + HelpCommand.MESSAGE_USAGE + "\n" + ExitCommand.MESSAGE_USAGE + + "\n" + SortCommand.MESSAGE_USAGE ); } } diff --git a/src/seedu/addressbook/commands/SortCommand.java b/src/seedu/addressbook/commands/SortCommand.java new file mode 100644 index 000000000..9e00e3b4a --- /dev/null +++ b/src/seedu/addressbook/commands/SortCommand.java @@ -0,0 +1,33 @@ +package seedu.addressbook.commands; +import java.util.List; +import java.util.HashSet; +import java.util.Set; + +import seedu.addressbook.data.exception.IllegalValueException; +import seedu.addressbook.data.person.Address; +import seedu.addressbook.data.person.Email; +import seedu.addressbook.data.person.Name; +import seedu.addressbook.data.person.Person; +import seedu.addressbook.data.person.Phone; +import seedu.addressbook.data.person.ReadOnlyPerson; +import seedu.addressbook.data.person.UniquePersonList; +import seedu.addressbook.data.tag.Tag; + +/** + * 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 + ": sort people in the address book.\n" + + "Example: " + COMMAND_WORD; + + //public static final String MESSAGE_SUCCESS = "People sorted."; + + @Override + public CommandResult execute() { + List allPersons = addressBook.getAllPersons().sortedListView(); + return new CommandResult(getMessageForPersonSortShownSummary(allPersons), allPersons); + } + +} diff --git a/src/seedu/addressbook/common/Messages.java b/src/seedu/addressbook/common/Messages.java index 9e30d0f28..df95a6206 100644 --- a/src/seedu/addressbook/common/Messages.java +++ b/src/seedu/addressbook/common/Messages.java @@ -15,4 +15,5 @@ public class Messages { "java seedu.addressbook.Main [STORAGE_FILE_PATH]"; public static final String MESSAGE_WELCOME = "Welcome to your Address Book!"; public static final String MESSAGE_USING_STORAGE_FILE = "Using storage file : %1$s"; + public static final String MESSAGE_SORTED = "%1$s persons sorted!"; } diff --git a/src/seedu/addressbook/data/person/Name.java b/src/seedu/addressbook/data/person/Name.java index d1d271414..19587bd27 100644 --- a/src/seedu/addressbook/data/person/Name.java +++ b/src/seedu/addressbook/data/person/Name.java @@ -60,4 +60,8 @@ public int hashCode() { return fullName.hashCode(); } + public int compareTo(Name name) { + return fullName.compareTo(name.fullName); + } + } diff --git a/src/seedu/addressbook/data/person/Person.java b/src/seedu/addressbook/data/person/Person.java index 64551c7fe..94c1001d0 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 person) { + return name.compareTo(person.name); + } + } diff --git a/src/seedu/addressbook/data/person/UniquePersonList.java b/src/seedu/addressbook/data/person/UniquePersonList.java index d7acd8b4a..f2446eef4 100644 --- a/src/seedu/addressbook/data/person/UniquePersonList.java +++ b/src/seedu/addressbook/data/person/UniquePersonList.java @@ -81,6 +81,17 @@ public List immutableListView() { return Collections.unmodifiableList(internalList); } + /** + * Returns an unmodifiable java List view with elements cast as immutable {@link ReadOnlyPerson}s. + * For use with other methods/libraries. + * Any changes to the internal list/elements are immediately visible in the returned list. + */ + public List sortedListView() { + //internalList.sort(); <--how to make this line work instead of using Collections.sort()? :( + Collections.sort(internalList); + return Collections.unmodifiableList(internalList); + } + /** * Checks if the list contains an equivalent person as the given argument. diff --git a/src/seedu/addressbook/parser/Parser.java b/src/seedu/addressbook/parser/Parser.java index abddb3f45..5245d1b5f 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; /** @@ -97,7 +87,11 @@ public Command parseCommand(String userInput) { case ExitCommand.COMMAND_WORD: return new ExitCommand(); + case SortCommand.COMMAND_WORD: + return new SortCommand(); + case HelpCommand.COMMAND_WORD: // Fallthrough + default: return new HelpCommand(); } diff --git a/test/expected.txt b/test/expected.txt index 56fe5fcac..bdfbcdf75 100644 --- a/test/expected.txt +++ b/test/expected.txt @@ -29,6 +29,8 @@ || Example: help || exit: Exits the program. || Example: exit +|| sort: sort people in the address book. +|| Example: sort || =================================================== || Enter command: || [Command entered: delete 1] || The person index provided is invalid diff --git a/test/java/seedu/addressbook/commands/SortCommandTest.java b/test/java/seedu/addressbook/commands/SortCommandTest.java new file mode 100644 index 000000000..22be09d88 --- /dev/null +++ b/test/java/seedu/addressbook/commands/SortCommandTest.java @@ -0,0 +1,10 @@ +package seedu.addressbook.commands; + +//import ... + +public class SortCommandTest { + //TODO: add some tests for sort command. + //assertListSorted(list) { + // assertEqual(list, list.sort()); + // } +}