From 5f1ea0ee335a73edf53939b87218a34e93fe4de9 Mon Sep 17 00:00:00 2001 From: sowgro Date: Thu, 9 Oct 2025 21:03:25 -0400 Subject: Menu cleanup - pass 1 --- .../controller/userinput/menus/ManageClubs.java | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/main/java/design/controller/userinput/menus/ManageClubs.java (limited to 'src/main/java/design/controller/userinput/menus/ManageClubs.java') diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java new file mode 100644 index 0000000..56d645f --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java @@ -0,0 +1,105 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.model.Club; +import design.model.Golfer; +import design.persistence.PersonalDatabase; +import design.runtime.Session; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class ManageClubs extends Menu { + Golfer golfer = Session.getCurrentGolfer(); + + @Override + public String getTitle() { + return "manage clubs"; + } + + @Override + public List getMenuOptions() { + List opts = new java.util.ArrayList<>(); + opts.add(new MenuOption("return to main menu", () -> new MainMenu().present())); + + 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 getMenuOptions() { + List 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; + } + + Scanner sc = new Scanner(System.in); + + System.out.print("Manufacturer: "); + String manufacture = sc.nextLine().trim(); + + 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]; + } + + golfer.addClub(manufacture, nickname, type); + + // Add club to JSON + try { + 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(); + }));// Pick type +// Add club to JSON + return opts; + } +} -- cgit v1.2.3 From fac7fb71260b901a893b5b90aae23e86d6c23550 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 11 Oct 2025 22:24:54 -0400 Subject: Menu cleanup - pass 2 --- .../controller/userinput/menus/ManageClubs.java | 83 +++++++++------------- 1 file changed, 34 insertions(+), 49 deletions(-) (limited to 'src/main/java/design/controller/userinput/menus/ManageClubs.java') 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 getMenuOptions() { - List 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 getMenuOptions() { + return Arrays.stream(Club.ClubType.values()) + .map(t -> new MenuOption(t.name(), () -> result = t)) + .toList(); + } + } } -- cgit v1.2.3 From df8adcc59fad860445527c8a4da820a73036b542 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 11 Oct 2025 23:49:49 -0400 Subject: Menu cleanup - pass 3 --- src/main/java/design/controller/userinput/menus/ManageClubs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/design/controller/userinput/menus/ManageClubs.java') 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(); -- cgit v1.2.3 From 8d37a242acf4026c097f44c2383a7c746cff6393 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sun, 12 Oct 2025 00:55:11 -0400 Subject: fix club serialization and saving of some options --- src/main/java/design/controller/userinput/menus/ManageClubs.java | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/main/java/design/controller/userinput/menus/ManageClubs.java') diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java index f05fcee..6290444 100644 --- a/src/main/java/design/controller/userinput/menus/ManageClubs.java +++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java @@ -37,6 +37,11 @@ public class ManageClubs extends Menu { var selector = new SelectClub(); selector.present(); golfer.removeClub(selector.getResult()); + try { + personalDB.updateGolfer(golfer); + } catch (IOException ex) { + System.out.println("Failed to update golfer."); + } this.present(); })); -- cgit v1.2.3