diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2025-10-11 23:49:49 -0400 |
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2025-10-11 23:49:49 -0400 |
| commit | df8adcc59fad860445527c8a4da820a73036b542 (patch) | |
| tree | 22a91b9a5301d8503719a2956eb49a3490da303d /src/main/java/design | |
| parent | fac7fb71260b901a893b5b90aae23e86d6c23550 (diff) | |
| download | designproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.tar.gz designproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.tar.bz2 designproject-design-6-df8adcc59fad860445527c8a4da820a73036b542.zip | |
Menu cleanup - pass 3
Diffstat (limited to 'src/main/java/design')
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); } |
