diff --git a/src/main/java/seedu/address/logic/commands/FilterCommand.java b/src/main/java/seedu/address/logic/commands/FilterCommand.java index e574ccf4875..bf5f8fda3d6 100644 --- a/src/main/java/seedu/address/logic/commands/FilterCommand.java +++ b/src/main/java/seedu/address/logic/commands/FilterCommand.java @@ -2,12 +2,18 @@ import seedu.address.commons.util.CollectionUtil; import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.Messages; import seedu.address.model.Model; -import seedu.address.model.person.*; +import seedu.address.model.person.Person; import seedu.address.model.tag.Tag; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.Objects; +import java.util.Optional; +import static java.util.Objects.nonNull; import static java.util.Objects.requireNonNull; import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; @@ -36,7 +42,8 @@ public class FilterCommand extends Command { + PREFIX_ADDRESS + "123, Tengah Ave 6, #69-420 " + PREFIX_TAG + "CS2103 " + PREFIX_TAG + "CSGod"; - private PersonFilter personFilter; + public static final String CONTACTS_NOT_FILTERED = "At least one parameter is required to filter contacts."; + private final PersonFilter personFilter; public FilterCommand(PersonFilter personFilter) { requireNonNull(personFilter); @@ -45,7 +52,10 @@ public FilterCommand(PersonFilter personFilter) { @Override public CommandResult execute(Model model) { - return new CommandResult("Filtering"); + requireNonNull(model); + model.updateFilteredPersonList(personFilter::test); + return new CommandResult( + String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size())); } /** @@ -60,18 +70,6 @@ public static class PersonFilter { public PersonFilter() {} - /** - * Copy constructor. - * A defensive copy of {@code tags} is used internally. - */ - public PersonFilter(PersonFilter toCopy) { - name = toCopy.name; - phone = toCopy.phone; - email = toCopy.email; - address = toCopy.address; - tags = toCopy.tags; - } - /** * Returns true if at least one field is edited. */ @@ -129,26 +127,26 @@ public Optional> getTags() { } public boolean test(Person person) { - if (!person.getName().fullName.contains(name)) { + if (nonNull(name) && !person.getName().fullName.toLowerCase().contains(name.toLowerCase())) { return false; } - if (!person.getPhone().value.contains(phone)) { + if (nonNull(phone) && !person.getPhone().value.contains(phone)) { return false; } - if (!person.getEmail().value.contains(email)) { + if (nonNull(email) && !person.getEmail().value.toLowerCase().contains(email.toLowerCase())) { return false; } - if (!person.getAddress().value.contains(address)) { + if (nonNull(address) && !person.getAddress().value.toLowerCase().contains(address.toLowerCase())) { return false; } - if (!tags.isEmpty()) { - Tag[] tagsToCheck = tags.toArray(new Tag[1]); + if (nonNull(tags) && !tags.isEmpty()) { + Tag[] tagsToCheck = tags.toArray(new Tag[0]); Tag[] currentTags = person.getTags().toArray(new Tag[0]); for (Tag tag:tagsToCheck) { for (int i = 0; i <= currentTags.length; i++) { if (i == currentTags.length) { return false; - } else if (currentTags[i].tagName.contains(tag.tagName)) { + } else if (currentTags[i].tagName.toLowerCase().contains(tag.tagName.toLowerCase())) { break; } } diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index d53ac1d43fb..7dd9f65aeda 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -18,7 +18,6 @@ import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.tag.Tag; /** * Parses input arguments and creates a new EditCommand object diff --git a/src/main/java/seedu/address/logic/parser/FilterCommandParser.java b/src/main/java/seedu/address/logic/parser/FilterCommandParser.java index 2f296e87c50..53cd7a693f3 100644 --- a/src/main/java/seedu/address/logic/parser/FilterCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FilterCommandParser.java @@ -1,14 +1,16 @@ package seedu.address.logic.parser; -import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.FilterCommand; import seedu.address.logic.commands.FilterCommand.PersonFilter; import seedu.address.logic.parser.exceptions.ParseException; import static java.util.Objects.requireNonNull; -import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.*; +import static seedu.address.logic.commands.FilterCommand.CONTACTS_NOT_FILTERED; +import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; +import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; +import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; +import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.ParserUtil.parseTagsForUse; /** @@ -44,7 +46,7 @@ public FilterCommand parse(String args) throws ParseException { parseTagsForUse(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(personFilter::setTags); if (!personFilter.isAnyFieldEdited()) { - throw new ParseException(EditCommand.MESSAGE_NOT_EDITED); + throw new ParseException(CONTACTS_NOT_FILTERED); } return new FilterCommand(personFilter);