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(); // initialize our search with the master db data MasterDatabase db = MasterDatabase.INSTANCE; private CourseList query = db.getCourseList(); private final List filters = new ArrayList(); // reset the query public void reset() { query = db.getCourseList(); clearFilters(); } // add a new filter public void addFilter(CourseSorter filter) { filters.add(filter); } // clear the filters public void clearFilters() { filters.clear(); } // print out the filters we're currently using and the order public String printFilters() { String filterResult = ""; // no filters? let the user know. if(filters.size() == 0) { return "nothing"; } for( CourseSorter f : filters) { filterResult += f.toString() + " --> "; } // remove last arrow and add padding filterResult = filterResult.substring(0, filterResult.length() - 5); filterResult += "\n"; return filterResult; } // get all the filters public List getFilters() { return filters; } // get our current query. public CourseList getQueryResult() { return query; } public void search(String searchQuery) { // only grab courses which fit our search List courses = db.getCourseList().getCourses().stream() .filter(s -> s.toString().toLowerCase().contains(searchQuery.toLowerCase())) .collect(Collectors.toList()); query.setCourses(courses); } }