Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions src/main/java/commands/FindCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package commands;

import data.task.Task;

import java.util.ArrayList;
import java.util.List;

public class FindCommand extends Command {

public static final String COMMAND_WORD = "find";

public static final String MESSAGE_USAGE = COMMAND_WORD
+ ": Displays all tasks as a list with target key word(s)."
+ " -Example: " + COMMAND_WORD
+ " read";

/** Offset required to convert between 1-indexing and 0-indexing. */
public static final int DISPLAYED_INDEX_OFFSET = 1;

private final String keyword;

public FindCommand(String keyword) {
this.keyword = keyword;
}

public String execute() {
List<Task> matchingTasks = taskList.findMatch(keyword);

if (matchingTasks.isEmpty()) {
return "You don't have any matching task in your list.";
}

StringBuilder sb = new StringBuilder();
sb.append("Here are the matching tasks in your list:").append("\n");
int size = matchingTasks.size();
for (int i = 0; i < size - DISPLAYED_INDEX_OFFSET; i += 1) {
sb.append((i + DISPLAYED_INDEX_OFFSET)).append(". ").append(matchingTasks.get(i).toString()).append("\n");
}
sb.append(size).append(". ").append(matchingTasks.get(size - 1).toString());
return sb.toString();
}
}
1 change: 1 addition & 0 deletions src/main/java/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public String execute() {
+ "\n" + TodoCommand.MESSAGE_USAGE
+ "\n" + DeadlineCommand.MESSAGE_USAGE
+ "\n" + EventCommand.MESSAGE_USAGE
+ "\n" + FindCommand.MESSAGE_USAGE
+ "\n" + MarkCommand.MESSAGE_USAGE
+ "\n" + UnmarkCommand.MESSAGE_USAGE
+ "\n" + DeleteCommand.MESSAGE_USAGE;
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/data/TaskList.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import data.task.Task;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TaskList {
Expand Down Expand Up @@ -41,4 +40,14 @@ public void deleteTask(int taskIndex) {
public List<Task> getAllTasks() {
return this.tasks;
}

public List<Task> findMatch(String keyWork) {
List<Task> internalList = new ArrayList<>();
for (Task task : tasks) {
if (task.getTaskName().contains(keyWork)) {
internalList.add(task);
}
}
return internalList;
}
}
4 changes: 4 additions & 0 deletions src/main/java/data/task/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ public Task(String taskName) {
this.isDone = false;
}

public String getTaskName() {
return taskName;
}

public String getStatusIcon() {
return (isDone ? "X" : " "); // mark done task with X
}
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import commands.DeleteCommand;
import commands.EventCommand;
import commands.ExitCommand;
import commands.FindCommand;
import commands.HelpCommand;
import commands.InvalidCommand;
import commands.ListCommand;
Expand Down Expand Up @@ -61,6 +62,14 @@ public Command parseCommand(String userInput) {
"Use: event <description> /from <start_time> /to <end_time>");
}

case FindCommand.COMMAND_WORD:
try {
String keyword = inputParts[1];
return new FindCommand(keyword);
} catch (ArrayIndexOutOfBoundsException e) {
return new WrongFormatCommand("Invalid format! Use: Find <keyword>");
}

case MarkCommand.COMMAND_WORD:
try {
int taskIndex = Integer.parseInt(inputParts[1]);
Expand Down