From 6dedbdec051c72b05c122ce7a218a0226f6c166f Mon Sep 17 00:00:00 2001 From: AriellaCallista Date: Tue, 17 Oct 2023 23:43:26 +0800 Subject: [PATCH 1/2] Modify search command to search by individual categories --- .../address/logic/commands/FindCommand.java | 43 ++-- .../logic/parser/FindCommandParser.java | 22 +- src/main/java/seedu/address/model/Model.java | 2 + .../seedu/address/model/ModelManager.java | 10 + .../logic/commands/AddCommandTest.java | 5 + .../logic/commands/FindCommandTest.java | 23 +- .../logic/parser/AddressBookParserTest.java | 228 +++++++++--------- .../logic/parser/FindCommandParserTest.java | 11 +- 8 files changed, 191 insertions(+), 153 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index db641b202d9..022fc76e5e7 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -6,9 +6,13 @@ import seedu.address.logic.Messages; import seedu.address.model.Model; import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.Person; import seedu.address.model.person.Status; import seedu.address.model.person.StatusContainsKeywordsPredicate; +import java.util.List; +import java.util.function.Predicate; + /** * Finds and lists all persons in address book whose name contains any of the argument keywords. * Keyword matching is case insensitive. @@ -17,32 +21,27 @@ public class FindCommand extends Command { public static final String COMMAND_WORD = "search"; - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all persons whose names contain any of " - + "the name keywords (case-insensitive) and (if specified) whose status contain any of the status" - + "keywords (case-insensitive) and displays them as a list with index numbers.\n" + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Searches users by categories (e.g. name, status) " + + "whose details match the given keywords (case-insensitive) and displays them as a list with index numbers.\n" + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" - + "Example: " + COMMAND_WORD + " n/alex bernice s/interviewed"; + + "Example: " + COMMAND_WORD + " n/alex bernice st/interviewed"; + - private final NameContainsKeywordsPredicate namePredicate; - private final StatusContainsKeywordsPredicate statusPredicate; + private final List> predicatesList; /** * Creates an FindCommand to find the specified {@code Person} */ - public FindCommand(NameContainsKeywordsPredicate namePredicate, StatusContainsKeywordsPredicate statusPredicate) { - this.namePredicate = namePredicate; - this.statusPredicate = statusPredicate; + public FindCommand(List> predicatesList) { + this.predicatesList = predicatesList; } @Override public CommandResult execute(Model model) { requireNonNull(model); - if (!Status.isValidStatus(statusPredicate.toString())) { - model.updateFilteredPersonList(namePredicate); - } else { - model.updateFilteredPersonList(namePredicate, statusPredicate); - } + model.updateFilteredPersonList(predicatesList); + return new CommandResult( String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size())); } @@ -59,19 +58,23 @@ public boolean equals(Object other) { } FindCommand otherFindCommand = (FindCommand) other; - if (Status.isValidStatus(statusPredicate.toString())) { - return namePredicate.equals(otherFindCommand.namePredicate) - && statusPredicate.equals(otherFindCommand.statusPredicate); + Boolean isListEqual = false; + List> otherPredicates = otherFindCommand.predicatesList; + + if (predicatesList.size() != otherPredicates.size()) { + return false; } - return namePredicate.equals(otherFindCommand.namePredicate); + for (int i = 0; i < predicatesList.size(); i++) { + isListEqual = predicatesList.get(i).equals(otherPredicates.get(i)); + } + return isListEqual; } @Override public String toString() { return new ToStringBuilder(this) - .add("name predicate", namePredicate) - .add("status predicate", statusPredicate) + .add("predicates list", predicatesList) .toString(); } } diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index cb125ae4568..382541461b2 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -4,18 +4,19 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_STATUS; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Predicate; import java.util.stream.Stream; import seedu.address.logic.commands.FindCommand; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.Person; import seedu.address.model.person.StatusContainsKeywordsPredicate; - - /** * Parses input arguments and creates a new FindCommand object */ @@ -30,7 +31,7 @@ public FindCommand parse(String args) throws ParseException { ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_STATUS); - if (!arePrefixesPresent(argMultimap, PREFIX_NAME) + if (!(arePrefixesPresent(argMultimap, PREFIX_NAME) || arePrefixesPresent(argMultimap, PREFIX_STATUS)) || !argMultimap.getPreamble().isEmpty()) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE)); } @@ -40,8 +41,19 @@ public FindCommand parse(String args) throws ParseException { String[] nameKeywords = parseKeywordsList(argMultimap.getAllValues(PREFIX_NAME)); String[] statusKeywords = parseKeywordsList(argMultimap.getAllValues(PREFIX_STATUS)); - return new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords)), - new StatusContainsKeywordsPredicate(Arrays.asList(statusKeywords))); + NameContainsKeywordsPredicate namePredicate = new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords)); + StatusContainsKeywordsPredicate statusPredicate = new StatusContainsKeywordsPredicate(Arrays.asList(statusKeywords)); + + List> predicatesList = new ArrayList<>() {{ + if (!nameKeywords[0].isEmpty()) { + add(namePredicate); + } + if (!statusKeywords[0].isEmpty()) { + add(statusPredicate); + } + }}; + + return new FindCommand(predicatesList); } /** diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 595a65b98f6..6c5b6e7c737 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -2,6 +2,7 @@ import java.nio.file.Path; import java.util.Comparator; +import java.util.List; import java.util.function.Predicate; import javafx.collections.ObservableList; @@ -93,6 +94,7 @@ public interface Model { */ void updateFilteredPersonList(Predicate predicate1, Predicate predicate2); + void updateFilteredPersonList(List> predicatesList); /** * Sorts the filtered person list by the given {@code comparator}. * @param comparator The comparator to sort the list by. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index ebf4bb48311..b5d1ba9e332 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -142,6 +142,16 @@ public void updateFilteredPersonList(Predicate predicate1, Predicate predicate1.test(person) && predicate2.test(person)); } + @Override + public void updateFilteredPersonList(List> predicatesList) { + + Predicate combinedPredicate = predicatesList.stream() + .reduce(Predicate::and) + .orElse(person -> true); + System.out.println(combinedPredicate); + filteredPersons.setPredicate(combinedPredicate); + } + // TODO: fix the sorting @Override public void sortPersonList(Comparator comparator) { diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/seedu/address/logic/commands/AddCommandTest.java index bf4dbbcfe34..d39529c91ae 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandTest.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.List; import java.util.function.Predicate; import org.junit.jupiter.api.Test; @@ -163,7 +164,11 @@ public void updateFilteredPersonList(Predicate predicate) { @Override public void updateFilteredPersonList(Predicate predicate1, Predicate predicate2) { throw new AssertionError("This method should not be called."); + } + @Override + public void updateFilteredPersonList(List> predicatesList) { + throw new AssertionError("This method should not be called."); } @Override diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/seedu/address/logic/commands/FindCommandTest.java index 89b76d87c33..da7f3fea3ed 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindCommandTest.java @@ -10,8 +10,11 @@ import static seedu.address.testutil.TypicalPersons.FIONA; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.function.Predicate; import org.junit.jupiter.api.Test; @@ -19,6 +22,7 @@ import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.Person; import seedu.address.model.person.StatusContainsKeywordsPredicate; /** @@ -39,14 +43,17 @@ public void equals() { StatusContainsKeywordsPredicate secondStatusPredicate = new StatusContainsKeywordsPredicate(Collections.singletonList("secondStatus")); - FindCommand findFirstCommand = new FindCommand(firstNamePredicate, firstStatusPredicate); - FindCommand findSecondCommand = new FindCommand(secondNamePredicate, secondStatusPredicate); + List> firstPredicatesList = Arrays.asList(firstNamePredicate, firstStatusPredicate); + List> secondPredicatesList = Arrays.asList(secondNamePredicate, secondStatusPredicate); + + FindCommand findFirstCommand = new FindCommand(firstPredicatesList); + FindCommand findSecondCommand = new FindCommand(secondPredicatesList); // same object -> returns true assertTrue(findFirstCommand.equals(findFirstCommand)); // same values -> returns true - FindCommand findFirstCommandCopy = new FindCommand(firstNamePredicate, firstStatusPredicate); + FindCommand findFirstCommandCopy = new FindCommand(firstPredicatesList); assertTrue(findFirstCommand.equals(findFirstCommandCopy)); // different types -> returns false @@ -64,7 +71,7 @@ public void execute_zeroKeywords_noPersonFound() { String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 0); NameContainsKeywordsPredicate namePredicate = prepareNamePredicate(" "); StatusContainsKeywordsPredicate statusPredicate = prepareStatusPredicate(""); - FindCommand command = new FindCommand(namePredicate, statusPredicate); + FindCommand command = new FindCommand(Arrays.asList(namePredicate, statusPredicate)); expectedModel.updateFilteredPersonList(namePredicate); assertCommandSuccess(command, model, expectedMessage, expectedModel); assertEquals(Collections.emptyList(), model.getFilteredPersonList()); @@ -75,7 +82,7 @@ public void execute_multipleKeywords_multiplePersonsFound() { String expectedMessage = String.format(MESSAGE_PERSONS_LISTED_OVERVIEW, 3); NameContainsKeywordsPredicate namePredicate = prepareNamePredicate("Kurz Elle Kunz"); StatusContainsKeywordsPredicate statusPredicate = prepareStatusPredicate("Preliminary"); - FindCommand command = new FindCommand(namePredicate, statusPredicate); + FindCommand command = new FindCommand(Arrays.asList(namePredicate, statusPredicate)); expectedModel.updateFilteredPersonList(namePredicate, statusPredicate); System.out.println(expectedModel.getAddressBook()); assertCommandSuccess(command, model, expectedMessage, expectedModel); @@ -87,9 +94,9 @@ public void execute_multipleKeywords_multiplePersonsFound() { public void toStringMethod() { NameContainsKeywordsPredicate namePredicate = new NameContainsKeywordsPredicate(Arrays.asList("keyword")); StatusContainsKeywordsPredicate statusPredicate = new StatusContainsKeywordsPredicate(Arrays.asList("keyword")); - FindCommand findCommand = new FindCommand(namePredicate, statusPredicate); - String expected = FindCommand.class.getCanonicalName() + "{name predicate=" + namePredicate - + ", status predicate=" + statusPredicate + "}"; + FindCommand findCommand = new FindCommand(Arrays.asList(namePredicate, statusPredicate)); + String expected = FindCommand.class.getCanonicalName() + "{predicates list=[" + namePredicate + ", " + + statusPredicate + "]}"; assertEquals(expected, findCommand.toString()); } diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 874f1057a63..42973fbefce 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -1,114 +1,114 @@ -package seedu.address.logic.parser; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; -import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.junit.jupiter.api.Test; - -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.ListCommand; -import seedu.address.logic.commands.RemarkCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; -import seedu.address.model.person.Person; -import seedu.address.model.person.Remark; -import seedu.address.model.person.StatusContainsKeywordsPredicate; -import seedu.address.testutil.EditPersonDescriptorBuilder; -import seedu.address.testutil.PersonBuilder; -import seedu.address.testutil.PersonUtil; - -public class AddressBookParserTest { - - private final AddressBookParser parser = new AddressBookParser(); - - @Test - public void parseCommand_add() throws Exception { - Person person = new PersonBuilder().build(); - AddCommand command = (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person)); - assertEquals(new AddCommand(person), command); - } - - @Test - public void parseCommand_clear() throws Exception { - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); - } - - @Test - public void parseCommand_delete() throws Exception { - DeleteCommand command = (DeleteCommand) parser.parseCommand( - DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); - assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); - } - - @Test - public void parseCommand_edit() throws Exception { - Person person = new PersonBuilder().build(); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); - EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " - + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); - assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); - } - - @Test - public void parseCommand_exit() throws Exception { - assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); - assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); - } - - @Test - public void parseCommand_find() throws Exception { - List keywords = Arrays.asList("foo", "bar", "baz"); - FindCommand command = (FindCommand) parser.parseCommand( - FindCommand.COMMAND_WORD + " " + "n/" + keywords.stream().collect(Collectors.joining(" "))); - assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords), - new StatusContainsKeywordsPredicate(Arrays.asList(""))), command); - } - - @Test - public void parseCommand_help() throws Exception { - assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); - assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); - } - - @Test - public void parseCommand_list() throws Exception { - assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand); - // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); - } - - @Test - public void parseCommand_remark() throws Exception { - final String remark = "Some remark."; - RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " - + INDEX_FIRST_PERSON.getOneBased() + " " + PREFIX_REMARK + remark); - assertEquals(new RemarkCommand(INDEX_FIRST_PERSON, new Remark(remark)), command); - } - - @Test - public void parseCommand_unrecognisedInput_throwsParseException() { - assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () - -> parser.parseCommand("")); - } - - @Test - public void parseCommand_unknownCommand_throwsParseException() { - assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); - } -} +//package seedu.address.logic.parser; +// +//import static org.junit.jupiter.api.Assertions.assertEquals; +//import static org.junit.jupiter.api.Assertions.assertTrue; +//import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +//import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; +//import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; +//import static seedu.address.testutil.Assert.assertThrows; +//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +// +//import java.util.Arrays; +//import java.util.List; +//import java.util.stream.Collectors; +// +//import org.junit.jupiter.api.Test; +// +//import seedu.address.logic.commands.AddCommand; +//import seedu.address.logic.commands.ClearCommand; +//import seedu.address.logic.commands.DeleteCommand; +//import seedu.address.logic.commands.EditCommand; +//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; +//import seedu.address.logic.commands.ExitCommand; +//import seedu.address.logic.commands.FindCommand; +//import seedu.address.logic.commands.HelpCommand; +//import seedu.address.logic.commands.ListCommand; +//import seedu.address.logic.commands.RemarkCommand; +//import seedu.address.logic.parser.exceptions.ParseException; +//import seedu.address.model.person.NameContainsKeywordsPredicate; +//import seedu.address.model.person.Person; +//import seedu.address.model.person.Remark; +//import seedu.address.model.person.StatusContainsKeywordsPredicate; +//import seedu.address.testutil.EditPersonDescriptorBuilder; +//import seedu.address.testutil.PersonBuilder; +//import seedu.address.testutil.PersonUtil; +// +//public class AddressBookParserTest { +// +// private final AddressBookParser parser = new AddressBookParser(); +// +// @Test +// public void parseCommand_add() throws Exception { +// Person person = new PersonBuilder().build(); +// AddCommand command = (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person)); +// assertEquals(new AddCommand(person), command); +// } +// +// @Test +// public void parseCommand_clear() throws Exception { +// assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); +// assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); +// } +// +// @Test +// public void parseCommand_delete() throws Exception { +// DeleteCommand command = (DeleteCommand) parser.parseCommand( +// DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); +// assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); +// } +// +// @Test +// public void parseCommand_edit() throws Exception { +// Person person = new PersonBuilder().build(); +// EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); +// EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " +// + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); +// assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); +// } +// +// @Test +// public void parseCommand_exit() throws Exception { +// assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); +// assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); +// } +// +// @Test +// public void parseCommand_find() throws Exception { +// List keywords = Arrays.asList("foo", "bar", "baz"); +// FindCommand command = (FindCommand) parser.parseCommand( +// FindCommand.COMMAND_WORD + " " + "n/" + keywords.stream().collect(Collectors.joining(" "))); +// assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords), +// new StatusContainsKeywordsPredicate(Arrays.asList(""))), command); +// } +// +// @Test +// public void parseCommand_help() throws Exception { +// assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); +// assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); +// } +// +// @Test +// public void parseCommand_list() throws Exception { +// assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand); +// // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); +// } +// +// @Test +// public void parseCommand_remark() throws Exception { +// final String remark = "Some remark."; +// RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " +// + INDEX_FIRST_PERSON.getOneBased() + " " + PREFIX_REMARK + remark); +// assertEquals(new RemarkCommand(INDEX_FIRST_PERSON, new Remark(remark)), command); +// } +// +// @Test +// public void parseCommand_unrecognisedInput_throwsParseException() { +// assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () +// -> parser.parseCommand("")); +// } +// +// @Test +// public void parseCommand_unknownCommand_throwsParseException() { +// assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); +// } +//} diff --git a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java index acd0f8c73f3..acfa8b9430b 100644 --- a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java @@ -25,20 +25,19 @@ public void parse_emptyArg_throwsParseException() { public void parse_validArgs_returnsFindCommand() { // no leading and trailing whitespaces FindCommand expectedFindCommand = - new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")), - new StatusContainsKeywordsPredicate(Arrays.asList("Interviewed"))); + new FindCommand(Arrays.asList(new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")), + new StatusContainsKeywordsPredicate(Arrays.asList("Interviewed")))); assertParseSuccess(parser, " n/Alice Bob st/Interviewed", expectedFindCommand); - // multiple whitespaces between keywords - assertParseSuccess(parser, " n/ \n Alice \n \t Bob \t st/Interviewed", expectedFindCommand); +// // multiple whitespaces between keywords +// assertParseSuccess(parser, " n/ \n Alice \n \t Bob \t st/Interviewed", expectedFindCommand); } @Test public void parse_validArgsWithNoStatus_returnsFindCommand() { // no leading and trailing whitespaces FindCommand expectedFindCommand = - new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")), - new StatusContainsKeywordsPredicate(Arrays.asList(""))); + new FindCommand(Arrays.asList(new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")))); assertParseSuccess(parser, " n/Alice Bob", expectedFindCommand); // multiple whitespaces between keywords From 2cb2fbaedb2254c2829f676948b7742eff6e6b4d Mon Sep 17 00:00:00 2001 From: AriellaCallista Date: Wed, 18 Oct 2023 01:17:55 +0800 Subject: [PATCH 2/2] Fix checkstyle issues --- .../address/logic/commands/FindCommand.java | 12 +- .../address/logic/commands/ListCommand.java | 1 - .../logic/parser/FindCommandParser.java | 17 +- src/main/java/seedu/address/model/Model.java | 5 +- .../seedu/address/model/ModelManager.java | 9 +- .../logic/commands/AddCommandTest.java | 5 - .../logic/commands/FindCommandTest.java | 4 +- .../logic/parser/AddressBookParserTest.java | 226 +++++++++--------- .../logic/parser/FindCommandParserTest.java | 4 +- .../seedu/address/testutil/PersonBuilder.java | 1 - 10 files changed, 132 insertions(+), 152 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index 022fc76e5e7..5a4ba620277 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -2,16 +2,13 @@ import static java.util.Objects.requireNonNull; +import java.util.List; +import java.util.function.Predicate; + import seedu.address.commons.util.ToStringBuilder; import seedu.address.logic.Messages; import seedu.address.model.Model; -import seedu.address.model.person.NameContainsKeywordsPredicate; import seedu.address.model.person.Person; -import seedu.address.model.person.Status; -import seedu.address.model.person.StatusContainsKeywordsPredicate; - -import java.util.List; -import java.util.function.Predicate; /** * Finds and lists all persons in address book whose name contains any of the argument keywords. @@ -22,7 +19,8 @@ public class FindCommand extends Command { public static final String COMMAND_WORD = "search"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Searches users by categories (e.g. name, status) " - + "whose details match the given keywords (case-insensitive) and displays them as a list with index numbers.\n" + + "whose details match the given keywords (case-insensitive) " + + "and displays them as a list with index numbers.\n" + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" + "Example: " + COMMAND_WORD + " n/alex bernice st/interviewed"; diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index ca3577ca2f5..afed1ed414b 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -51,7 +51,6 @@ public CommandResult execute(Model model) { model.sortPersonList(sortingComparator); } - System.out.println(model.getFilteredPersonList()); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); return new CommandResult(MESSAGE_SUCCESS); } diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index 382541461b2..88917c4a418 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -42,16 +42,17 @@ public FindCommand parse(String args) throws ParseException { String[] statusKeywords = parseKeywordsList(argMultimap.getAllValues(PREFIX_STATUS)); NameContainsKeywordsPredicate namePredicate = new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords)); - StatusContainsKeywordsPredicate statusPredicate = new StatusContainsKeywordsPredicate(Arrays.asList(statusKeywords)); + StatusContainsKeywordsPredicate statusPredicate = new StatusContainsKeywordsPredicate( + Arrays.asList(statusKeywords)); List> predicatesList = new ArrayList<>() {{ - if (!nameKeywords[0].isEmpty()) { - add(namePredicate); - } - if (!statusKeywords[0].isEmpty()) { - add(statusPredicate); - } - }}; + if (!nameKeywords[0].isEmpty()) { + add(namePredicate); + } + if (!statusKeywords[0].isEmpty()) { + add(statusPredicate); + } + }}; return new FindCommand(predicatesList); } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 6c5b6e7c737..1678e67e728 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -90,11 +90,10 @@ public interface Model { /** * Updates the filter of the filtered person list to filter by the given {@code predicates}. - * @throws NullPointerException if any of the {@code predicates} is null. + * @throws NullPointerException if any of the {@code predicatesList} is null. */ - void updateFilteredPersonList(Predicate predicate1, Predicate predicate2); - void updateFilteredPersonList(List> predicatesList); + /** * Sorts the filtered person list by the given {@code comparator}. * @param comparator The comparator to sort the list by. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index b5d1ba9e332..d5cb52353f2 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -135,20 +135,13 @@ public void updateFilteredPersonList(Predicate predicate) { filteredPersons.setPredicate(predicate); } - @Override - public void updateFilteredPersonList(Predicate predicate1, Predicate predicate2) { - requireNonNull(predicate1); - requireNonNull(predicate2);; - filteredPersons.setPredicate(person -> predicate1.test(person) && predicate2.test(person)); - } @Override public void updateFilteredPersonList(List> predicatesList) { - + requireNonNull(predicatesList); Predicate combinedPredicate = predicatesList.stream() .reduce(Predicate::and) .orElse(person -> true); - System.out.println(combinedPredicate); filteredPersons.setPredicate(combinedPredicate); } diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/seedu/address/logic/commands/AddCommandTest.java index d39529c91ae..71230cbcff9 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandTest.java @@ -161,11 +161,6 @@ public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); } - @Override - public void updateFilteredPersonList(Predicate predicate1, Predicate predicate2) { - throw new AssertionError("This method should not be called."); - } - @Override public void updateFilteredPersonList(List> predicatesList) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/seedu/address/logic/commands/FindCommandTest.java index da7f3fea3ed..e3b6dd1fd44 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindCommandTest.java @@ -10,7 +10,6 @@ import static seedu.address.testutil.TypicalPersons.FIONA; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -83,8 +82,7 @@ public void execute_multipleKeywords_multiplePersonsFound() { NameContainsKeywordsPredicate namePredicate = prepareNamePredicate("Kurz Elle Kunz"); StatusContainsKeywordsPredicate statusPredicate = prepareStatusPredicate("Preliminary"); FindCommand command = new FindCommand(Arrays.asList(namePredicate, statusPredicate)); - expectedModel.updateFilteredPersonList(namePredicate, statusPredicate); - System.out.println(expectedModel.getAddressBook()); + expectedModel.updateFilteredPersonList(Arrays.asList(namePredicate, statusPredicate)); assertCommandSuccess(command, model, expectedMessage, expectedModel); assertEquals(Arrays.asList(CARL, ELLE, FIONA), model.getFilteredPersonList()); } diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 42973fbefce..eb5447d59bf 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -1,114 +1,112 @@ -//package seedu.address.logic.parser; -// -//import static org.junit.jupiter.api.Assertions.assertEquals; -//import static org.junit.jupiter.api.Assertions.assertTrue; -//import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -//import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; -//import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; -//import static seedu.address.testutil.Assert.assertThrows; -//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -// -//import java.util.Arrays; -//import java.util.List; -//import java.util.stream.Collectors; -// -//import org.junit.jupiter.api.Test; -// -//import seedu.address.logic.commands.AddCommand; -//import seedu.address.logic.commands.ClearCommand; -//import seedu.address.logic.commands.DeleteCommand; -//import seedu.address.logic.commands.EditCommand; -//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; -//import seedu.address.logic.commands.ExitCommand; -//import seedu.address.logic.commands.FindCommand; -//import seedu.address.logic.commands.HelpCommand; -//import seedu.address.logic.commands.ListCommand; -//import seedu.address.logic.commands.RemarkCommand; -//import seedu.address.logic.parser.exceptions.ParseException; -//import seedu.address.model.person.NameContainsKeywordsPredicate; -//import seedu.address.model.person.Person; -//import seedu.address.model.person.Remark; -//import seedu.address.model.person.StatusContainsKeywordsPredicate; -//import seedu.address.testutil.EditPersonDescriptorBuilder; -//import seedu.address.testutil.PersonBuilder; -//import seedu.address.testutil.PersonUtil; -// -//public class AddressBookParserTest { -// -// private final AddressBookParser parser = new AddressBookParser(); -// -// @Test -// public void parseCommand_add() throws Exception { -// Person person = new PersonBuilder().build(); -// AddCommand command = (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person)); -// assertEquals(new AddCommand(person), command); -// } -// -// @Test -// public void parseCommand_clear() throws Exception { -// assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); -// assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); -// } -// -// @Test -// public void parseCommand_delete() throws Exception { -// DeleteCommand command = (DeleteCommand) parser.parseCommand( -// DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); -// assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); -// } -// -// @Test -// public void parseCommand_edit() throws Exception { -// Person person = new PersonBuilder().build(); -// EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); -// EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " -// + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); -// assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); -// } -// -// @Test -// public void parseCommand_exit() throws Exception { -// assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); -// assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); -// } -// -// @Test -// public void parseCommand_find() throws Exception { -// List keywords = Arrays.asList("foo", "bar", "baz"); -// FindCommand command = (FindCommand) parser.parseCommand( -// FindCommand.COMMAND_WORD + " " + "n/" + keywords.stream().collect(Collectors.joining(" "))); -// assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords), -// new StatusContainsKeywordsPredicate(Arrays.asList(""))), command); -// } -// -// @Test -// public void parseCommand_help() throws Exception { -// assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); -// assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); -// } -// -// @Test -// public void parseCommand_list() throws Exception { -// assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand); -// // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); -// } -// -// @Test -// public void parseCommand_remark() throws Exception { -// final String remark = "Some remark."; -// RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " -// + INDEX_FIRST_PERSON.getOneBased() + " " + PREFIX_REMARK + remark); -// assertEquals(new RemarkCommand(INDEX_FIRST_PERSON, new Remark(remark)), command); -// } -// -// @Test -// public void parseCommand_unrecognisedInput_throwsParseException() { -// assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () -// -> parser.parseCommand("")); -// } -// -// @Test -// public void parseCommand_unknownCommand_throwsParseException() { -// assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); -// } -//} +package seedu.address.logic.parser; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; +import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; +import static seedu.address.testutil.Assert.assertThrows; +import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.ClearCommand; +import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.EditCommand; +import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; +import seedu.address.logic.commands.ExitCommand; +import seedu.address.logic.commands.FindCommand; +import seedu.address.logic.commands.HelpCommand; +import seedu.address.logic.commands.ListCommand; +import seedu.address.logic.commands.RemarkCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.Person; +import seedu.address.model.person.Remark; +import seedu.address.testutil.EditPersonDescriptorBuilder; +import seedu.address.testutil.PersonBuilder; +import seedu.address.testutil.PersonUtil; + +public class AddressBookParserTest { + + private final AddressBookParser parser = new AddressBookParser(); + + @Test + public void parseCommand_add() throws Exception { + Person person = new PersonBuilder().build(); + AddCommand command = (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person)); + assertEquals(new AddCommand(person), command); + } + + @Test + public void parseCommand_clear() throws Exception { + assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); + assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); + } + + @Test + public void parseCommand_delete() throws Exception { + DeleteCommand command = (DeleteCommand) parser.parseCommand( + DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); + assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); + } + + @Test + public void parseCommand_edit() throws Exception { + Person person = new PersonBuilder().build(); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); + EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " + + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getEditPersonDescriptorDetails(descriptor)); + assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); + } + + @Test + public void parseCommand_exit() throws Exception { + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); + } + + @Test + public void parseCommand_find() throws Exception { + List keywords = Arrays.asList("foo", "bar", "baz"); + FindCommand command = (FindCommand) parser.parseCommand( + FindCommand.COMMAND_WORD + " " + "n/" + keywords.stream().collect(Collectors.joining(" "))); + assertEquals(new FindCommand(Arrays.asList(new NameContainsKeywordsPredicate(keywords))), command); + } + + @Test + public void parseCommand_help() throws Exception { + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); + } + + @Test + public void parseCommand_list() throws Exception { + assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand); + // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); + } + + @Test + public void parseCommand_remark() throws Exception { + final String remark = "Some remark."; + RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " + + INDEX_FIRST_PERSON.getOneBased() + " " + PREFIX_REMARK + remark); + assertEquals(new RemarkCommand(INDEX_FIRST_PERSON, new Remark(remark)), command); + } + + @Test + public void parseCommand_unrecognisedInput_throwsParseException() { + assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () + -> parser.parseCommand("")); + } + + @Test + public void parseCommand_unknownCommand_throwsParseException() { + assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); + } +} diff --git a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java index acfa8b9430b..ccd870cfc61 100644 --- a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java @@ -29,8 +29,8 @@ public void parse_validArgs_returnsFindCommand() { new StatusContainsKeywordsPredicate(Arrays.asList("Interviewed")))); assertParseSuccess(parser, " n/Alice Bob st/Interviewed", expectedFindCommand); -// // multiple whitespaces between keywords -// assertParseSuccess(parser, " n/ \n Alice \n \t Bob \t st/Interviewed", expectedFindCommand); + // multiple whitespaces between keywords + assertParseSuccess(parser, " n/ \n Alice \n \t Bob \t st/Interviewed", expectedFindCommand); } @Test diff --git a/src/test/java/seedu/address/testutil/PersonBuilder.java b/src/test/java/seedu/address/testutil/PersonBuilder.java index d81263c503c..88e2875ea67 100644 --- a/src/test/java/seedu/address/testutil/PersonBuilder.java +++ b/src/test/java/seedu/address/testutil/PersonBuilder.java @@ -146,7 +146,6 @@ public PersonBuilder withStatus(String status) { default: this.status.setStatusType(StatusTypes.PRELIMINARY); } - System.out.println(this.status); return this; }