summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSearch.java6
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSelectMenu.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/FiltersMenu.java53
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java24
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageClubs.java83
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageCourses.java26
-rw-r--r--src/main/java/design/controller/userinput/menus/SearchMenu.java41
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectClub.java34
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectCourse.java34
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java29
-rw-r--r--src/main/java/design/controller/userinput/menus/StatisticsMenu.java109
11 files changed, 218 insertions, 223 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSearch.java b/src/main/java/design/controller/userinput/menus/CourseSearch.java
index 65d4b3e..0d5efa6 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSearch.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSearch.java
@@ -19,8 +19,8 @@ import java.util.Scanner;
* The actual SEARCH feature of course searching.
*/
public class CourseSearch extends Menu {
- CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
- PersonalDatabase GolferDB = PersonalDatabase.INSTANCE;
+ private final CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
+ private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
@Override
public String getTitle() {
@@ -85,7 +85,7 @@ public class CourseSearch extends Menu {
// add the course, try to save to DB.
currentGolfer.addCourse(c);
try {
- GolferDB.updateGolfer(currentGolfer);
+ personalDB.updateGolfer(currentGolfer);
} catch (IOException e) {
e.printStackTrace(); // not sure if we should format this prettier for the user if the DB fails.
}
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
index 581b0b9..4b53adb 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
@@ -15,7 +15,7 @@ import java.util.Scanner;
import design.runtime.Session;
public class CourseSelectMenu extends Menu {
- Golfer golfer = Session.getCurrentGolfer();
+ private final Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
diff --git a/src/main/java/design/controller/userinput/menus/FiltersMenu.java b/src/main/java/design/controller/userinput/menus/FiltersMenu.java
deleted file mode 100644
index 103d62b..0000000
--- a/src/main/java/design/controller/userinput/menus/FiltersMenu.java
+++ /dev/null
@@ -1,53 +0,0 @@
-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;
-
-/*
- * Tracks the user's current filters on their search.
- */
-public class FiltersMenu extends Menu {
- CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
-
- @Override
- public String getTitle() {
- return "filter menu";
- }
-
- /*
- * 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", () -> new SearchMenu().present())
- );
- }
-
- /*
- * 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();
- }
-}
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
index 33450c9..48fff4e 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -46,35 +46,19 @@ public class HolePlayMenu extends Menu {
opts.add(new MenuOption("take a shot", () -> {
// loads golfers clubs
var golfer = Session.getCurrentGolfer();
- Club[] clubs = (golfer == null) ? new Club[0] : golfer.getClubs();
- if (clubs.length == 0) {
+ if (!golfer.hasClubs()) {
System.out.println("You don't have any clubs yet. Add one first.");
// new AddClubMenu().present();
this.present();
return;
}
- // list clubs
- System.out.println("-- YOUR CLUBS --");
- for (int i = 0; i < clubs.length; i++) {
- Club c = clubs[i];
- System.out.println(c);
- }
+ var selectClub = new SelectClub(golfer);
+ selectClub.present();
+ Club club = selectClub.getResult();
- // user selects one of their clubs
Scanner sc = new Scanner(System.in);
- Club club = null;
- while (club == null) {
- System.out.print("Select club # (1.." + clubs.length + "): ");
- String line = sc.nextLine().trim();
- int idx = Integer.parseInt(line);
- if (idx < 1 || idx > clubs.length) {
- System.out.println("Out of range. Try again.");
- continue;
- }
- club = clubs[idx - 1];
- }
// Get shot distance (defaults to 0 of not stated)
System.out.print("Distance (yds, blank=0): ");
diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java
index 56d645f..6786553 100644
--- a/src/main/java/design/controller/userinput/menus/ManageClubs.java
+++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java
@@ -8,12 +8,13 @@ import design.persistence.PersonalDatabase;
import design.runtime.Session;
import java.io.IOException;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class ManageClubs extends Menu {
- Golfer golfer = Session.getCurrentGolfer();
+ private final Golfer golfer = Session.getCurrentGolfer();
+ private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
@Override
public String getTitle() {
@@ -33,34 +34,13 @@ public class ManageClubs extends Menu {
}));
opts.add(new MenuOption("remove club...", () -> {
- new Menu() {
- @Override
- public String getTitle() {
- return "remove club";
- }
-
- @Override
- public List<MenuOption> getMenuOptions() {
- List<MenuOption> list = new ArrayList<>();
- for (Club c : golfer.getClubs()) {
- MenuOption menuOption = new MenuOption(c.toString(), () -> {
- golfer.removeClub(c);
- this.present();
- });
- list.add(menuOption);
- }
- return list;
- }
- }.present();
+ var selector = new SelectClub(golfer);
+ selector.present();
+ golfer.removeClub(selector.getResult());
+ this.present();
}));
opts.add(new MenuOption("add club...", () -> {
- if (golfer == null) {
- System.out.println("No user loaded.");
- new UserSettings().present();
- return;
- }
-
Scanner sc = new Scanner(System.in);
System.out.print("Manufacturer: ");
@@ -69,37 +49,42 @@ public class ManageClubs extends Menu {
System.out.print("Nickname: ");
String nickname = sc.nextLine().trim();
- // Pick type
- Club.ClubType[] types = Club.ClubType.values();
- System.out.println("Club type:");
- for (int i = 0; i < types.length; i++) {
- System.out.printf("%d: %s%n", i + 1, types[i]);
- }
-
- Club.ClubType type = null;
- while (type == null) {
- System.out.print("Select (1.." + types.length + "): ");
- String line = sc.nextLine().trim();
- int idx = Integer.parseInt(line);
- if (idx < 1 || idx > types.length) {
- System.out.println("Out of range. Try again.");
- continue;
- }
- type = types[idx - 1];
- }
+ var selector = new SelectClubType();
+ selector.present();
+ Club.ClubType type = selector.getResult();
golfer.addClub(manufacture, nickname, type);
// Add club to JSON
try {
- PersonalDatabase.INSTANCE.updateGolfer(golfer);
+ personalDB.updateGolfer(golfer);
System.out.println("Club added and saved.");
} catch (IOException e) {
throw new RuntimeException("Failed to save club", e);
}
- new UserSettings().present();
- }));// Pick type
-// Add club to JSON
+ this.present();
+ }));
+
return opts;
}
+
+ private static class SelectClubType extends Menu {
+ private Club.ClubType result;
+
+ @Override
+ public String getTitle() {
+ return "select club type";
+ }
+
+ public Club.ClubType getResult() {
+ return result;
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ return Arrays.stream(Club.ClubType.values())
+ .map(t -> new MenuOption(t.name(), () -> result = t))
+ .toList();
+ }
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java
index 5156a9b..dff48dc 100644
--- a/src/main/java/design/controller/userinput/menus/ManageCourses.java
+++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java
@@ -6,11 +6,10 @@ import design.model.Course;
import design.model.Golfer;
import design.runtime.Session;
-import java.util.ArrayList;
import java.util.List;
public class ManageCourses extends Menu {
- Golfer golfer = Session.getCurrentGolfer();
+ private final Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
@@ -30,25 +29,10 @@ public class ManageCourses extends Menu {
}));
opts.add(new MenuOption("remove course...", () -> {
- new Menu() {
- @Override
- public String getTitle() {
- return "remove course";
- }
-
- @Override
- public List<MenuOption> getMenuOptions() {
- List<MenuOption> list = new ArrayList<>();
- for (Course c : golfer.getCourses()) {
- MenuOption menuOption = new MenuOption(c.toString(), () -> {
- golfer.removeCourse(c);
- this.present();
- });
- list.add(menuOption);
- }
- return list;
- }
- }.present();
+ var selector = new SelectCourse(golfer);
+ selector.present();
+ golfer.removeCourse(selector.getResult());
+ this.present();
}));
opts.add(new MenuOption("add course...", () -> 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 609ce23..6d9fe26 100644
--- a/src/main/java/design/controller/userinput/menus/SearchMenu.java
+++ b/src/main/java/design/controller/userinput/menus/SearchMenu.java
@@ -2,10 +2,7 @@ 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 design.model.course_search.*;
import java.util.List;
@@ -13,6 +10,7 @@ import java.util.List;
* The main control panel for course searching.
*/
public class SearchMenu extends Menu {
+ private final CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
@Override
public String getTitle() {
@@ -24,12 +22,35 @@ public class SearchMenu extends Menu {
return List.of(
new MenuOption("return to main menu", () -> new MainMenu().present()),
new MenuOption("search...", () -> new CourseSearch().present()),
- new MenuOption("add difficulty filter...", () -> new FiltersMenu().addFilter(new SortByDifficulty())),
- new MenuOption("add hole count filter...", () -> new FiltersMenu().addFilter(new SortByHoles())),
- new MenuOption("add location filter...", () -> new FiltersMenu().addFilter(new SortByLocation())),
- new MenuOption("add par filter...", () -> new FiltersMenu().addFilter(new SortByPar())),
- new MenuOption("list filters", () -> new FiltersMenu().present()),
- new MenuOption("clear all filters", () -> new FiltersMenu().clearFilters())
+ new MenuOption("add difficulty filter...", () -> addFilter(new SortByDifficulty())),
+ new MenuOption("add hole count filter...", () -> addFilter(new SortByHoles())),
+ new MenuOption("add location filter...", () -> addFilter(new SortByLocation())),
+ new MenuOption("add par filter...", () -> addFilter(new SortByPar())),
+ new MenuOption("list filters", this::printFilters),
+ new MenuOption("clear all filters", this::clearFilters)
);
}
+
+ private void printFilters() {
+ System.out.println("\nYou are filtering by ");
+ System.out.println(query.printFilters());
+ }
+
+ /*
+ * Add a new filter to our filter list
+ */
+ public void addFilter(CourseSorter filter) {
+ query.addFilter(filter);
+ System.out.println("\nAdded filter.\n");
+ new SearchMenu().present();
+ }
+
+ /*
+ * clear all of our filters.
+ */
+ public void clearFilters() {
+ query.clearFilters();
+ System.out.println("\nCleared all filters.\n");
+ new SearchMenu().present();
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/SelectClub.java b/src/main/java/design/controller/userinput/menus/SelectClub.java
new file mode 100644
index 0000000..09facdb
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/SelectClub.java
@@ -0,0 +1,34 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.model.Club;
+import design.model.Golfer;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class SelectClub extends Menu {
+ private final Golfer golfer;
+ private Club result;
+
+ public SelectClub(Golfer golfer) {
+ this.golfer = golfer;
+ }
+
+ @Override
+ public String getTitle() {
+ return "select club";
+ }
+
+ public Club getResult() {
+ return result;
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ return Arrays.stream(golfer.getClubs())
+ .map(g -> new MenuOption(g.toString(), () -> result = g))
+ .toList();
+ }
+}
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..811586f
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/SelectCourse.java
@@ -0,0 +1,34 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.model.Course;
+import design.model.Golfer;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class SelectCourse extends Menu {
+ private final Golfer golfer;
+ private Course result;
+
+ public SelectCourse(Golfer golfer) {
+ this.golfer = golfer;
+ }
+
+ @Override
+ public String getTitle() {
+ return "select course";
+ }
+
+ public Course getResult() {
+ return result;
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ return Arrays.stream(golfer.getCourses())
+ .map(c -> new MenuOption(c.toString(), () -> result = c))
+ .toList();
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java
index 8f0a809..646124d 100644
--- a/src/main/java/design/controller/userinput/menus/SelectUser.java
+++ b/src/main/java/design/controller/userinput/menus/SelectUser.java
@@ -31,24 +31,11 @@ public class SelectUser extends Menu {
var opts = new ArrayList<MenuOption>();
for (Golfer i : personalDB.getGolfers()) {
- MenuOption menuOption = new MenuOption(i.toString(), () -> {
- System.out.print("Enter password: ");
- var password = scanner.nextLine();
- if (i.checkPassword(password)) {
- // Sets user in Session too
- Session.setCurrentGolfer(i);
- System.out.printf("Loaded user: %s%n", i);
- doAfter.onAction();
- } else {
- System.out.println("Incorrect password. ");
- this.present();
- }
- });
+ MenuOption menuOption = new MenuOption(i.toString(), () -> login(i));
opts.add(menuOption);
}
opts.add(new MenuOption("<create>", () -> {
-
System.out.print("Enter username: ");
var username = scanner.nextLine();
@@ -68,4 +55,18 @@ public class SelectUser extends Menu {
return opts;
}
+
+ private void login(Golfer g) {
+ System.out.print("Enter password: ");
+ var password = scanner.nextLine();
+ if (g.checkPassword(password)) {
+ // Sets user in Session too
+ Session.setCurrentGolfer(g);
+ System.out.printf("Loaded user: %s%n", g);
+ doAfter.onAction();
+ } else {
+ System.out.println("Incorrect password. ");
+ this.present();
+ }
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
index 8835ce1..9ce0bd0 100644
--- a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
+++ b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
@@ -19,8 +19,7 @@ import java.util.List;
import java.util.Scanner;
public class StatisticsMenu extends Menu {
-
- Golfer golfer = Session.getCurrentGolfer();
+ private final Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
@@ -29,54 +28,61 @@ public class StatisticsMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
- return List.of(
- new MenuOption("return to main menu", () -> new MainMenu().present()),
- new MenuOption("view lifetime statistics", () -> {
- Statistics stats = new LifetimeStats(golfer);
-
- System.out.printf("Total swings: %d\n", stats.get_score());
- System.out.printf("Total distance: %.1f\n", stats.get_distance());
- this.present();
- }),
- new MenuOption("view yearly statistics", () -> {
- Statistics baseStats = new LifetimeStats(golfer);
- Statistics yearStats = getUserYear(baseStats);
-
- System.out.printf("Total swings: %d\n", yearStats.get_score());
- System.out.printf("Total distance: %.1f\n", yearStats.get_distance());
- this.present();
- }),
- new MenuOption("view course statistics", () -> {
- Statistics baseStats = new LifetimeStats(golfer);
- Statistics yearStats = getUserYear(baseStats);
- Statistics courseStats = getUserCourse(yearStats);
-
- System.out.printf("Total swings: %d\n", courseStats.get_score());
- System.out.printf("Total distance: %.1f\n", courseStats.get_distance());
- this.present();
- }),
- new MenuOption("view round statistics", () -> {
- Statistics baseStats = new LifetimeStats(golfer);
- Statistics yearStats = getUserYear(baseStats);
- Statistics courseStats = getUserCourse(yearStats);
- Statistics roundStats = getUserRound(courseStats);
-
- System.out.printf("Total swings: %d\n", roundStats.get_score());
- System.out.printf("Total distance: %.1f\n", roundStats.get_distance());
- this.present();
- }),
- new MenuOption("view hole statistics", () -> {
- Statistics baseStats = new LifetimeStats(golfer);
- Statistics yearStats = getUserYear(baseStats);
- Statistics courseStats = getUserCourse(yearStats);
- Statistics roundStats = getUserRound(courseStats);
- Statistics holeStats = getUserHole(roundStats);
-
- System.out.printf("Total swings: %d\n", holeStats.get_score());
- System.out.printf("Total distance: %.1f\n", holeStats.get_distance());
- this.present();
- })
- );
+ List<MenuOption> opts = new java.util.ArrayList<>();
+
+ opts.add(new MenuOption("return to main menu", () -> new MainMenu().present()));
+
+ opts.add(new MenuOption("view lifetime statistics", () -> {
+ Statistics stats = new LifetimeStats(golfer);
+
+ System.out.printf("Total swings: %d\n", stats.get_score());
+ System.out.printf("Total distance: %.1f\n", stats.get_distance());
+ this.present();
+ }));
+
+ opts.add(new MenuOption("view yearly statistics", () -> {
+ Statistics baseStats = new LifetimeStats(golfer);
+ Statistics yearStats = getUserYear(baseStats);
+
+ System.out.printf("Total swings: %d\n", yearStats.get_score());
+ System.out.printf("Total distance: %.1f\n", yearStats.get_distance());
+ this.present();
+ }));
+
+ opts.add(new MenuOption("view course statistics", () -> {
+ Statistics baseStats = new LifetimeStats(golfer);
+ Statistics yearStats = getUserYear(baseStats);
+ Statistics courseStats = getUserCourse(yearStats);
+
+ System.out.printf("Total swings: %d\n", courseStats.get_score());
+ System.out.printf("Total distance: %.1f\n", courseStats.get_distance());
+ this.present();
+ }));
+
+ opts.add(new MenuOption("view round statistics", () -> {
+ Statistics baseStats = new LifetimeStats(golfer);
+ Statistics yearStats = getUserYear(baseStats);
+ Statistics courseStats = getUserCourse(yearStats);
+ Statistics roundStats = getUserRound(courseStats);
+
+ System.out.printf("Total swings: %d\n", roundStats.get_score());
+ System.out.printf("Total distance: %.1f\n", roundStats.get_distance());
+ this.present();
+ }));
+
+ opts.add(new MenuOption("view hole statistics", () -> {
+ Statistics baseStats = new LifetimeStats(golfer);
+ Statistics yearStats = getUserYear(baseStats);
+ Statistics courseStats = getUserCourse(yearStats);
+ Statistics roundStats = getUserRound(courseStats);
+ Statistics holeStats = getUserHole(roundStats);
+
+ System.out.printf("Total swings: %d\n", holeStats.get_score());
+ System.out.printf("Total distance: %.1f\n", holeStats.get_distance());
+ this.present();
+ }));
+
+ return opts;
}
// Helper classes to get user input and handle finding the data they requested (Course, Hole, Year, etc.)
@@ -86,8 +92,7 @@ public class StatisticsMenu extends Menu {
System.out.println("Enter year to search: ");
int year = Integer.parseInt(sc.nextLine());
- Statistics yearStats = new YearlyStats(baseStats, year);
- return yearStats;
+ return new YearlyStats(baseStats, year);
}
private Statistics getUserCourse(Statistics baseStats){