summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller
diff options
context:
space:
mode:
authorMichael Lizzio <mjl2396@rit.edu>2025-11-10 15:13:27 -0500
committerMichael Lizzio <mjl2396@rit.edu>2025-11-10 15:13:27 -0500
commit4e45988ddff84205d2c5c81466ae86f57b25de17 (patch)
treede6a499d4acf9c4f29bcc74d952a40204b17c7ee /src/main/java/design/controller
parenta29285b3aaf19becc74ef5b2755052aed8782a57 (diff)
downloaddesignproject-design-6-4e45988ddff84205d2c5c81466ae86f57b25de17.tar.gz
designproject-design-6-4e45988ddff84205d2c5c81466ae86f57b25de17.tar.bz2
designproject-design-6-4e45988ddff84205d2c5c81466ae86f57b25de17.zip
Used UndoManager in Menus to Capture Sanpshots
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSearch.java8
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java13
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java25
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageClubs.java9
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageCourses.java7
-rw-r--r--src/main/java/design/controller/userinput/menus/UserSettings.java6
6 files changed, 60 insertions, 8 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSearch.java b/src/main/java/design/controller/userinput/menus/CourseSearch.java
index b84247a..4dd2cad 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSearch.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSearch.java
@@ -9,6 +9,7 @@ import design.model.course_search.CurrentSearchQuery;
import design.model.course_search.ICourse;
import design.persistence.PersonalDatabase;
import design.runtime.Session;
+import design.model.undo.UndoManager;
import java.io.IOException;
import java.util.ArrayList;
@@ -71,7 +72,7 @@ public class CourseSearch extends Menu {
}
// recursively go through tree structure of courselist to make menu options.
- // this is all for displaying the menu options, not the actual sorting.
+ // this is all for displaying the menu options, not the actual sorting.
private void addCoursesRecursive(List<MenuOption> menuOptions, CourseList list) {
for (ICourse icourse : list.getCourses()) {
// if we find a leaf (course), display it as a menu option
@@ -79,6 +80,8 @@ public class CourseSearch extends Menu {
var name = String.format("%s, %s, Difficulty: %s, %s holes, %s total par",
c.getName(), c.getLocation(), c.getDifficultyRating(), c.getHoleCount(), c.getTotalPar());
menuOptions.add(new MenuOption(name, () -> {
+ UndoManager.instance().capture(golfer, "Add course " + c.getName());
+
// add the course, try to save to DB.
golfer.addCourse(c);
try {
@@ -89,8 +92,7 @@ public class CourseSearch extends Menu {
System.out.println("\n Course added to profile. \n");
new MainMenu().present();
- }
- ));
+ }));
}
// if not, we need to traverse another courselist
else if (icourse instanceof CourseList sublist) {
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
index e0d1572..2a7fc5d 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -3,12 +3,14 @@ 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.runtime.Session;
import design.model.Club;
import design.model.Round;
import design.model.holeplay.HolePlayContext;
import design.persistence.PersonalDatabase;
+import design.model.undo.UndoManager;
import java.util.ArrayList;
import java.util.List;
@@ -18,10 +20,11 @@ public class HolePlayMenu extends Menu {
private final Round round;
private final HolePlayContext ctx;
+ private final Golfer golfer = Session.getCurrentGolfer();
public HolePlayMenu() {
this.round = createRound();
- this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.instance());
+ this.ctx = new HolePlayContext(this.golfer, round, PersonalDatabase.instance());
}
@Override
@@ -60,6 +63,8 @@ public class HolePlayMenu extends Menu {
dist = Integer.parseInt(ds);
}
+ UndoManager.instance().capture(ctx, "Shot with " + club.getNickname() + " for " + dist + " yds");
+
// Records shot
ctx.recordShot(club, dist);
System.out.println("Shot recorded: " + dist + " yds with " + club.getNickname());
@@ -71,6 +76,9 @@ public class HolePlayMenu extends Menu {
opts.add(new MenuOption("hole out", () -> {
// Precedes to next hole
int prev = round.getCurrentHole().getNumber();
+
+ UndoManager.instance().capture(golfer, "Hole out on " + prev + " at " + round.getCourse().getName());
+
ctx.holeOut();
System.out.println("Holed out on " + prev + ". Next: " + round.getCurrentHole().getNumber());
this.present();
@@ -79,6 +87,7 @@ public class HolePlayMenu extends Menu {
// End round (always shown)
opts.add(new MenuOption("end round", () -> {
+ UndoManager.instance().capture(golfer, "End round on " + round.getCourse().getName());
ctx.endRoundNow();
System.out.println("Round ended.");
new MainMenu().present();
@@ -118,6 +127,8 @@ public class HolePlayMenu extends Menu {
// Starts round and sends user to HolePlayMenu
Hole startHole = course.getHoles().get(startHoleNum - 1);
Round r = new Round(course, Session.getDateTime(), startHole);
+ // Undo puts golfer back to before round existed.
+ UndoManager.instance().capture(golfer, "Start round on " + course.getName() + " (hole " + startHoleNum + ")");
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 7522ceb..07caffa 100644
--- a/src/main/java/design/controller/userinput/menus/MainMenu.java
+++ b/src/main/java/design/controller/userinput/menus/MainMenu.java
@@ -2,6 +2,7 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
+import design.model.undo.UndoManager;
import java.util.List;
@@ -13,13 +14,33 @@ public class MainMenu extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
+
+ UndoManager um = UndoManager.instance();
+
return List.of(
new MenuOption("quit", () -> System.exit(0)),
+ new MenuOption("undo", () -> {
+ if (!um.canUndo()) {
+ System.out.println("Nothing to undo.");
+ } else {
+ System.out.println("Undo: " + um.peekUndoLabel());
+ um.undo();
+ }
+ this.present();
+ }),
+ new MenuOption("redo", () -> {
+ if (!um.canRedo()) {
+ System.out.println("Nothing to redo.");
+ } else {
+ System.out.println("Redo: " + um.peekRedoLabel());
+ um.redo();
+ }
+ this.present();
+ }),
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 HolePlayMenu().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 27b011c..d186cac 100644
--- a/src/main/java/design/controller/userinput/menus/ManageClubs.java
+++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java
@@ -6,6 +6,7 @@ import design.model.Club;
import design.model.Golfer;
import design.persistence.PersonalDatabase;
import design.runtime.Session;
+import design.model.undo.UndoManager;
import java.io.IOException;
import java.util.Arrays;
@@ -36,7 +37,11 @@ public class ManageClubs extends Menu {
opts.add(new MenuOption("remove club...", () -> {
var selector = new SelectClub();
selector.present();
- golfer.removeClub(selector.getResult());
+ Club toRemove = selector.getResult();
+
+ UndoManager.instance().capture(golfer, "Remove club " + toRemove);
+
+ golfer.removeClub(toRemove);
try {
personalDB.updateGolfer(golfer);
} catch (IOException ex) {
@@ -46,6 +51,8 @@ public class ManageClubs extends Menu {
}));
opts.add(new MenuOption("add club...", () -> {
+ UndoManager.instance().capture(golfer, "Add club");
+
Scanner sc = new Scanner(System.in);
System.out.print("Manufacturer: ");
diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java
index b592cd2..4f3efe5 100644
--- a/src/main/java/design/controller/userinput/menus/ManageCourses.java
+++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java
@@ -6,6 +6,7 @@ import design.model.Course;
import design.model.Golfer;
import design.persistence.PersonalDatabase;
import design.runtime.Session;
+import design.model.undo.UndoManager;
import java.io.IOException;
import java.util.List;
@@ -34,7 +35,11 @@ public class ManageCourses extends Menu {
opts.add(new MenuOption("remove course...", () -> {
var selector = new SelectCourse();
selector.present();
- golfer.removeCourse(selector.getResult());
+ Course course = selector.getResult();
+
+ UndoManager.instance().capture(golfer, "Remove course " + course.getName());
+
+ golfer.removeCourse(course);
try {
personalDB.updateGolfer(golfer);
} catch (IOException ex) {
diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java
index 47b0a5b..36d8d70 100644
--- a/src/main/java/design/controller/userinput/menus/UserSettings.java
+++ b/src/main/java/design/controller/userinput/menus/UserSettings.java
@@ -12,6 +12,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
+import design.model.undo.UndoManager;
+
public class UserSettings extends Menu {
private final Golfer golfer = Session.getCurrentGolfer();
@@ -35,6 +37,8 @@ public class UserSettings extends Menu {
}));
opts.add(new MenuOption("set password...", () -> {
+ UndoManager.instance().capture(golfer, "Change password for @" + golfer.getUsername());
+
System.out.print("Enter password: ");
var password = scanner.nextLine();
@@ -48,6 +52,8 @@ public class UserSettings extends Menu {
}));
opts.add(new MenuOption("set full name...", () -> {
+ UndoManager.instance().capture(golfer, "Change full name for @" + golfer.getUsername());
+
System.out.print("Enter full name: ");
var fullName = scanner.nextLine();