diff options
Diffstat (limited to '')
| -rw-r--r-- | data/leaguedb.json | 13 | ||||
| -rw-r--r-- | data/personaldb.json | 21 | ||||
| -rw-r--r-- | src/main/java/design/model/League.java | 19 | ||||
| -rw-r--r-- | src/main/java/design/model/ScrambleLeague.java | 12 | ||||
| -rw-r--r-- | src/main/java/design/model/StrokeLeague.java | 2 | ||||
| -rw-r--r-- | src/main/java/design/persistence/JSONLeagueDatabase.java | 4 | ||||
| -rw-r--r-- | src/main/java/design/persistence/JSONPersonalDatabase.java | 4 |
7 files changed, 64 insertions, 11 deletions
diff --git a/data/leaguedb.json b/data/leaguedb.json new file mode 100644 index 0000000..1c3cef0 --- /dev/null +++ b/data/leaguedb.json @@ -0,0 +1,13 @@ +[ + { + "type": "scramble", + "id": 1, + "name": "l", + "registrationDate": 946702800000, + "startDate": 946702800000, + "endDate": 946702800000, + "owner": "sowgro", + "participants": [], + "schedule": [] + } +]
\ No newline at end of file diff --git a/data/personaldb.json b/data/personaldb.json index 078c1bb..9b9709d 100644 --- a/data/personaldb.json +++ b/data/personaldb.json @@ -82,11 +82,11 @@ ], "currentHoleIndex": 2, "totalSwings": 5, + "totalDistance": 1108.0, "currentHole": { "number": 3, "par": 4 - }, - "totalDistance": 1108.0 + } }, { "course": 1, @@ -118,12 +118,23 @@ ], "currentHoleIndex": 9, "totalSwings": 1, + "totalDistance": 204.0, "currentHole": { "number": 10, "par": 3 - }, - "totalDistance": 204.0 + } } - ] + ], + "invites": [] + }, + { + "clubs": [], + "nextClubId": 1, + "username": "sowgro", + "passwordHash": 389416948, + "fullName": "tyler f", + "courses": [], + "rounds": [], + "invites": [] } ]
\ No newline at end of file diff --git a/src/main/java/design/model/League.java b/src/main/java/design/model/League.java index 6dab033..881e25f 100644 --- a/src/main/java/design/model/League.java +++ b/src/main/java/design/model/League.java @@ -1,11 +1,22 @@ package design.model; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import java.util.ArrayList; import java.util.Date; import java.util.List; +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "type" +) +@JsonSubTypes({ + @JsonSubTypes.Type(value = ScrambleLeague.class, name = "scramble"), + @JsonSubTypes.Type(value = StrokeLeague.class, name = "stroke") +}) public abstract class League { private int id; private final String name; @@ -13,7 +24,7 @@ public abstract class League { private final Date startDate; private final Date endDate; private final Golfer owner; - private List<Match> schedule; + private final List<Match> schedule; @JsonCreator protected League(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner, List<Match> schedule) { @@ -23,7 +34,7 @@ public abstract class League { this.startDate = startDate; this.endDate = endDate; this.owner = owner; - this.schedule = schedule; + this.schedule = schedule != null ? schedule : new ArrayList<>(); } public League(String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) { @@ -60,8 +71,8 @@ public abstract class League { return owner; } - public List<Match> getSchedule() { - return schedule; + public Match[] getSchedule() { + return schedule.toArray(Match[]::new); } public void addMatchToSchedule(Match match) { diff --git a/src/main/java/design/model/ScrambleLeague.java b/src/main/java/design/model/ScrambleLeague.java index 92e7099..d372264 100644 --- a/src/main/java/design/model/ScrambleLeague.java +++ b/src/main/java/design/model/ScrambleLeague.java @@ -1,11 +1,14 @@ package design.model; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; +@JsonTypeName("scramble") public class ScrambleLeague extends League { private final List<Team> participants; @@ -31,4 +34,13 @@ public class ScrambleLeague extends League { public Team[] getParticipants() { return participants.toArray(Team[]::new); } + + public Team locateTeam(Golfer golfer) { + for (Team participant : participants) { + if (List.of(participant.getMembers()).contains(golfer)) { + return participant; + } + } + return null; + } } diff --git a/src/main/java/design/model/StrokeLeague.java b/src/main/java/design/model/StrokeLeague.java index f09cabf..2b787b5 100644 --- a/src/main/java/design/model/StrokeLeague.java +++ b/src/main/java/design/model/StrokeLeague.java @@ -1,11 +1,13 @@ package design.model; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.ArrayList; import java.util.Date; import java.util.List; +@JsonTypeName("stroke") public class StrokeLeague extends League { private final List<Golfer> participants; diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java index 8b201e6..8a55065 100644 --- a/src/main/java/design/persistence/JSONLeagueDatabase.java +++ b/src/main/java/design/persistence/JSONLeagueDatabase.java @@ -3,7 +3,9 @@ package design.persistence; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.StreamReadFeature; import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; @@ -36,7 +38,7 @@ public class JSONLeagueDatabase implements LeagueDatabase { public JSONLeagueDatabase(String filename) { this.file = new File(filename); this.cache = new HashMap<>(); - this.mapper = new ObjectMapper(); + this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build(); SimpleModule module = new SimpleModule(); module.addDeserializer(Course.class, new Serializers.CourseIdDeserializer()); diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java index 0e95437..30c280a 100644 --- a/src/main/java/design/persistence/JSONPersonalDatabase.java +++ b/src/main/java/design/persistence/JSONPersonalDatabase.java @@ -3,7 +3,9 @@ package design.persistence; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.StreamReadFeature; import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; @@ -34,7 +36,7 @@ public class JSONPersonalDatabase implements PersonalDatabase { private JSONPersonalDatabase(String filename) { this.file = new File(filename); this.cache = new HashMap<>(); - this.mapper = new ObjectMapper(); + this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build();; // TODO: Once the saved JSON matches the model, consider removing. // TEMP: tolerate unknown props while the model stabilizes |
