Skip to content

Commit

Permalink
Add proper filtering methods
Browse files Browse the repository at this point in the history
  • Loading branch information
louietyj committed Nov 5, 2016
1 parent 839a873 commit 6b4be51
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/main/java/seedu/todo/models/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;

/**
* @@author A0093907W
Expand Down Expand Up @@ -106,5 +109,45 @@ public boolean addTag(String tagName) {
public boolean removeTag(String tagName) {
return tagList.remove(tagName);
}


/**
* @@author A0093907W
*
* Filtering methods intended to replace hacky one-filter-method-per-permutation from Yaocong.
* Seriously, why??!!
*/
public static List<Task> where(List<Predicate<Task>> predicates) {
List<Task> result = TodoListDB.getInstance().getAllTasks();
for (Predicate<Task> predicate : predicates) {
filter(predicate, result);
}
return result;
}

public static Predicate<Task> predByName(String name) {
return (Task task) -> Pattern.compile(String.format("\\b%s\\b", name), Pattern.CASE_INSENSITIVE)
.matcher(task.getName()).find();
}

public static Predicate<Task> predBeforeDueDate(LocalDateTime date) {
return (Task task) -> task.getDueDate().isBefore(date);
}

public static Predicate<Task> predAfterDueDate(LocalDateTime date) {
return (Task task) -> task.getDueDate().isAfter(date);
}

public static Predicate<Task> predCompleted(boolean completed) {
return (Task task) -> task.isCompleted() == completed;
}

public static void filter(Predicate<Task> predicate, List<Task> taskList) {
for (int i = taskList.size() - 1; i >= 0; i--) {
if (!predicate.test(taskList.get(i))) {
taskList.remove(i);
}
}
}

}

0 comments on commit 6b4be51

Please sign in to comment.