diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2025-11-12 12:55:12 -0500 |
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2025-11-12 12:55:12 -0500 |
| commit | 9a0949d31a7a0e8c9c311b07e92852cff867cc66 (patch) | |
| tree | cbe0e76677152ba1d2a4959dc61c8c873cd3d4c3 /src/main | |
| parent | a0b662eccc6422348a1016dc71b8262eeeeee78f (diff) | |
| download | designproject-design-6-9a0949d31a7a0e8c9c311b07e92852cff867cc66.tar.gz designproject-design-6-9a0949d31a7a0e8c9c311b07e92852cff867cc66.tar.bz2 designproject-design-6-9a0949d31a7a0e8c9c311b07e92852cff867cc66.zip | |
Fix some serialization stuff
Diffstat (limited to '')
| -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 |
5 files changed, 35 insertions, 6 deletions
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 |
