summaryrefslogtreecommitdiff
path: root/src/main/java/design
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/FiltersMenu.java1
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectCourse.java53
-rw-r--r--src/main/java/design/model/Course.java7
-rw-r--r--src/main/java/design/model/course_search/CourseList.java42
-rw-r--r--src/main/java/design/model/course_search/CurrentSearchQuery.java30
-rw-r--r--src/main/java/design/model/course_search/ICourse.java1
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();
}