From 3cc12738542bd7267606185ded60293d0acd7af6 Mon Sep 17 00:00:00 2001 From: WillemDalton Date: Sun, 5 Oct 2025 19:02:08 -0400 Subject: more work on UI for the course searching --- .../controller/userinput/menus/FiltersMenu.java | 42 ++++++++++++++++++++++ .../controller/userinput/menus/SearchMenu.java | 14 +++++--- .../design/model/course_search/CourseSorter.java | 1 + .../model/course_search/SortByDifficulty.java | 8 +++++ .../design/model/course_search/SortByHoles.java | 11 +++++- .../design/model/course_search/SortByLocation.java | 8 +++++ .../design/model/course_search/SortByName.java | 8 +++++ .../java/design/model/course_search/SortByPar.java | 8 +++++ 8 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 src/main/java/design/controller/userinput/menus/FiltersMenu.java (limited to 'src/main') 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..434e395 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/FiltersMenu.java @@ -0,0 +1,42 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.model.course_search.*; + +import java.util.ArrayList; +import java.util.List; + +public class FiltersMenu extends Menu { + private final List filters = new ArrayList(); + + @Override + public String getTitle() { + return "filter menu"; + } + + public void addFilter(CourseSorter filter) { + filters.add(filter); + System.out.println("\nAdded filter.\n"); + new SearchMenu().present(); + } + + public void clearFilters() { + filters.clear(); + } + + @Override + public List getMenuOptions() { + String filterString = "nothing"; + + for (CourseSorter f : filters) + { + filterString += "-->" + f.toString(); + } + + System.out.println("You are filtering by " + filterString); + return List.of( + new MenuOption("return to search", (c) -> new SearchMenu().present()) + ); + } +} diff --git a/src/main/java/design/controller/userinput/menus/SearchMenu.java b/src/main/java/design/controller/userinput/menus/SearchMenu.java index f02de09..cc91795 100644 --- a/src/main/java/design/controller/userinput/menus/SearchMenu.java +++ b/src/main/java/design/controller/userinput/menus/SearchMenu.java @@ -2,6 +2,10 @@ 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; @@ -17,11 +21,11 @@ public class SearchMenu extends Menu { return List.of( new MenuOption("return to main menu", (a) -> new MainMenu().present()), new MenuOption("search...", (a) -> new SelectCourse().present()), - new MenuOption("add difficulty filter...", (a) -> {}), - new MenuOption("add hole count filter...", (a) -> {}), - new MenuOption("add location filter...", (a) -> {}), - new MenuOption("add par filter...", (a) -> {}), - new MenuOption("list filters", (a) -> {}), + 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) -> {}) ); } diff --git a/src/main/java/design/model/course_search/CourseSorter.java b/src/main/java/design/model/course_search/CourseSorter.java index 7549645..86c48a5 100644 --- a/src/main/java/design/model/course_search/CourseSorter.java +++ b/src/main/java/design/model/course_search/CourseSorter.java @@ -8,4 +8,5 @@ import java.util.List; */ public interface CourseSorter { public void sortCourses(List courses); + public String toString(); } \ No newline at end of file diff --git a/src/main/java/design/model/course_search/SortByDifficulty.java b/src/main/java/design/model/course_search/SortByDifficulty.java index 8c3251c..7b72b84 100644 --- a/src/main/java/design/model/course_search/SortByDifficulty.java +++ b/src/main/java/design/model/course_search/SortByDifficulty.java @@ -8,8 +8,16 @@ import java.util.Comparator; * Willem Dalton */ public class SortByDifficulty implements CourseSorter { + + @Override public void sortCourses(List courses) { courses.sort(Comparator.comparing(ICourse::getDifficultyRating)); } + + @Override + public String toString() + { + return "Difficulty"; + } } \ No newline at end of file diff --git a/src/main/java/design/model/course_search/SortByHoles.java b/src/main/java/design/model/course_search/SortByHoles.java index b1badab..76e2649 100644 --- a/src/main/java/design/model/course_search/SortByHoles.java +++ b/src/main/java/design/model/course_search/SortByHoles.java @@ -8,8 +8,17 @@ import java.util.Comparator; * Willem Dalton */ public class SortByHoles implements CourseSorter { + + @Override public void sortCourses(List courses) { courses.sort(Comparator.comparing(ICourse::getHoleCount)); } -} \ No newline at end of file + + @Override + public String toString() + { + return "Hole Count"; + } + +} diff --git a/src/main/java/design/model/course_search/SortByLocation.java b/src/main/java/design/model/course_search/SortByLocation.java index 0d8a8d2..e5df839 100644 --- a/src/main/java/design/model/course_search/SortByLocation.java +++ b/src/main/java/design/model/course_search/SortByLocation.java @@ -8,8 +8,16 @@ import java.util.Comparator; * Willem Dalton */ public class SortByLocation implements CourseSorter { + + @Override public void sortCourses(List courses) { courses.sort(Comparator.comparing(ICourse::getLocation)); } + + @Override + public String toString() + { + return "Location"; + } } \ No newline at end of file diff --git a/src/main/java/design/model/course_search/SortByName.java b/src/main/java/design/model/course_search/SortByName.java index 2847d3e..cee3bcc 100644 --- a/src/main/java/design/model/course_search/SortByName.java +++ b/src/main/java/design/model/course_search/SortByName.java @@ -8,8 +8,16 @@ import java.util.Comparator; * Willem Dalton */ public class SortByName implements CourseSorter { + + @Override public void sortCourses(List courses) { courses.sort(Comparator.comparing(ICourse::getName)); } + + @Override + public String toString() + { + return "Name"; + } } \ No newline at end of file diff --git a/src/main/java/design/model/course_search/SortByPar.java b/src/main/java/design/model/course_search/SortByPar.java index 9a3eaf9..cc402b8 100644 --- a/src/main/java/design/model/course_search/SortByPar.java +++ b/src/main/java/design/model/course_search/SortByPar.java @@ -8,8 +8,16 @@ import java.util.Comparator; * Willem Dalton */ public class SortByPar implements CourseSorter { + + @Override public void sortCourses(List courses) { courses.sort(Comparator.comparing(ICourse::getTotalPar)); } + + @Override + public String toString() + { + return "Total Par"; + } } \ No newline at end of file -- cgit v1.2.3