From 204654ad4a69677e9f38308344760ddb33316758 Mon Sep 17 00:00:00 2001 From: Michael Lizzio Date: Sun, 5 Oct 2025 15:14:03 -0400 Subject: Added sessions to keep track of current golfer throughout ui --- .../java/design/controller/userinput/Session.java | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/design/controller/userinput/Session.java (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/Session.java b/src/main/java/design/controller/userinput/Session.java new file mode 100644 index 0000000..4de1614 --- /dev/null +++ b/src/main/java/design/controller/userinput/Session.java @@ -0,0 +1,24 @@ +package design.controller.userinput; + +import design.model.Golfer; +import design.persistence.MasterDatabase; +import design.persistence.PersonalDatabase; + +public final class Session { + private Session() { + } + + public static final PersonalDatabase PDB = PersonalDatabase.INSTANCE; + public static final MasterDatabase MDB = MasterDatabase.INSTANCE; + + private static Golfer currentGolfer; + + public static Golfer getCurrentGolfer() { + return currentGolfer; + } + + public static void setCurrentGolfer(Golfer currentGolfer) { + Session.currentGolfer = currentGolfer; + } + +} -- cgit v1.2.3 From 042c456a542a60262e71f694fa21e0dfcfc25f3a Mon Sep 17 00:00:00 2001 From: Michael Lizzio Date: Sun, 5 Oct 2025 16:42:54 -0400 Subject: Completed HolePlayMenu and basic CourseSelectionMenu, minal updates to other classes --- .../userinput/menus/CourseSelectMenu.java | 50 ++++++++++++ .../controller/userinput/menus/HolePlayMenu.java | 88 ++++++++++++++++++++++ .../controller/userinput/menus/MainMenu.java | 6 +- .../controller/userinput/menus/SelectUser.java | 12 ++- 4 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 src/main/java/design/controller/userinput/menus/CourseSelectMenu.java create mode 100644 src/main/java/design/controller/userinput/menus/HolePlayMenu.java (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java new file mode 100644 index 0000000..cf6f4b1 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java @@ -0,0 +1,50 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.controller.userinput.Session; +import design.model.Course; +import design.model.Hole; +import design.model.Round; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class CourseSelectMenu extends Menu { + + @Override + public String getTitle() { + return "course select"; + } + + @Override + public List getMenuOptions() { + List opts = new ArrayList<>(); + + // 0) pick course by number TODO: add error checking + opts.add(new MenuOption("pick course by number (1..1000)", a -> { + Scanner sc = new Scanner(System.in); + + System.out.print("Course number (1..1000): "); + int n = Integer.parseInt(sc.nextLine().trim()); + Course c = Session.MDB.getCourse(n - 1); + + System.out.print("Starting hole (1..18, blank=1): "); + String s = sc.nextLine().trim(); + int start = s.isEmpty() ? 1 : Integer.parseInt(s); + + Hole startHole = c.getHoles().get(start - 1); + + Round r = new Round(c, LocalDateTime.now(), startHole); + Session.getCurrentGolfer().addRound(r); + new HolePlayMenu(r).present(); + })); + + // 1) back + opts.add(new MenuOption("back to main menu", a -> new MainMenu().present())); + + return opts; + } +} diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java new file mode 100644 index 0000000..63447e2 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java @@ -0,0 +1,88 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.controller.userinput.Session; +import design.model.Club; +import design.model.Round; +import design.model.holeplay.HolePlayContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class HolePlayMenu extends Menu { + + private final Round round; + private final HolePlayContext ctx; + + public HolePlayMenu(Round round) { + this.round = round; + this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, Session.PDB); + } + + @Override + public String getTitle() { + return String.format("hole play - %s | hole %d", round.getCourse().getName(), + round.getCurrentHole().getNumber()); + } + + @Override + public List getMenuOptions() { + List opts = new ArrayList<>(); + + boolean inSetup = (ctx.getCurrentPlay() == null); + + if (inSetup) { + // 0) Start hole + opts.add(new MenuOption("start hole", (a) -> { + ctx.startHole(); + System.out.println("Started hole " + round.getCurrentHole().getNumber() + "."); + this.present(); + })); + } else { + // 0) Take a shot + opts.add(new MenuOption("take a shot", (a) -> { + // Gets club + Scanner sc = new Scanner(System.in); + System.out.print("Club nickname: "); + String nick = sc.nextLine().trim(); + // Defaulted to Driver for now + // TODO update logic + Club club = new Club("Generic", nick, Club.ClubType.DRIVER); + + // Get shot distance (defaults to 0 of not stated) + System.out.print("Distance (yds, blank=0): "); + String ds = sc.nextLine().trim(); + int dist = 0; + if (!ds.isEmpty()) { + dist = Integer.parseInt(ds); + } + + // Records shot + ctx.recordShot(club, dist); + System.out.println("Shot recorded: " + dist + " yds with " + club.getNickname()); + + this.present(); + })); + + // 1) Hole out + opts.add(new MenuOption("hole out", (a) -> { + // Precedes to next hole + int prev = round.getCurrentHole().getNumber(); + ctx.holeOut(); + System.out.println("Holed out on " + prev + ". Next: " + round.getCurrentHole().getNumber()); + this.present(); + })); + } + + // End round (always shown) + opts.add(new MenuOption("end round", (a) -> { + ctx.endRoundNow(); + System.out.println("Round ended."); + new MainMenu().present(); + })); + + return opts; + } +} diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java index fb3cee9..bbf008e 100644 --- a/src/main/java/design/controller/userinput/menus/MainMenu.java +++ b/src/main/java/design/controller/userinput/menus/MainMenu.java @@ -16,8 +16,8 @@ public class MainMenu extends Menu { return List.of( new MenuOption("user settings...", (a) -> new UserSettings().present()), new MenuOption("statistics...", (a) -> new StatisticsMenu().present()), - new MenuOption("log round...", (a) -> {}), - new MenuOption("quit", (a) -> {}) - ); + new MenuOption("log round...", (a) -> new CourseSelectMenu().present()), + new MenuOption("quit", (a) -> { + })); } } diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java index 1963f1d..d93e687 100644 --- a/src/main/java/design/controller/userinput/menus/SelectUser.java +++ b/src/main/java/design/controller/userinput/menus/SelectUser.java @@ -2,6 +2,7 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; +import design.controller.userinput.Session; import design.persistence.PersonalDatabase; import java.util.ArrayList; @@ -19,9 +20,14 @@ public class SelectUser extends Menu { @Override public List getMenuOptions() { var l = new ArrayList(); - l.addAll(Arrays.stream(personalDB.getGolfers()) - .map(i -> new MenuOption(i.getUsername(), (a) -> {})).toList()); - l.add(new MenuOption("", (a) -> {})); + // Sets user in Session too + l.addAll(Arrays.stream(personalDB.getGolfers()).map(i -> new MenuOption(i.getUsername(), (a) -> { + Session.setCurrentGolfer(i); + System.out.printf("Loaded user: %s%n", i.getUsername()); + new UserSettings().present(); + })).toList()); + l.add(new MenuOption("", (a) -> { + })); return l; } } -- cgit v1.2.3 From c9992d357a0df160c8b577c12bd70338627ef2ce Mon Sep 17 00:00:00 2001 From: Michael Lizzio Date: Mon, 6 Oct 2025 16:48:53 -0400 Subject: Updated code basied on feed back --- src/main/java/design/controller/userinput/Session.java | 9 --------- .../design/controller/userinput/menus/CourseSelectMenu.java | 13 ++++++++----- .../design/controller/userinput/menus/HolePlayMenu.java | 3 ++- 3 files changed, 10 insertions(+), 15 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/Session.java b/src/main/java/design/controller/userinput/Session.java index 4de1614..7fbb786 100644 --- a/src/main/java/design/controller/userinput/Session.java +++ b/src/main/java/design/controller/userinput/Session.java @@ -1,16 +1,8 @@ package design.controller.userinput; import design.model.Golfer; -import design.persistence.MasterDatabase; -import design.persistence.PersonalDatabase; public final class Session { - private Session() { - } - - public static final PersonalDatabase PDB = PersonalDatabase.INSTANCE; - public static final MasterDatabase MDB = MasterDatabase.INSTANCE; - private static Golfer currentGolfer; public static Golfer getCurrentGolfer() { @@ -20,5 +12,4 @@ public final class Session { public static void setCurrentGolfer(Golfer currentGolfer) { Session.currentGolfer = currentGolfer; } - } diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java index cf6f4b1..7cef7fc 100644 --- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java +++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java @@ -12,6 +12,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Scanner; +import design.persistence.MasterDatabase; +import design.persistence.PersonalDatabase; + public class CourseSelectMenu extends Menu { @Override @@ -23,13 +26,16 @@ public class CourseSelectMenu extends Menu { public List getMenuOptions() { List opts = new ArrayList<>(); - // 0) pick course by number TODO: add error checking + // 0) back + opts.add(new MenuOption("back to main menu", a -> new MainMenu().present())); + + // 1) pick course by number TODO: add error checking opts.add(new MenuOption("pick course by number (1..1000)", a -> { Scanner sc = new Scanner(System.in); System.out.print("Course number (1..1000): "); int n = Integer.parseInt(sc.nextLine().trim()); - Course c = Session.MDB.getCourse(n - 1); + Course c = MasterDatabase.INSTANCE.getCourse(n - 1); System.out.print("Starting hole (1..18, blank=1): "); String s = sc.nextLine().trim(); @@ -42,9 +48,6 @@ public class CourseSelectMenu extends Menu { new HolePlayMenu(r).present(); })); - // 1) back - opts.add(new MenuOption("back to main menu", a -> new MainMenu().present())); - return opts; } } diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java index 63447e2..782b662 100644 --- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java +++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java @@ -6,6 +6,7 @@ import design.controller.userinput.Session; import design.model.Club; import design.model.Round; import design.model.holeplay.HolePlayContext; +import design.persistence.PersonalDatabase; import java.util.ArrayList; import java.util.List; @@ -18,7 +19,7 @@ public class HolePlayMenu extends Menu { public HolePlayMenu(Round round) { this.round = round; - this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, Session.PDB); + this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.INSTANCE); } @Override -- cgit v1.2.3 From b701fc29ee79dc8ceaaaa94e38154c08c13d9b71 Mon Sep 17 00:00:00 2001 From: Michael Lizzio Date: Mon, 6 Oct 2025 17:22:10 -0400 Subject: Continue skight updates --- src/main/java/design/controller/userinput/menus/MainMenu.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java index bbf008e..c76e61a 100644 --- a/src/main/java/design/controller/userinput/menus/MainMenu.java +++ b/src/main/java/design/controller/userinput/menus/MainMenu.java @@ -17,7 +17,6 @@ public class MainMenu extends Menu { new MenuOption("user settings...", (a) -> new UserSettings().present()), new MenuOption("statistics...", (a) -> new StatisticsMenu().present()), new MenuOption("log round...", (a) -> new CourseSelectMenu().present()), - new MenuOption("quit", (a) -> { - })); + new MenuOption("quit", (a) -> {})); } } -- cgit v1.2.3 From 026a61737b9ad7517f1f82ba49d0fe61afac91ff Mon Sep 17 00:00:00 2001 From: Michael Lizzio Date: Mon, 6 Oct 2025 17:59:49 -0400 Subject: Updated location of Sesion.java --- src/main/java/design/controller/userinput/Session.java | 15 --------------- .../controller/userinput/menus/CourseSelectMenu.java | 3 +-- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 src/main/java/design/controller/userinput/Session.java (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/Session.java b/src/main/java/design/controller/userinput/Session.java deleted file mode 100644 index 7fbb786..0000000 --- a/src/main/java/design/controller/userinput/Session.java +++ /dev/null @@ -1,15 +0,0 @@ -package design.controller.userinput; - -import design.model.Golfer; - -public final class Session { - private static Golfer currentGolfer; - - public static Golfer getCurrentGolfer() { - return currentGolfer; - } - - public static void setCurrentGolfer(Golfer currentGolfer) { - Session.currentGolfer = currentGolfer; - } -} diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java index 7cef7fc..881c393 100644 --- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java +++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java @@ -2,7 +2,6 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; -import design.controller.userinput.Session; import design.model.Course; import design.model.Hole; import design.model.Round; @@ -13,7 +12,7 @@ import java.util.List; import java.util.Scanner; import design.persistence.MasterDatabase; -import design.persistence.PersonalDatabase; +import design.runtime.Session; public class CourseSelectMenu extends Menu { -- cgit v1.2.3 From f142eaeda48822dd595d4c3e07329f462a681aed Mon Sep 17 00:00:00 2001 From: sowgro Date: Mon, 6 Oct 2025 21:56:28 -0400 Subject: update imports --- src/main/java/design/controller/userinput/menus/HolePlayMenu.java | 2 +- src/main/java/design/controller/userinput/menus/SelectUser.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java index 782b662..bcd7560 100644 --- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java +++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java @@ -2,7 +2,7 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; -import design.controller.userinput.Session; +import design.runtime.Session; import design.model.Club; import design.model.Round; import design.model.holeplay.HolePlayContext; diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java index d93e687..2f1a867 100644 --- a/src/main/java/design/controller/userinput/menus/SelectUser.java +++ b/src/main/java/design/controller/userinput/menus/SelectUser.java @@ -2,7 +2,7 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; -import design.controller.userinput.Session; +import design.runtime.Session; import design.persistence.PersonalDatabase; import java.util.ArrayList; -- cgit v1.2.3 From 97561886cb2ebc3f71558edd8d2202aa3a0cb03d Mon Sep 17 00:00:00 2001 From: sowgro Date: Mon, 6 Oct 2025 22:14:01 -0400 Subject: fix really bad error handling --- src/main/java/design/controller/userinput/Menu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/Menu.java b/src/main/java/design/controller/userinput/Menu.java index 7677793..605b640 100644 --- a/src/main/java/design/controller/userinput/Menu.java +++ b/src/main/java/design/controller/userinput/Menu.java @@ -21,7 +21,7 @@ public abstract class Menu { try { int i = Integer.parseInt(split[0]); menuOptions.get(i).onCommand(Arrays.copyOfRange(split, 1, split.length)); - } catch (Exception ex) { + } catch (ArrayIndexOutOfBoundsException ex) { System.err.printf("Invalid option \"%s\"\n", line); present(); } -- cgit v1.2.3