summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/model/Golfer.java51
-rw-r--r--src/main/java/design/model/holeplay/HolePlayContext.java17
2 files changed, 66 insertions, 2 deletions
diff --git a/src/main/java/design/model/Golfer.java b/src/main/java/design/model/Golfer.java
index 48daae8..0f4c914 100644
--- a/src/main/java/design/model/Golfer.java
+++ b/src/main/java/design/model/Golfer.java
@@ -6,8 +6,11 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.util.ArrayList;
import java.util.List;
+import design.model.undo.Memento;
+import design.model.undo.Originator;
+
@JsonPropertyOrder({ "clubs", "nextClubId" })
-public class Golfer {
+public class Golfer implements Originator {
private String username;
private int passwordHash;
private String fullName;
@@ -112,4 +115,50 @@ public class Golfer {
public void removeClub(Club c) {
clubs.remove(c);
}
+
+ // Takes a snapshot of the golfer
+ private static class GolferMemento implements Memento {
+ private final String username;
+ private final int passwordHash;
+ private final String fullName;
+ private final List<Course> courses;
+ private final List<Round> rounds;
+ private final List<Club> clubs;
+ private final int nextClubId;
+
+ GolferMemento(Golfer g) {
+ this.username = g.username;
+ this.passwordHash = g.passwordHash;
+ this.fullName = g.fullName;
+ this.courses = new ArrayList<>(g.courses);
+ this.rounds = new ArrayList<>(g.rounds);
+ this.clubs = new ArrayList<>(g.clubs);
+ this.nextClubId = g.nextClubId;
+ }
+ }
+
+ @Override
+ public Memento createMemento() {
+ return new GolferMemento(this);
+ }
+
+ @Override
+ public void restore(Memento memento) {
+ GolferMemento gm = (GolferMemento) memento;
+
+ this.username = gm.username;
+ this.passwordHash = gm.passwordHash;
+ this.fullName = gm.fullName;
+
+ this.courses.clear();
+ this.courses.addAll(gm.courses);
+
+ this.rounds.clear();
+ this.rounds.addAll(gm.rounds);
+
+ this.clubs.clear();
+ this.clubs.addAll(gm.clubs);
+
+ this.nextClubId = gm.nextClubId;
+ }
}
diff --git a/src/main/java/design/model/holeplay/HolePlayContext.java b/src/main/java/design/model/holeplay/HolePlayContext.java
index 7a5d8ef..16201b6 100644
--- a/src/main/java/design/model/holeplay/HolePlayContext.java
+++ b/src/main/java/design/model/holeplay/HolePlayContext.java
@@ -6,7 +6,10 @@ import java.util.ArrayList;
import design.model.*;
import design.persistence.PersonalDatabase;
-public class HolePlayContext {
+import design.model.undo.Memento;
+import design.model.undo.Originator;
+
+public class HolePlayContext implements Originator {
private final Golfer golfer;
private final Round round;
private final PersonalDatabase pdb;
@@ -109,4 +112,16 @@ public class HolePlayContext {
void setStrokes(int s) {
this.strokes = s;
}
+
+ @Override
+ public Memento createMemento() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'createMemento'");
+ }
+
+ @Override
+ public void restore(Memento memento) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'restore'");
+ }
} \ No newline at end of file