diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 5ab06f0ea90..707606fe9bf 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -163,24 +163,6 @@ Edits the name, date and calories burnt of the 4th exercise to `Swim`, `21/09/20 Edits the name, date, calories burnt, quantity, units and muscle group trained of the 3rd exercise to `Bench press`, `22/09/2019`, `240`, `10`, `sets` and `Chest` respectively. -=== Locating exercises by name: `find` - -Finds exercises whose names contain any of the given keywords. + -Format: `find KEYWORD [MORE_KEYWORDS]` - -**** -* The search is case insensitive. e.g `run` will match `Run` -* The order of the keywords does not matter. e.g. `Bench Press` will match `Press Bench` -* Only the name is searched. -* Only full words will be matched e.g. `Runs` will not match `Run` -* Exercises matching at least one keyword will be returned (i.e. `OR` search). e.g. `Bench Press` will return `Incline Bench Press`, `Decline Bench Press` -**** - -Examples: - -* `find bench press` -* `find run` - // tag::delete[] === Delete health information : `delete` @@ -471,8 +453,6 @@ e.g. `add t/exercise n/Bench press d/19/09/2019 c/500 q/50 u/reps m/Chest` e.g. `list t/exercise s/12/12/2019 e/17/12/2019` * *Edit* : `edit t/exercise i/INDEX [n/EXERCISE_NAME] [d/DATE] [c/CALORIES] [q/QUANTITY] [u/UNITS] [m/MUSCLE]... ` e.g. `edit t/exercise i/3 n/Bench press d/22/09/2019 c/240 q/10 u/sets m/Chest` -* *Find* : `find KEYWORD [MORE_KEYWORDS]` -e.g. `find bench press` * *Delete* : `delete t/exercise i/INDEX` e.g. `delete t/exercise i/2` * *Clear* : `clear` diff --git a/src/main/java/seedu/exercise/logic/commands/FindCommand.java b/src/main/java/seedu/exercise/logic/commands/FindCommand.java deleted file mode 100644 index 7656f35c735..00000000000 --- a/src/main/java/seedu/exercise/logic/commands/FindCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -package seedu.exercise.logic.commands; - -import static java.util.Objects.requireNonNull; - -import seedu.exercise.commons.core.Messages; -import seedu.exercise.model.Model; -import seedu.exercise.model.resource.NameContainsKeywordsPredicate; - -/** - * Finds and lists all exercises in exercise book whose name contains any of the argument keywords. - * Keyword matching is case insensitive. - */ -public class FindCommand extends Command { - - public static final String COMMAND_WORD = "find"; - - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all exercises whose names contain any of " - + "the specified keywords (case-insensitive) and displays them as a list with index numbers.\n" - + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" - + "Example: " + COMMAND_WORD + " run swim karate"; - - private final NameContainsKeywordsPredicate predicate; - - public FindCommand(NameContainsKeywordsPredicate predicate) { - this.predicate = predicate; - } - - @Override - public CommandResult execute(Model model) { - requireNonNull(model); - model.updateFilteredExerciseList(predicate); - return new CommandResult( - String.format(Messages.MESSAGE_EXERCISES_LISTED_OVERVIEW, model.getFilteredExerciseList().size())); - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof FindCommand // instanceof handles nulls - && predicate.equals(((FindCommand) other).predicate)); // state check - } -} diff --git a/src/main/java/seedu/exercise/logic/commands/events/ClearEvent.java b/src/main/java/seedu/exercise/logic/commands/events/ClearEvent.java index 09126d113b7..e2a1460a6a4 100644 --- a/src/main/java/seedu/exercise/logic/commands/events/ClearEvent.java +++ b/src/main/java/seedu/exercise/logic/commands/events/ClearEvent.java @@ -22,6 +22,7 @@ public class ClearEvent implements Event { * * @param eventPayload a wrapper class that stores the exercise book in the state before the ClearEvent. */ + @SuppressWarnings("unchecked") public ClearEvent(EventPayload> eventPayload) { this.exerciseBookCleared = (ReadOnlyResourceBook) eventPayload.get(KEY_EXERCISE_BOOK_CLEARED); } diff --git a/src/main/java/seedu/exercise/logic/parser/ExerciseBookParser.java b/src/main/java/seedu/exercise/logic/parser/ExerciseBookParser.java index a1abdc20b45..189cc471961 100644 --- a/src/main/java/seedu/exercise/logic/parser/ExerciseBookParser.java +++ b/src/main/java/seedu/exercise/logic/parser/ExerciseBookParser.java @@ -13,7 +13,6 @@ import seedu.exercise.logic.commands.DeleteExerciseCommand; import seedu.exercise.logic.commands.EditCommand; import seedu.exercise.logic.commands.ExitCommand; -import seedu.exercise.logic.commands.FindCommand; import seedu.exercise.logic.commands.HelpCommand; import seedu.exercise.logic.commands.ListCommand; import seedu.exercise.logic.commands.RedoCommand; @@ -68,9 +67,6 @@ public Command parseCommand(String userInput) throws ParseException { case RedoCommand.COMMAND_WORD: return new RedoCommand(); - case FindCommand.COMMAND_WORD: - return new FindCommandParser().parse(arguments); - case ListCommand.COMMAND_WORD: return new ListCommand(); diff --git a/src/main/java/seedu/exercise/logic/parser/FindCommandParser.java b/src/main/java/seedu/exercise/logic/parser/FindCommandParser.java deleted file mode 100644 index 6e4bc176f17..00000000000 --- a/src/main/java/seedu/exercise/logic/parser/FindCommandParser.java +++ /dev/null @@ -1,34 +0,0 @@ -package seedu.exercise.logic.parser; - -import static seedu.exercise.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - -import java.util.Arrays; - -import seedu.exercise.logic.commands.FindCommand; -import seedu.exercise.logic.parser.exceptions.ParseException; -import seedu.exercise.model.resource.NameContainsKeywordsPredicate; - -/** - * Parses input arguments and creates a new FindCommand object - */ -public class FindCommandParser implements Parser { - - /** - * Parses the given {@code String} of arguments in the context of the FindCommand - * and returns a FindCommand object for execution. - * - * @throws ParseException if the user input does not conform the expected format - */ - public FindCommand parse(String args) throws ParseException { - String trimmedArgs = args.trim(); - if (trimmedArgs.isEmpty()) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE)); - } - - String[] nameKeywords = trimmedArgs.split("\\s+"); - - return new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords))); - } - -} diff --git a/src/test/java/seedu/exercise/logic/commands/FindCommandTest.java b/src/test/java/seedu/exercise/logic/commands/FindCommandTest.java deleted file mode 100644 index a1ed07f73cc..00000000000 --- a/src/test/java/seedu/exercise/logic/commands/FindCommandTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package seedu.exercise.logic.commands; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.exercise.commons.core.Messages.MESSAGE_EXERCISES_LISTED_OVERVIEW; -import static seedu.exercise.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.exercise.model.util.DefaultPropertyBookUtil.getDefaultPropertyBook; -import static seedu.exercise.testutil.exercise.TypicalExercises.DANCE; -import static seedu.exercise.testutil.exercise.TypicalExercises.SKIP; -import static seedu.exercise.testutil.exercise.TypicalExercises.SPRINT; -import static seedu.exercise.testutil.exercise.TypicalExercises.getTypicalExerciseBook; - -import java.util.Arrays; -import java.util.Collections; - -import org.junit.jupiter.api.Test; - -import seedu.exercise.model.Model; -import seedu.exercise.model.ModelManager; -import seedu.exercise.model.ReadOnlyResourceBook; -import seedu.exercise.model.UserPrefs; -import seedu.exercise.model.resource.NameContainsKeywordsPredicate; - -/** - * Contains integration tests (interaction with the Model) for {@code FindCommand}. - */ -public class FindCommandTest { - private Model model = new ModelManager(getTypicalExerciseBook(), new ReadOnlyResourceBook<>(), - new ReadOnlyResourceBook<>(), new ReadOnlyResourceBook<>(), new UserPrefs(), getDefaultPropertyBook()); - private Model expectedModel = new ModelManager(getTypicalExerciseBook(), new ReadOnlyResourceBook<>(), - new ReadOnlyResourceBook<>(), new ReadOnlyResourceBook<>(), new UserPrefs(), getDefaultPropertyBook()); - - @Test - public void equals() { - NameContainsKeywordsPredicate firstPredicate = - new NameContainsKeywordsPredicate(Collections.singletonList("first")); - NameContainsKeywordsPredicate secondPredicate = - new NameContainsKeywordsPredicate(Collections.singletonList("second")); - - FindCommand findFirstCommand = new FindCommand(firstPredicate); - FindCommand findSecondCommand = new FindCommand(secondPredicate); - - // same object -> returns true - assertTrue(findFirstCommand.equals(findFirstCommand)); - - // same values -> returns true - FindCommand findFirstCommandCopy = new FindCommand(firstPredicate); - assertTrue(findFirstCommand.equals(findFirstCommandCopy)); - - // different types -> returns false - assertFalse(findFirstCommand.equals(1)); - - // null -> returns false - assertFalse(findFirstCommand.equals(null)); - - // different exercise -> returns false - assertFalse(findFirstCommand.equals(findSecondCommand)); - } - - @Test - public void execute_zeroKeywords_noExerciseFound() { - String expectedMessage = String.format(MESSAGE_EXERCISES_LISTED_OVERVIEW, 0); - NameContainsKeywordsPredicate predicate = preparePredicate(" "); - FindCommand command = new FindCommand(predicate); - expectedModel.updateFilteredExerciseList(predicate); - assertCommandSuccess(command, model, expectedMessage, expectedModel); - assertEquals(Collections.emptyList(), model.getFilteredExerciseList()); - } - - @Test - public void execute_multipleKeywords_multipleExercisesFound() { - String expectedMessage = String.format(MESSAGE_EXERCISES_LISTED_OVERVIEW, 3); - NameContainsKeywordsPredicate predicate = preparePredicate("Dancing Skipping Sprinting"); - FindCommand command = new FindCommand(predicate); - expectedModel.updateFilteredExerciseList(predicate); - assertCommandSuccess(command, model, expectedMessage, expectedModel); - assertEquals(Arrays.asList(DANCE, SKIP, SPRINT), model.getFilteredExerciseList()); - } - - /** - * Parses {@code userInput} into a {@code NameContainsKeywordsPredicate}. - */ - private NameContainsKeywordsPredicate preparePredicate(String userInput) { - return new NameContainsKeywordsPredicate(Arrays.asList(userInput.split("\\s+"))); - } -} diff --git a/src/test/java/seedu/exercise/logic/parser/ExerciseBookParserTest.java b/src/test/java/seedu/exercise/logic/parser/ExerciseBookParserTest.java index d9f8cd86517..cc982346cdb 100644 --- a/src/test/java/seedu/exercise/logic/parser/ExerciseBookParserTest.java +++ b/src/test/java/seedu/exercise/logic/parser/ExerciseBookParserTest.java @@ -9,10 +9,6 @@ import static seedu.exercise.testutil.Assert.assertThrows; import static seedu.exercise.testutil.TypicalIndexes.INDEX_FIRST_EXERCISE; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - import org.junit.jupiter.api.Test; import seedu.exercise.logic.commands.AddExerciseCommand; @@ -21,12 +17,10 @@ import seedu.exercise.logic.commands.EditCommand; import seedu.exercise.logic.commands.EditCommand.EditExerciseDescriptor; import seedu.exercise.logic.commands.ExitCommand; -import seedu.exercise.logic.commands.FindCommand; import seedu.exercise.logic.commands.HelpCommand; import seedu.exercise.logic.commands.ListCommand; import seedu.exercise.logic.parser.exceptions.ParseException; import seedu.exercise.model.resource.Exercise; -import seedu.exercise.model.resource.NameContainsKeywordsPredicate; import seedu.exercise.testutil.exercise.EditExerciseDescriptorBuilder; import seedu.exercise.testutil.exercise.ExerciseBuilder; import seedu.exercise.testutil.exercise.ExerciseUtil; @@ -71,14 +65,6 @@ public void parseCommand_exit() throws Exception { 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 + " " + keywords.stream().collect(Collectors.joining(" "))); - assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); - } - @Test public void parseCommand_help() throws Exception { assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); diff --git a/src/test/java/seedu/exercise/logic/parser/FindCommandParserTest.java b/src/test/java/seedu/exercise/logic/parser/FindCommandParserTest.java deleted file mode 100644 index 688f8c0652b..00000000000 --- a/src/test/java/seedu/exercise/logic/parser/FindCommandParserTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package seedu.exercise.logic.parser; - -import static seedu.exercise.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.exercise.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.exercise.logic.parser.CommandParserTestUtil.assertParseSuccess; - -import java.util.Arrays; - -import org.junit.jupiter.api.Test; - -import seedu.exercise.logic.commands.FindCommand; -import seedu.exercise.model.resource.NameContainsKeywordsPredicate; - -public class FindCommandParserTest { - - private FindCommandParser parser = new FindCommandParser(); - - @Test - public void parse_emptyArg_throwsParseException() { - assertParseFailure(parser, " ", String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE)); - } - - @Test - public void parse_validArgs_returnsFindCommand() { - // no leading and trailing whitespaces - FindCommand expectedFindCommand = - new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList("Swim", "Dance"))); - assertParseSuccess(parser, "Swim Dance", expectedFindCommand); - - // multiple whitespaces between keywords - assertParseSuccess(parser, " \n Swim \n \t Dance \t", expectedFindCommand); - } - -}