package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.runtime.*; import design.model.*; import design.model.course_search.*; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class SelectCourse extends Menu { CurrentSearchQuery query = CurrentSearchQuery.INSTANCE; @Override public String getTitle() { return "select course"; } /* * Prompt for input and search. */ public void search() { System.out.print("Enter search term (blank for all): "); Scanner sc = new Scanner(System.in); String searchTerm = sc.nextLine(); // reset the query so we aren't trying to search on an already searched query query.reset(); // search and present query.search(searchTerm); this.present(); } /* * Display the results of our search. */ @Override public List getMenuOptions() { var l = new ArrayList(); List queryResult = query.getQueryResult().getCourses(); // 0 - return to main menu l.add(new MenuOption("return to main menu", (a) -> new MainMenu().present())); // if we find no results, let the user know. if (queryResult.isEmpty()) { System.out.println("\nNo matching courses found.\n"); } // traverse the course list tree and add menu options for each leaf (course) addCoursesRecursive(l, query.getQueryResult()); return l; } // recursively go through tree structure of courselist to make menu options private void addCoursesRecursive(List menuOptions, CourseList list) { for (ICourse icourse : list.getCourses()) { // if we find a leaf (course), display it as a menu option if (icourse instanceof Course c) { menuOptions.add(new MenuOption( c.getName() + ", " + c.getLocation() + ", Difficulty: " + c.getDifficultyRating() + ", " + c.getHoleCount() + " holes", (a) -> { Golfer currentGolfer = Session.getCurrentGolfer(); if(currentGolfer == null) { System.out.println("\n\n !!! log into a golfer account to add courses to your profile. !!! \n\n"); new MainMenu().present(); } currentGolfer.addCourse(c); System.out.println("\n Course added to profile. \n"); } )); } // if not, we need to traverse another courselist else if (icourse instanceof CourseList sublist) { addCoursesRecursive(menuOptions, sublist); } } } }