summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/design/controller')
-rw-r--r--src/main/java/design/controller/userinput/Menu.java8
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSearch.java32
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSelectMenu.java96
-rw-r--r--src/main/java/design/controller/userinput/menus/FiltersMenu.java30
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java5
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java8
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageClubs.java (renamed from src/main/java/design/controller/userinput/menus/AddClubMenu.java)52
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageCourses.java58
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java4
-rw-r--r--src/main/java/design/controller/userinput/menus/StatisticsMenu.java108
-rw-r--r--src/main/java/design/controller/userinput/menus/UserSettings.java2
11 files changed, 226 insertions, 177 deletions
diff --git a/src/main/java/design/controller/userinput/Menu.java b/src/main/java/design/controller/userinput/Menu.java
index 0b2fb26..6bf3da4 100644
--- a/src/main/java/design/controller/userinput/Menu.java
+++ b/src/main/java/design/controller/userinput/Menu.java
@@ -11,17 +11,17 @@ public abstract class Menu {
var menuOptions = getMenuOptions();
System.out.println();
System.out.printf("-- %s --\n", getTitle().toUpperCase());
- for (int i = 0; i < menuOptions.size(); i++) {
- MenuOption menuOption = menuOptions.get(i);
+ for (int i = 1; i <= menuOptions.size(); i++) {
+ MenuOption menuOption = menuOptions.get(i-1);
System.out.printf("%s: %s\n", i, menuOption.getName());
}
- System.out.print("Selection: ");
+ System.out.printf("Selection (%s..%s): ", 1, menuOptions.size());
Scanner sc = new Scanner(System.in);
var line = sc.nextLine();
try {
- int i = Integer.parseInt(line);
+ int i = Integer.parseInt(line) - 1;
menuOptions.get(i).onAction();
} catch (ArrayIndexOutOfBoundsException ex) {
System.err.printf("Invalid option \"%s\"\n", line);
diff --git a/src/main/java/design/controller/userinput/menus/CourseSearch.java b/src/main/java/design/controller/userinput/menus/CourseSearch.java
index 019965c..65d4b3e 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSearch.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSearch.java
@@ -28,22 +28,6 @@ public class CourseSearch extends Menu {
}
/*
- * Prompt for input and search.
- */
- public void search() {
- System.out.print("Enter search term (blank for all): ");
- Scanner sc = new Scanner(System.in);
- String searchTerm = sc.nextLine();
-
- // search and present
- query.search(searchTerm);
- this.present();
-
- // reset the query after we're done.
- query.reset();
- }
-
- /*
* Display the results of our search.
*/
@Override
@@ -64,6 +48,22 @@ public class CourseSearch extends Menu {
return l;
}
+ /*
+ * Prompt for input and search.
+ */
+ @Override
+ public void present() {
+ System.out.print("Enter search term (blank for all): ");
+ Scanner sc = new Scanner(System.in);
+ String searchTerm = sc.nextLine();
+
+ // search and present
+ query.search(searchTerm);
+ super.present();
+
+ // reset the query after we're done.
+ query.reset();
+ }
// recursively go through tree structure of courselist to make menu options.
// this is all for displaying the menu options, not the actual sorting.
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
index af825e0..581b0b9 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
@@ -3,18 +3,19 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
import design.model.Course;
+import design.model.Golfer;
import design.model.Hole;
import design.model.Round;
import java.time.LocalDateTime;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
-import design.persistence.MasterDatabase;
import design.runtime.Session;
public class CourseSelectMenu extends Menu {
+ Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
@@ -23,78 +24,45 @@ public class CourseSelectMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
- List<MenuOption> opts = new ArrayList<>();
-
- // 0) back
- opts.add(new MenuOption("back to main menu", () -> new MainMenu().present()));
-
- // 1) go to CourseSearchMenu to search for a course and add it profile
- opts.add(new MenuOption("Add Course to Profile", () -> new MainMenu().present()));
-
- // 2) pick course from MY PROFILE only
- opts.add(new MenuOption("pick course from my profile", () -> {
- var golfer = Session.getCurrentGolfer();
- Course[] mine = (golfer == null) ? new Course[0] : golfer.getCourses();
-
- // Checks user has courses of not informs them to add one to there profile
- if (mine == null || mine.length == 0) {
- System.out.println("You don't have any courses saved to your profile yet.");
- System.out.println("Use the 'Add Course to Profile' menu first.");
- this.present();
- return;
- }
- // Select a course
- Scanner sc = new Scanner(System.in);
+ return Arrays.stream(golfer.getCourses())
+ .map(i -> new MenuOption(i.toString(), () -> promptHole(i)))
+ .toList();
+ }
- // Prints all courses
- System.out.println("-- MY COURSES --");
- for (int i = 0; i < mine.length; i++) {
- Course c = mine[i];
- System.out.printf("%d: %s (%s) | Holes: %d | Total Par: %d | Difficulty: %.1f%n",
- i + 1, c.getName(), c.getLocation(), c.getHoleCount(), c.getTotalPar(),
- c.getDifficultyRating());
- }
- // Select course by number
- Course selected = null;
- while (selected == null) {
- System.out.print("Select course # (1.." + mine.length + "): ");
- String line = sc.nextLine().trim();
- int idx = Integer.parseInt(line);
- if (idx < 1 || idx > mine.length) {
- System.out.println("Out of range. Try again.");
- continue;
- }
- selected = mine[idx - 1];
- }
- // Gets starting hole on course
- int startHoleNum = readStartingHole(sc, selected.getHoleCount());
- // Starts round and sends user to HolePlayMenu
- startRound(selected, startHoleNum);
- }));
+ @Override
+ public void present() {
+ // Checks user has courses of not informs them to add one to there profile
+ if (golfer.getCourses().length == 0) {
+ System.out.println("You don't have any courses saved to your profile yet.");
+ System.out.println("Use the 'Add Course to Profile' menu first.");
+ new MainMenu().present();
+ return;
+ }
- return opts;
+ super.present();
}
- private int readStartingHole(Scanner sc, int holeCount) {
+ private void promptHole(Course selected) {
+ Scanner sc = new Scanner(System.in);
+ // Gets starting hole on course
+ int startHoleNum = 1;
+ int holeCount = selected.getHoleCount();
// Asks for a hole number until a valid number is selected
- while (true) {
- System.out.print("Starting hole (1.." + holeCount + ", blank=1): ");
- String s = sc.nextLine().trim();
- if (s.isEmpty())
- return 1;
+ System.out.print("Starting hole (1.." + holeCount + ", blank=1): ");
+ String s = sc.nextLine().trim();
+ if (!s.isEmpty()) {
int start = Integer.parseInt(s);
if (start < 1 || start > holeCount) {
System.out.println("Starting hole must be between 1 and " + holeCount + ".");
- continue;
+ return;
}
- return start;
+ startHoleNum = start;
}
- }
-
- private void startRound(Course c, int startHoleNum) {
- Hole startHole = c.getHoles().get(startHoleNum - 1);
- Round r = new Round(c, LocalDateTime.now(), startHole);
- Session.getCurrentGolfer().addRound(r);
+ // Starts round and sends user to HolePlayMenu
+ Hole startHole = selected.getHoles().get(startHoleNum - 1);
+ Round r = new Round(selected, LocalDateTime.now(), startHole);
+ golfer.addRound(r);
new HolePlayMenu(r).present();
}
+
}
diff --git a/src/main/java/design/controller/userinput/menus/FiltersMenu.java b/src/main/java/design/controller/userinput/menus/FiltersMenu.java
index 9f2d8df..103d62b 100644
--- a/src/main/java/design/controller/userinput/menus/FiltersMenu.java
+++ b/src/main/java/design/controller/userinput/menus/FiltersMenu.java
@@ -20,6 +20,20 @@ public class FiltersMenu extends 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) {
@@ -34,20 +48,6 @@ public class FiltersMenu extends Menu {
public void clearFilters() {
CurrentSearchQuery.INSTANCE.clearFilters();
System.out.println("\nCleared all filters.\n");
- new SearchMenu().present();
- }
-
- /*
- * 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())
- );
+ 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 14e5345..33450c9 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -50,7 +50,7 @@ public class HolePlayMenu extends Menu {
if (clubs.length == 0) {
System.out.println("You don't have any clubs yet. Add one first.");
- new AddClubMenu().present();
+// new AddClubMenu().present();
this.present();
return;
}
@@ -59,8 +59,7 @@ public class HolePlayMenu extends Menu {
System.out.println("-- YOUR CLUBS --");
for (int i = 0; i < clubs.length; i++) {
Club c = clubs[i];
- System.out.printf("%d: #%d %s - %s (%s)%n",
- i + 1, c.getId(), c.getNickname(), c.getManufacture(), c.getClubType());
+ System.out.println(c);
}
// user selects one of their clubs
diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java
index 71a93b0..05c3518 100644
--- a/src/main/java/design/controller/userinput/menus/MainMenu.java
+++ b/src/main/java/design/controller/userinput/menus/MainMenu.java
@@ -14,10 +14,12 @@ public class MainMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
return List.of(
+ new MenuOption("quit", () -> {}),
new MenuOption("user settings...", () -> new UserSettings().present()),
- new MenuOption("add course to profile...", () -> new SearchMenu().present()),
+ new MenuOption("manage courses...", () -> new ManageCourses().present()),
+ new MenuOption("manage clubs...", () -> new ManageClubs().present()),
new MenuOption("statistics...", () -> new StatisticsMenu().present()),
- new MenuOption("log round...", () -> new CourseSelectMenu().present()),
- new MenuOption("quit", () -> {}));
+ new MenuOption("log round...", () -> new CourseSelectMenu().present())
+ );
}
}
diff --git a/src/main/java/design/controller/userinput/menus/AddClubMenu.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java
index ea18ed5..56d645f 100644
--- a/src/main/java/design/controller/userinput/menus/AddClubMenu.java
+++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java
@@ -9,24 +9,53 @@ 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 AddClubMenu extends Menu {
+public class ManageClubs extends Menu {
+ Golfer golfer = Session.getCurrentGolfer();
@Override
public String getTitle() {
- return "add a club";
+ return "manage clubs";
}
@Override
public List<MenuOption> getMenuOptions() {
- List<MenuOption> opts = new ArrayList<>();
+ List<MenuOption> opts = new java.util.ArrayList<>();
+ opts.add(new MenuOption("return to main menu", () -> new MainMenu().present()));
- opts.add(new MenuOption("create new club", () -> {
- Golfer g = Session.getCurrentGolfer();
- if (g == null) {
+ opts.add(new MenuOption("list clubs", () -> {
+ for (Club club : golfer.getClubs()) {
+ System.out.printf("- %s\n", club);
+ }
+ this.present();
+ }));
+
+ 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();
+ }));
+
+ opts.add(new MenuOption("add club...", () -> {
+ if (golfer == null) {
System.out.println("No user loaded.");
new UserSettings().present();
return;
@@ -59,19 +88,18 @@ public class AddClubMenu extends Menu {
type = types[idx - 1];
}
- g.addClub(manufacture, nickname, type);
+ golfer.addClub(manufacture, nickname, type);
// Add club to JSON
try {
- PersonalDatabase.INSTANCE.updateGolfer(g);
+ PersonalDatabase.INSTANCE.updateGolfer(golfer);
System.out.println("Club added and saved.");
} catch (IOException e) {
throw new RuntimeException("Failed to save club", e);
}
new UserSettings().present();
- }));
-
- opts.add(new MenuOption("cancel", () -> new UserSettings().present()));
+ }));// Pick type
+// Add club to JSON
return opts;
}
}
diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java
new file mode 100644
index 0000000..5156a9b
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java
@@ -0,0 +1,58 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+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();
+
+ @Override
+ public String getTitle() {
+ return "manage courses";
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ List<MenuOption> opts = new java.util.ArrayList<>();
+ opts.add(new MenuOption("return to main menu", () -> new MainMenu().present()));
+
+ opts.add(new MenuOption("list courses", () -> {
+ for (Course course : golfer.getCourses()) {
+ System.out.printf("- %s\n", course);
+ }
+ this.present();
+ }));
+
+ 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();
+ }));
+
+ opts.add(new MenuOption("add course...", () -> new SearchMenu().present()));
+
+ return opts;
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java
index ffae559..8f0a809 100644
--- a/src/main/java/design/controller/userinput/menus/SelectUser.java
+++ b/src/main/java/design/controller/userinput/menus/SelectUser.java
@@ -31,13 +31,13 @@ public class SelectUser extends Menu {
var opts = new ArrayList<MenuOption>();
for (Golfer i : personalDB.getGolfers()) {
- MenuOption menuOption = new MenuOption(i.getUsername(), () -> {
+ 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.getUsername());
+ System.out.printf("Loaded user: %s%n", i);
doAfter.onAction();
} else {
System.out.println("Incorrect password. ");
diff --git a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
index 3af790e..8835ce1 100644
--- a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
+++ b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
@@ -27,62 +27,6 @@ public class StatisticsMenu extends Menu {
return "statistics menu";
}
- // Helper classes to get user input and handle finding the data they requested (Course, Hole, Year, etc.)
- @SuppressWarnings("resource")
- private Statistics getUserYear(Statistics baseStats){
- Scanner sc = new Scanner(System.in);
-
- System.out.println("Enter year to search: ");
- int year = Integer.parseInt(sc.nextLine());
-
- Statistics yearStats = new YearlyStats(baseStats, year);
- return yearStats;
- }
-
- @SuppressWarnings("resource")
- private Statistics getUserCourse(Statistics baseStats){
- Scanner sc = new Scanner(System.in);
- Course[] courses = golfer.getCourses();
- for(int i = 0; i < courses.length; i++){
- System.out.println((i+1) + ".) Name: " + courses[i].getName() + ". Location: " + courses[i].getLocation());
- }
- System.out.println("Select the course number corresponding to the course. ");
- int selection = Integer.parseInt(sc.nextLine());
- return new CourseStats(baseStats, courses[selection - 1]);
- }
-
- @SuppressWarnings("resource")
- private Statistics getUserRound(Statistics baseStats){
- Scanner sc = new Scanner(System.in);
- Round[] rounds = baseStats.getRounds();
- for(int i = 0; i < rounds.length; i++){
- System.out.println((i+1) + ".) Date: " + rounds[i].getDateTime().toLocalDate() + ". Time: " + rounds[i].getDateTime().toLocalTime() + ". Final Score: " + rounds[i].getTotalSwings() + ". Total Distance: " + rounds[i].getTotalDistance());
- }
- System.out.println("Select the round number: ");
- int selection = Integer.parseInt(sc.nextLine());
- return new RoundStats(baseStats, rounds[selection - 1]);
- }
-
- @SuppressWarnings("resource")
- private Statistics getUserHole(Statistics baseStats){
- Scanner sc = new Scanner(System.in);
- Round round = baseStats.getRounds()[0]; // Only 1 round
- Play[] plays = round.getPlays();
- for(Play play : plays){
- System.out.println("Hole number: " + play.getHoleNumber());
- }
- System.out.println("Enter the hole number: ");
- int holeNum = Integer.parseInt(sc.nextLine());
-
- Course course = round.getCourse();
- for(Hole hole : course.getHoles()){
- if(hole.getNumber() == holeNum){
- return new HoleStats(baseStats, hole);
- }
- }
- return baseStats;
- }
-
@Override
public List<MenuOption> getMenuOptions() {
return List.of(
@@ -134,4 +78,56 @@ public class StatisticsMenu extends Menu {
})
);
}
+
+ // Helper classes to get user input and handle finding the data they requested (Course, Hole, Year, etc.)
+ private Statistics getUserYear(Statistics baseStats){
+ Scanner sc = new Scanner(System.in);
+
+ System.out.println("Enter year to search: ");
+ int year = Integer.parseInt(sc.nextLine());
+
+ Statistics yearStats = new YearlyStats(baseStats, year);
+ return yearStats;
+ }
+
+ private Statistics getUserCourse(Statistics baseStats){
+ Scanner sc = new Scanner(System.in);
+ Course[] courses = golfer.getCourses();
+ for(int i = 0; i < courses.length; i++){
+ System.out.println((i+1) + ".) Name: " + courses[i].getName() + ". Location: " + courses[i].getLocation());
+ }
+ System.out.println("Select the course number corresponding to the course. ");
+ int selection = Integer.parseInt(sc.nextLine());
+ return new CourseStats(baseStats, courses[selection - 1]);
+ }
+
+ private Statistics getUserRound(Statistics baseStats){
+ Scanner sc = new Scanner(System.in);
+ Round[] rounds = baseStats.getRounds();
+ for(int i = 0; i < rounds.length; i++){
+ System.out.println((i+1) + ".) Date: " + rounds[i].getDateTime().toLocalDate() + ". Time: " + rounds[i].getDateTime().toLocalTime() + ". Final Score: " + rounds[i].getTotalSwings() + ". Total Distance: " + rounds[i].getTotalDistance());
+ }
+ System.out.println("Select the round number: ");
+ int selection = Integer.parseInt(sc.nextLine());
+ return new RoundStats(baseStats, rounds[selection - 1]);
+ }
+
+ private Statistics getUserHole(Statistics baseStats){
+ Scanner sc = new Scanner(System.in);
+ Round round = baseStats.getRounds()[0]; // Only 1 round
+ Play[] plays = round.getPlays();
+ for(Play play : plays){
+ System.out.println("Hole number: " + play.getHoleNumber());
+ }
+ System.out.println("Enter the hole number: ");
+ int holeNum = Integer.parseInt(sc.nextLine());
+
+ Course course = round.getCourse();
+ for(Hole hole : course.getHoles()){
+ if(hole.getNumber() == holeNum){
+ return new HoleStats(baseStats, hole);
+ }
+ }
+ return baseStats;
+ }
} \ No newline at end of file
diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java
index 34b645d..04ec4d0 100644
--- a/src/main/java/design/controller/userinput/menus/UserSettings.java
+++ b/src/main/java/design/controller/userinput/menus/UserSettings.java
@@ -60,8 +60,6 @@ public class UserSettings extends Menu {
this.present();
}));
- opts.add(new MenuOption("add a club...", () -> new AddClubMenu().present()));
-
return opts;
}
}