package design.model.holeplay; 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; private int distanceRemainingYds; 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); } // package-private helpers the states use: void beginNewPlay(int holeNumber, int par) { /* create Play, reset counters */ } void addSwing(Club club, Integer distanceYds) { /* add Swing to currentPlay; strokes++; distanceRemainingYds -= distanceYds */ } void finalizePlayAndPersist() { /* round.addPlay(currentPlay); currentPlay=null; pdb.updateGolfer(golfer); */ } // getters you’ll want: public Golfer getGolfer() { return golfer; } public Round getRound() { return round; } public Play getCurrentPlay() { return currentPlay; } public int getStrokes() { return strokes; } public int getDistanceRemainingYds() { return distanceRemainingYds; } // setters used internally void setCurrentPlay(Play p) { this.currentPlay = p; } void setStrokes(int s) { this.strokes = s; } void setDistanceRemainingYds(int d) { this.distanceRemainingYds = d; } }