blob: 7a5d8ef6180d47f6128f1b999892f29fc9f217c1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package design.model.holeplay;
import java.io.IOException;
import java.util.ArrayList;
import design.model.*;
import design.persistence.PersonalDatabase;
public class HolePlayContext {
private final Golfer golfer;
private final Round round;
private final PersonalDatabase pdb;
private HoleState state;
private Play currentPlay;
private int strokes;
public HolePlayContext(Golfer golfer, Round round, PersonalDatabase pdb) {
this.golfer = golfer;
this.round = round;
this.pdb = pdb;
setState(new SetupState());
}
public void setState(HoleState next) {
this.state = next;
next.enter(this);
}
// API the PTUI/Commands will call:
public void startHole() {
state.handleStart(this);
}
public void recordShot(Club club, Integer distanceYds) {
state.handleShot(this, club, distanceYds);
}
public void holeOut() {
state.handleHoleOut(this);
}
void beginNewPlay(int holeNumber) {
this.currentPlay = new Play(holeNumber);
this.strokes = 0;
}
void addSwing(Club club, Integer distanceYds) {
// Checks golfer owns club maybe not necessary
// if (golfer.hasClub(club)) {
// throw new IllegalArgumentException("Club not in golfer's bag");
// }
int d = (distanceYds == null ? 0 : distanceYds);
this.currentPlay.addSwing(new Swing(d, club));
this.strokes++;
}
void finalizePlayAndPersist() {
round.addPlay(currentPlay);
round.nextHole();
currentPlay = null;
strokes = 0;
// Not sure if try catch is necessary
try {
pdb.updateGolfer(golfer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void clearInProgressPlay() {
this.setCurrentPlay(null);
this.setStrokes(0);
}
public void endRoundNow() {
try {
pdb.updateGolfer(golfer); // persist whatever’s done so far
} catch (IOException e) {
e.printStackTrace();
}
setState(new SetupState());
}
// getters you’ll want:
public Golfer getGolfer() {
return golfer;
}
public Round getRound() {
return round;
}
public Play getCurrentPlay() {
return currentPlay;
}
public int getStrokes() {
return strokes;
}
// setters used internally
void setCurrentPlay(Play p) {
this.currentPlay = p;
}
void setStrokes(int s) {
this.strokes = s;
}
}
|