summaryrefslogtreecommitdiff
path: root/src/main/java/design/model/course_search/CurrentSearchQuery.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/design/model/course_search/CurrentSearchQuery.java')
-rw-r--r--src/main/java/design/model/course_search/CurrentSearchQuery.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/main/java/design/model/course_search/CurrentSearchQuery.java b/src/main/java/design/model/course_search/CurrentSearchQuery.java
new file mode 100644
index 0000000..3916f0a
--- /dev/null
+++ b/src/main/java/design/model/course_search/CurrentSearchQuery.java
@@ -0,0 +1,86 @@
+package design.model.course_search;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import design.persistence.MasterDatabase;
+
+/*
+ * Represents the state of our current search.
+ */
+public class CurrentSearchQuery {
+ public static final CurrentSearchQuery INSTANCE = new CurrentSearchQuery();
+
+
+ MasterDatabase db = MasterDatabase.INSTANCE;
+ private CourseList query = db.getCourseList();
+ private final List<CourseSorter> filters = new ArrayList<CourseSorter>();
+
+ // add a new filter
+ public void addFilter(CourseSorter filter)
+ {
+ filters.add(filter);
+ }
+
+ // clear the filters
+ public void clearFilters()
+ {
+ filters.clear();
+ }
+
+ // print out the filters ( this is for the model checking used filters )
+ public String printFilters()
+ {
+ String filterResult = "";
+
+ // no filters? let the user know.
+ if(filters.size() == 0)
+ {
+ return "nothing";
+ }
+
+ for( CourseSorter f : filters)
+ {
+ filterResult += f.toString() + " --> ";
+ }
+
+ // very silly way of removing the last arrow from our filter list. it's kind of dumb but it works fine.
+ filterResult = filterResult.substring(0, filterResult.length() - 5);
+ filterResult += "\n";
+
+ return filterResult;
+ }
+
+ // get all the filters
+ public List<CourseSorter> getFilters()
+ {
+ return filters;
+ }
+
+ // get our current query.
+ public CourseList getQueryResult()
+ {
+ return query;
+ }
+
+ public void search(String searchQuery)
+ {
+ List<ICourse> courses = db.getCourseList().getCourses().stream()
+ .filter(s -> s != null && s.toString().toLowerCase().contains(searchQuery.toLowerCase()))
+ .collect(Collectors.toList());
+
+ // Start with filtered base
+ CourseList current = new CourseList();
+ current.setCourses(courses);
+
+ // Sequentially apply filters
+ for (CourseSorter filter : filters)
+ {
+ current.setSorter(filter);
+ current = current.groupByCurrentSorter(); // regroup after each
+ }
+
+ query = current;
+ }
+}