Skip to content

Commit

Permalink
Update filter command to display filtered contacts
Browse files Browse the repository at this point in the history
  • Loading branch information
Fliprun committed Oct 12, 2023
1 parent 8a6e218 commit 4b7abbd
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 29 deletions.
44 changes: 21 additions & 23 deletions src/main/java/seedu/address/logic/commands/FilterCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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()));
}

/**
Expand All @@ -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.
*/
Expand Down Expand Up @@ -129,26 +127,26 @@ public Optional<Set<Tag>> 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;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

/**
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 4b7abbd

Please sign in to comment.