summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/design/controller')
-rw-r--r--src/main/java/design/controller/userinput/menus/FiltersMenu.java52
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java1
-rw-r--r--src/main/java/design/controller/userinput/menus/SearchMenu.java32
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectCourse.java60
4 files changed, 145 insertions, 0 deletions
diff --git a/src/main/java/design/controller/userinput/menus/FiltersMenu.java b/src/main/java/design/controller/userinput/menus/FiltersMenu.java
new file mode 100644
index 0000000..6923d3d
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/FiltersMenu.java
@@ -0,0 +1,52 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.model.course_search.*;
+
+import java.util.List;
+
+import design.model.course_search.CurrentSearchQuery;
+
+public class FiltersMenu extends Menu {
+
+ CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
+
+
+ @Override
+ public String getTitle() {
+ return "filter menu";
+ }
+
+ /*
+ * Add a new filter to our filter list
+ */
+ public void addFilter(CourseSorter filter) {
+ CurrentSearchQuery.INSTANCE.addFilter(filter);
+ System.out.println("\nAdded filter.\n");
+ new SearchMenu().present();
+ }
+
+ /*
+ * clear all of our filters.
+ */
+ public void clearFilters() {
+ CurrentSearchQuery.INSTANCE.clearFilters();
+ System.out.println("\nCleared all filters.\n");
+ new SearchMenu().present();
+ }
+
+ /*
+ * show our current filters.
+ */
+ @Override
+ public List<MenuOption> getMenuOptions() {
+
+ System.out.println("\nYou are filtering by ");
+ System.out.println(query.printFilters());
+
+ return List.of(
+ new MenuOption("return to search", (c) -> new SearchMenu().present())
+ );
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java
index c76e61a..8ee872e 100644
--- a/src/main/java/design/controller/userinput/menus/MainMenu.java
+++ b/src/main/java/design/controller/userinput/menus/MainMenu.java
@@ -15,6 +15,7 @@ public class MainMenu extends Menu {
public List<MenuOption> getMenuOptions() {
return List.of(
new MenuOption("user settings...", (a) -> new UserSettings().present()),
+ new MenuOption("add course to profile...", (a) -> new SearchMenu().present()),
new MenuOption("statistics...", (a) -> new StatisticsMenu().present()),
new MenuOption("log round...", (a) -> new CourseSelectMenu().present()),
new MenuOption("quit", (a) -> {}));
diff --git a/src/main/java/design/controller/userinput/menus/SearchMenu.java b/src/main/java/design/controller/userinput/menus/SearchMenu.java
new file mode 100644
index 0000000..9411b02
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/SearchMenu.java
@@ -0,0 +1,32 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.model.course_search.SortByDifficulty;
+import design.model.course_search.SortByHoles;
+import design.model.course_search.SortByLocation;
+import design.model.course_search.SortByPar;
+
+import java.util.List;
+
+public class SearchMenu extends Menu {
+
+ @Override
+ public String getTitle() {
+ return "search menu";
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ return List.of(
+ new MenuOption("return to main menu", (a) -> new MainMenu().present()),
+ new MenuOption("search...", (a) -> new SelectCourse().search()),
+ new MenuOption("add difficulty filter...", (a) -> new FiltersMenu().addFilter(new SortByDifficulty())),
+ new MenuOption("add hole count filter...", (a) -> new FiltersMenu().addFilter(new SortByHoles())),
+ new MenuOption("add location filter...", (a) -> new FiltersMenu().addFilter(new SortByLocation())),
+ new MenuOption("add par filter...", (a) -> new FiltersMenu().addFilter(new SortByPar())),
+ new MenuOption("list filters", (a) -> new FiltersMenu().present()),
+ new MenuOption("clear all filters", (a) -> new FiltersMenu().clearFilters())
+ );
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/SelectCourse.java b/src/main/java/design/controller/userinput/menus/SelectCourse.java
new file mode 100644
index 0000000..0195bcf
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/SelectCourse.java
@@ -0,0 +1,60 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.model.course_search.CurrentSearchQuery;
+import design.model.course_search.ICourse;
+
+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();
+
+ query.search(searchTerm);
+
+ present();
+ }
+
+ /*
+ * Display the results of our search.
+ */
+ @Override
+ public List<MenuOption> getMenuOptions()
+ {
+ var l = new ArrayList<MenuOption>();
+ List<ICourse> queryResult = query.getQueryResult().getCourses();
+
+ // we always want to return to menu as an option.
+ l.add(new MenuOption("return to main menu", (a) -> new MainMenu().present()));
+
+ // no results? let the user know.
+ if (queryResult.isEmpty())
+ {
+ System.out.println("\nNo matching courses found.\n");
+ }
+
+ // add all of our results.
+ l.addAll(query.getQueryResult().getCourses().stream()
+ .map(i -> new MenuOption(
+ i.getName() + ", " + i.getLocation() + ", Difficulty: " + i.getDifficultyRating() + ", " + i.getHoleCount() + " holes",
+ (a) -> {})).toList()); // TO DO: inputing the # for the course should add it to the user's profile
+ return l;
+ }
+
+}