package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.model.course_search.*; import java.util.List; /* * The main control panel for course searching. */ public class SearchMenu extends Menu { private final CurrentSearchQuery query = CurrentSearchQuery.INSTANCE; @Override public String getTitle() { return "search menu"; } @Override public List getMenuOptions() { return List.of( new MenuOption("return to main menu", () -> new MainMenu().present()), new MenuOption("search...", () -> new CourseSearch().present()), new MenuOption("add difficulty filter...", () -> addFilter(new SortByDifficulty())), new MenuOption("add hole count filter...", () -> addFilter(new SortByHoles())), new MenuOption("add location filter...", () -> addFilter(new SortByLocation())), new MenuOption("add par filter...", () -> addFilter(new SortByPar())), new MenuOption("list filters", this::printFilters), new MenuOption("clear all filters", this::clearFilters) ); } private void printFilters() { System.out.println("\nYou are filtering by "); System.out.println(query.printFilters()); } /* * Add a new filter to our filter list */ public void addFilter(CourseSorter filter) { query.addFilter(filter); System.out.println("\nAdded filter.\n"); new SearchMenu().present(); } /* * clear all of our filters. */ public void clearFilters() { query.clearFilters(); System.out.println("\nCleared all filters.\n"); new SearchMenu().present(); } }