summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorWillemDalton <willemhdalton@gmail.com>2025-10-06 22:50:40 -0400
committerWillemDalton <willemhdalton@gmail.com>2025-10-06 22:50:40 -0400
commita697cdcd21092119208d59209da2127b2ad02477 (patch)
tree90d7bbf7bc07d4c7113fc12fb6a75d95f27f5b4a /src/main
parentd4198644b0e3bd79de393afeceb3f9a1d933b956 (diff)
downloaddesignproject-design-6-a697cdcd21092119208d59209da2127b2ad02477.tar.gz
designproject-design-6-a697cdcd21092119208d59209da2127b2ad02477.tar.bz2
designproject-design-6-a697cdcd21092119208d59209da2127b2ad02477.zip
working on course filtering
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectCourse.java2
-rw-r--r--src/main/java/design/model/Course.java30
-rw-r--r--src/main/java/design/model/course_search/CourseList.java46
-rw-r--r--src/main/java/design/model/course_search/CourseSorter.java1
-rw-r--r--src/main/java/design/model/course_search/CurrentSearchQuery.java24
-rw-r--r--src/main/java/design/model/course_search/ICourse.java1
-rw-r--r--src/main/java/design/model/course_search/SortByDifficulty.java6
-rw-r--r--src/main/java/design/model/course_search/SortByHoles.java6
-rw-r--r--src/main/java/design/model/course_search/SortByLocation.java6
-rw-r--r--src/main/java/design/model/course_search/SortByName.java6
-rw-r--r--src/main/java/design/model/course_search/SortByPar.java6
11 files changed, 116 insertions, 18 deletions
diff --git a/src/main/java/design/controller/userinput/menus/SelectCourse.java b/src/main/java/design/controller/userinput/menus/SelectCourse.java
index 008adca..0195bcf 100644
--- a/src/main/java/design/controller/userinput/menus/SelectCourse.java
+++ b/src/main/java/design/controller/userinput/menus/SelectCourse.java
@@ -53,7 +53,7 @@ public class SelectCourse extends Menu {
l.addAll(query.getQueryResult().getCourses().stream()
.map(i -> new MenuOption(
i.getName() + ", " + i.getLocation() + ", Difficulty: " + i.getDifficultyRating() + ", " + i.getHoleCount() + " holes",
- (a) -> {})).toList());
+ (a) -> {})).toList()); // TO DO: inputing the # for the course should add it to the user's profile
return l;
}
diff --git a/src/main/java/design/model/Course.java b/src/main/java/design/model/Course.java
index 78ee5bd..4994381 100644
--- a/src/main/java/design/model/Course.java
+++ b/src/main/java/design/model/Course.java
@@ -1,5 +1,6 @@
package design.model;
+import design.model.course_search.CourseList;
import design.model.course_search.ICourse;
import java.util.List;
@@ -23,37 +24,50 @@ public class Course implements ICourse {
this.totalPar = totalPar;
this.holes = holes;
}
-
+
public int getId() {
return id;
}
-
+
+ @Override
public String getName() {
return name;
}
-
+
+ @Override
public float getDifficultyRating() {
return difficultyRating;
}
-
+
+ @Override
public String getLocation() {
return location;
}
-
+
+ @Override
public int getHoleCount() {
return holeCount;
}
-
+
+ @Override
public int getTotalPar() {
return totalPar;
}
-
+
+ @Override
public List<Hole> getHoles() {
return holes;
}
-
+
@Override
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 82648c2..ac2f334 100644
--- a/src/main/java/design/model/course_search/CourseList.java
+++ b/src/main/java/design/model/course_search/CourseList.java
@@ -2,6 +2,7 @@ package design.model.course_search;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
import design.model.*;
@@ -66,6 +67,44 @@ 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.
*/
@@ -86,4 +125,11 @@ public class CourseList implements ICourse {
@Override
public List<Hole> getHoles() { return null; }
+
+ @Override
+ public String toString()
+ {
+ // to do: implement returning courslist children
+ return "wip";
+ }
}
diff --git a/src/main/java/design/model/course_search/CourseSorter.java b/src/main/java/design/model/course_search/CourseSorter.java
index 86c48a5..8b4d42c 100644
--- a/src/main/java/design/model/course_search/CourseSorter.java
+++ b/src/main/java/design/model/course_search/CourseSorter.java
@@ -9,4 +9,5 @@ import java.util.List;
public interface CourseSorter {
public void sortCourses(List<ICourse> courses);
public String toString();
+ public boolean isEqual(ICourse a, ICourse b);
} \ No newline at end of file
diff --git a/src/main/java/design/model/course_search/CurrentSearchQuery.java b/src/main/java/design/model/course_search/CurrentSearchQuery.java
index 0a492b3..3916f0a 100644
--- a/src/main/java/design/model/course_search/CurrentSearchQuery.java
+++ b/src/main/java/design/model/course_search/CurrentSearchQuery.java
@@ -64,17 +64,23 @@ public class CurrentSearchQuery {
return query;
}
- public void search(String searchQuery)
+ public void search(String searchQuery)
{
- List<ICourse> courses;
+ List<ICourse> courses = db.getCourseList().getCourses().stream()
+ .filter(s -> s != null && s.toString().toLowerCase().contains(searchQuery.toLowerCase()))
+ .collect(Collectors.toList());
- // compare to our search query.
- courses = query.getCourses().stream()
- .filter(s -> s != null && s.toString().toLowerCase().contains(searchQuery))
- .collect(Collectors.toList());
+ // Start with filtered base
+ CourseList current = new CourseList();
+ current.setCourses(courses);
- // TO DO: Filter this based on our current filters, then return it!
-
- query.setCourses(courses);
+ // Sequentially apply filters
+ for (CourseSorter filter : filters)
+ {
+ current.setSorter(filter);
+ current = current.groupByCurrentSorter(); // regroup after each
+ }
+
+ query = current;
}
}
diff --git a/src/main/java/design/model/course_search/ICourse.java b/src/main/java/design/model/course_search/ICourse.java
index e50eb1b..061bbfa 100644
--- a/src/main/java/design/model/course_search/ICourse.java
+++ b/src/main/java/design/model/course_search/ICourse.java
@@ -15,4 +15,5 @@ public interface ICourse {
List<Hole> getHoles();
int getHoleCount();
int getTotalPar();
+ CourseList groupByCurrentSorter();
}
diff --git a/src/main/java/design/model/course_search/SortByDifficulty.java b/src/main/java/design/model/course_search/SortByDifficulty.java
index 7b72b84..7660541 100644
--- a/src/main/java/design/model/course_search/SortByDifficulty.java
+++ b/src/main/java/design/model/course_search/SortByDifficulty.java
@@ -16,6 +16,12 @@ public class SortByDifficulty implements CourseSorter {
}
@Override
+ public boolean isEqual(ICourse a, ICourse b)
+ {
+ return a.getDifficultyRating() == b.getDifficultyRating();
+ }
+
+ @Override
public String toString()
{
return "Difficulty";
diff --git a/src/main/java/design/model/course_search/SortByHoles.java b/src/main/java/design/model/course_search/SortByHoles.java
index 76e2649..80c0d16 100644
--- a/src/main/java/design/model/course_search/SortByHoles.java
+++ b/src/main/java/design/model/course_search/SortByHoles.java
@@ -16,6 +16,12 @@ public class SortByHoles implements CourseSorter {
}
@Override
+ public boolean isEqual(ICourse a, ICourse b)
+ {
+ return a.getHoleCount() == b.getHoleCount();
+ }
+
+ @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 e5df839..98ca0c6 100644
--- a/src/main/java/design/model/course_search/SortByLocation.java
+++ b/src/main/java/design/model/course_search/SortByLocation.java
@@ -14,6 +14,12 @@ public class SortByLocation implements CourseSorter {
{
courses.sort(Comparator.comparing(ICourse::getLocation));
}
+
+ @Override
+ public boolean isEqual(ICourse a, ICourse b)
+ {
+ return a.getLocation().equals(b.getLocation());
+ }
@Override
public String toString()
diff --git a/src/main/java/design/model/course_search/SortByName.java b/src/main/java/design/model/course_search/SortByName.java
index cee3bcc..17553a8 100644
--- a/src/main/java/design/model/course_search/SortByName.java
+++ b/src/main/java/design/model/course_search/SortByName.java
@@ -16,6 +16,12 @@ public class SortByName implements CourseSorter {
}
@Override
+ public boolean isEqual(ICourse a, ICourse b)
+ {
+ return a.getName().equals(b.getName());
+ }
+
+ @Override
public String toString()
{
return "Name";
diff --git a/src/main/java/design/model/course_search/SortByPar.java b/src/main/java/design/model/course_search/SortByPar.java
index cc402b8..203aeaf 100644
--- a/src/main/java/design/model/course_search/SortByPar.java
+++ b/src/main/java/design/model/course_search/SortByPar.java
@@ -16,6 +16,12 @@ public class SortByPar implements CourseSorter {
}
@Override
+ public boolean isEqual(ICourse a, ICourse b)
+ {
+ return a.getTotalPar() == b.getTotalPar();
+ }
+
+ @Override
public String toString()
{
return "Total Par";