diff options
| author | WillemDalton <willemhdalton@gmail.com> | 2025-10-07 09:10:05 -0400 |
|---|---|---|
| committer | WillemDalton <willemhdalton@gmail.com> | 2025-10-07 09:10:05 -0400 |
| commit | db1ede10a6547b51ffed71dc86d73f3a6c8af129 (patch) | |
| tree | 8e00cb77a84f53458f720a918659a92068d61cb4 /src/main/java | |
| parent | c7f385078120311869fbcf27f974f480c4bb2fbb (diff) | |
| download | designproject-design-6-db1ede10a6547b51ffed71dc86d73f3a6c8af129.tar.gz designproject-design-6-db1ede10a6547b51ffed71dc86d73f3a6c8af129.tar.bz2 designproject-design-6-db1ede10a6547b51ffed71dc86d73f3a6c8af129.zip | |
added some comments, allows users to add courses to profile, fixed displaying course lists
Diffstat (limited to '')
6 files changed, 57 insertions, 77 deletions
diff --git a/src/main/java/design/controller/userinput/menus/FiltersMenu.java b/src/main/java/design/controller/userinput/menus/FiltersMenu.java index 6923d3d..3a2463f 100644 --- a/src/main/java/design/controller/userinput/menus/FiltersMenu.java +++ b/src/main/java/design/controller/userinput/menus/FiltersMenu.java @@ -12,7 +12,6 @@ public class FiltersMenu extends Menu { CurrentSearchQuery query = CurrentSearchQuery.INSTANCE; - @Override public String getTitle() { return "filter menu"; diff --git a/src/main/java/design/controller/userinput/menus/SelectCourse.java b/src/main/java/design/controller/userinput/menus/SelectCourse.java index 0195bcf..0a57ab6 100644 --- a/src/main/java/design/controller/userinput/menus/SelectCourse.java +++ b/src/main/java/design/controller/userinput/menus/SelectCourse.java @@ -2,8 +2,9 @@ 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 design.runtime.*; +import design.model.*; +import design.model.course_search.*; import java.util.ArrayList; import java.util.List; @@ -26,9 +27,12 @@ public class SelectCourse extends Menu { Scanner sc = new Scanner(System.in); String searchTerm = sc.nextLine(); - query.search(searchTerm); + // reset the query so we aren't trying to search on an already searched query + query.reset(); - present(); + // search and present + query.search(searchTerm); + this.present(); } /* @@ -40,21 +44,48 @@ public class SelectCourse extends Menu { var l = new ArrayList<MenuOption>(); List<ICourse> queryResult = query.getQueryResult().getCourses(); - // we always want to return to menu as an option. + // 0 - return to main menu l.add(new MenuOption("return to main menu", (a) -> new MainMenu().present())); - // no results? let the user know. + // if we find 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 + // 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<MenuOption> 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); + } + } + } } diff --git a/src/main/java/design/model/Course.java b/src/main/java/design/model/Course.java index 4994381..c199563 100644 --- a/src/main/java/design/model/Course.java +++ b/src/main/java/design/model/Course.java @@ -63,11 +63,4 @@ public class Course implements ICourse { public String toString() { return name + ", " + location + ", " + difficultyRating + ", " + holeCount + ", " + totalPar; } - - // dummy method due to composite pattern - @Override - public CourseList groupByCurrentSorter() - { - return null; - } } diff --git a/src/main/java/design/model/course_search/CourseList.java b/src/main/java/design/model/course_search/CourseList.java index ac2f334..360dc9b 100644 --- a/src/main/java/design/model/course_search/CourseList.java +++ b/src/main/java/design/model/course_search/CourseList.java @@ -2,7 +2,6 @@ package design.model.course_search; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import design.model.*; @@ -66,44 +65,6 @@ public class CourseList implements ICourse { { sorter.sortCourses(courses); } - - public CourseList groupByCurrentSorter() - { - CourseList groupedList = new CourseList(); - - if (courses.isEmpty() || sorter == null) - { - return this; - } - - // Sort by current sorter - sort(); - - // Group consecutive equal elements - List<ICourse> currentGroup = new ArrayList<>(); - ICourse prev = null; - - for (ICourse c : courses) { - if (prev == null || !sorter.isEqual(prev, c)) { - if (!currentGroup.isEmpty()) { - CourseList sublist = new CourseList(); - sublist.setCourses(new ArrayList<>(currentGroup)); - groupedList.add(sublist); - currentGroup.clear(); - } - } - currentGroup.add(c); - prev = c; - } - - if (!currentGroup.isEmpty()) { - CourseList sublist = new CourseList(); - sublist.setCourses(currentGroup); - groupedList.add(sublist); - } - - return groupedList; - } /* * All overrides of the ICourse class. This is a drawback of the composite pattern, but it's pretty negligible here. return some dummy values. @@ -129,7 +90,6 @@ public class CourseList implements ICourse { @Override public String toString() { - // to do: implement returning courslist children - return "wip"; + return "Course List"; } } diff --git a/src/main/java/design/model/course_search/CurrentSearchQuery.java b/src/main/java/design/model/course_search/CurrentSearchQuery.java index 3916f0a..c00eb86 100644 --- a/src/main/java/design/model/course_search/CurrentSearchQuery.java +++ b/src/main/java/design/model/course_search/CurrentSearchQuery.java @@ -12,11 +12,19 @@ import design.persistence.MasterDatabase; 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<CourseSorter> filters = new ArrayList<CourseSorter>(); + + // reset the query + public void reset() + { + query = db.getCourseList(); + clearFilters(); + } + // add a new filter public void addFilter(CourseSorter filter) { @@ -29,7 +37,7 @@ public class CurrentSearchQuery { filters.clear(); } - // print out the filters ( this is for the model checking used filters ) + // print out the filters we're currently using and the order public String printFilters() { String filterResult = ""; @@ -45,7 +53,7 @@ public class CurrentSearchQuery { filterResult += f.toString() + " --> "; } - // very silly way of removing the last arrow from our filter list. it's kind of dumb but it works fine. + // remove last arrow and add padding filterResult = filterResult.substring(0, filterResult.length() - 5); filterResult += "\n"; @@ -66,21 +74,11 @@ public class CurrentSearchQuery { public void search(String searchQuery) { + // only grab courses which fit our search List<ICourse> courses = db.getCourseList().getCourses().stream() - .filter(s -> s != null && s.toString().toLowerCase().contains(searchQuery.toLowerCase())) + .filter(s -> s.toString().toLowerCase().contains(searchQuery.toLowerCase())) .collect(Collectors.toList()); - // Start with filtered base - CourseList current = new CourseList(); - current.setCourses(courses); - - // Sequentially apply filters - for (CourseSorter filter : filters) - { - current.setSorter(filter); - current = current.groupByCurrentSorter(); // regroup after each - } - - query = current; + query.setCourses(courses); } } diff --git a/src/main/java/design/model/course_search/ICourse.java b/src/main/java/design/model/course_search/ICourse.java index 061bbfa..e50eb1b 100644 --- a/src/main/java/design/model/course_search/ICourse.java +++ b/src/main/java/design/model/course_search/ICourse.java @@ -15,5 +15,4 @@ public interface ICourse { List<Hole> getHoles(); int getHoleCount(); int getTotalPar(); - CourseList groupByCurrentSorter(); } |
