summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-10-11 23:49:49 -0400
committersowgro <tpoke.ferrari@gmail.com>2025-10-11 23:49:49 -0400
commitdf8adcc59fad860445527c8a4da820a73036b542 (patch)
tree22a91b9a5301d8503719a2956eb49a3490da303d
parentfac7fb71260b901a893b5b90aae23e86d6c23550 (diff)
downloaddesignproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.tar.gz
designproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.tar.bz2
designproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.zip
Menu cleanup - pass 3
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSelectMenu.java68
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java58
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java4
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageClubs.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageCourses.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectClub.java20
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectCourse.java22
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java3
-rw-r--r--src/main/java/design/model/Golfer.java4
9 files changed, 84 insertions, 99 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
deleted file mode 100644
index 4b53adb..0000000
--- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
+++ /dev/null
@@ -1,68 +0,0 @@
-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.Arrays;
-import java.util.List;
-import java.util.Scanner;
-
-import design.runtime.Session;
-
-public class CourseSelectMenu extends Menu {
- private final Golfer golfer = Session.getCurrentGolfer();
-
- @Override
- public String getTitle() {
- return "course select";
- }
-
- @Override
- public List<MenuOption> getMenuOptions() {
- return Arrays.stream(golfer.getCourses())
- .map(i -> new MenuOption(i.toString(), () -> promptHole(i)))
- .toList();
- }
-
- @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;
- }
-
- super.present();
- }
-
- 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
- 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 + ".");
- return;
- }
- startHoleNum = start;
- }
- // 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/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
index 48fff4e..aee6dd7 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -2,12 +2,15 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
+import design.model.Course;
+import design.model.Hole;
import design.runtime.Session;
import design.model.Club;
import design.model.Round;
import design.model.holeplay.HolePlayContext;
import design.persistence.PersonalDatabase;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
@@ -17,8 +20,8 @@ public class HolePlayMenu extends Menu {
private final Round round;
private final HolePlayContext ctx;
- public HolePlayMenu(Round round) {
- this.round = round;
+ public HolePlayMenu() {
+ this.round = createRound();
this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.INSTANCE);
}
@@ -44,19 +47,9 @@ public class HolePlayMenu extends Menu {
} else {
// 0) Take a shot
opts.add(new MenuOption("take a shot", () -> {
- // loads golfers clubs
- var golfer = Session.getCurrentGolfer();
-
- if (!golfer.hasClubs()) {
- System.out.println("You don't have any clubs yet. Add one first.");
-// new AddClubMenu().present();
- this.present();
- return;
- }
-
- var selectClub = new SelectClub(golfer);
- selectClub.present();
- Club club = selectClub.getResult();
+ var selector = new SelectClub();
+ selector.present();
+ Club club = selector.getResult();
Scanner sc = new Scanner(System.in);
@@ -94,4 +87,39 @@ public class HolePlayMenu extends Menu {
return opts;
}
+
+ private static Round createRound() {
+ var golfer = Session.getCurrentGolfer();
+
+ var selector = new SelectCourse();
+ selector.present();
+ Course course = selector.getResult();
+
+ Scanner sc = new Scanner(System.in);
+ // Gets starting hole on course
+ int startHoleNum = 1;
+ int holeCount = course.getHoleCount();
+ // Asks for a hole number until a valid number is selected
+ System.out.print("Starting hole (1.." + holeCount + ", blank=1): ");
+ String s = sc.nextLine().trim();
+ if (!s.isEmpty()) {
+ int start;
+ try {
+ start = Integer.parseInt(s);
+ } catch (NumberFormatException ex) {
+ System.out.println("Input must be a number");
+ return createRound();
+ }
+ if (start < 1 || start > holeCount) {
+ System.out.println("Starting hole must be between 1 and " + holeCount + ".");
+ return createRound();
+ }
+ startHoleNum = start;
+ }
+ // Starts round and sends user to HolePlayMenu
+ Hole startHole = course.getHoles().get(startHoleNum - 1);
+ Round r = new Round(course, LocalDateTime.now(), startHole);
+ golfer.addRound(r);
+ return r;
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java
index 05c3518..7522ceb 100644
--- a/src/main/java/design/controller/userinput/menus/MainMenu.java
+++ b/src/main/java/design/controller/userinput/menus/MainMenu.java
@@ -14,12 +14,12 @@ public class MainMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
return List.of(
- new MenuOption("quit", () -> {}),
+ new MenuOption("quit", () -> System.exit(0)),
new MenuOption("user settings...", () -> new UserSettings().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("log round...", () -> new HolePlayMenu().present())
);
}
}
diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java
index 6786553..f05fcee 100644
--- a/src/main/java/design/controller/userinput/menus/ManageClubs.java
+++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java
@@ -34,7 +34,7 @@ public class ManageClubs extends Menu {
}));
opts.add(new MenuOption("remove club...", () -> {
- var selector = new SelectClub(golfer);
+ var selector = new SelectClub();
selector.present();
golfer.removeClub(selector.getResult());
this.present();
diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java
index dff48dc..a0d7b61 100644
--- a/src/main/java/design/controller/userinput/menus/ManageCourses.java
+++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java
@@ -29,7 +29,7 @@ public class ManageCourses extends Menu {
}));
opts.add(new MenuOption("remove course...", () -> {
- var selector = new SelectCourse(golfer);
+ var selector = new SelectCourse();
selector.present();
golfer.removeCourse(selector.getResult());
this.present();
diff --git a/src/main/java/design/controller/userinput/menus/SelectClub.java b/src/main/java/design/controller/userinput/menus/SelectClub.java
index 09facdb..f2f36ed 100644
--- a/src/main/java/design/controller/userinput/menus/SelectClub.java
+++ b/src/main/java/design/controller/userinput/menus/SelectClub.java
@@ -4,24 +4,23 @@ import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
import design.model.Club;
import design.model.Golfer;
+import design.runtime.Session;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
public class SelectClub extends Menu {
- private final Golfer golfer;
+ private final Golfer golfer = Session.getCurrentGolfer();
private Club result;
- public SelectClub(Golfer golfer) {
- this.golfer = golfer;
- }
-
@Override
public String getTitle() {
return "select club";
}
public Club getResult() {
+ Objects.requireNonNull(result);
return result;
}
@@ -31,4 +30,15 @@ public class SelectClub extends Menu {
.map(g -> new MenuOption(g.toString(), () -> result = g))
.toList();
}
+
+ @Override
+ public void present() {
+ if (!golfer.hasClubs()) {
+ System.out.println("You don't have any clubs yet. Add one first.");
+ new MainMenu().present();
+ return;
+ }
+
+ super.present();
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/SelectCourse.java b/src/main/java/design/controller/userinput/menus/SelectCourse.java
index 811586f..efbdef5 100644
--- a/src/main/java/design/controller/userinput/menus/SelectCourse.java
+++ b/src/main/java/design/controller/userinput/menus/SelectCourse.java
@@ -4,24 +4,23 @@ 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.Arrays;
import java.util.List;
+import java.util.Objects;
public class SelectCourse extends Menu {
- private final Golfer golfer;
+ private final Golfer golfer = Session.getCurrentGolfer();
private Course result;
- public SelectCourse(Golfer golfer) {
- this.golfer = golfer;
- }
-
@Override
public String getTitle() {
return "select course";
}
public Course getResult() {
+ Objects.requireNonNull(result);
return result;
}
@@ -31,4 +30,17 @@ public class SelectCourse extends Menu {
.map(c -> new MenuOption(c.toString(), () -> result = c))
.toList();
}
+
+ @Override
+ public void present() {
+ // Checks user has courses of not informs them to add one to their profile
+ if (!golfer.hasCourses()) {
+ 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;
+ }
+
+ super.present();
+ }
}
diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java
index 646124d..e8b3874 100644
--- a/src/main/java/design/controller/userinput/menus/SelectUser.java
+++ b/src/main/java/design/controller/userinput/menus/SelectUser.java
@@ -31,8 +31,7 @@ public class SelectUser extends Menu {
var opts = new ArrayList<MenuOption>();
for (Golfer i : personalDB.getGolfers()) {
- MenuOption menuOption = new MenuOption(i.toString(), () -> login(i));
- opts.add(menuOption);
+ opts.add(new MenuOption(i.toString(), () -> login(i)));
}
opts.add(new MenuOption("<create>", () -> {
diff --git a/src/main/java/design/model/Golfer.java b/src/main/java/design/model/Golfer.java
index 768c63c..774bb78 100644
--- a/src/main/java/design/model/Golfer.java
+++ b/src/main/java/design/model/Golfer.java
@@ -72,6 +72,10 @@ public class Golfer {
courses.remove(course);
}
+ public boolean hasCourses() {
+ return !courses.isEmpty();
+ }
+
public Round[] getRounds() {
return rounds.toArray(Round[]::new);
}