summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-11-14 17:05:51 -0500
committersowgro <tpoke.ferrari@gmail.com>2025-11-14 17:05:51 -0500
commit5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847 (patch)
treef3b6aeb7bce03e3138c012df5951550630051f78 /src
parentf79ab927050250c4b7e63a4fbd37034d4eeae8cd (diff)
downloaddesignproject-design-6-5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847.tar.gz
designproject-design-6-5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847.tar.bz2
designproject-design-6-5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847.zip
more robust map serializer should be working
Diffstat (limited to '')
-rw-r--r--src/main/java/design/persistence/JSONLeagueDatabase.java2
-rw-r--r--src/main/java/design/persistence/JSONPersonalDatabase.java4
-rw-r--r--src/main/java/design/persistence/Serializers.java19
3 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java
index 8a55065..6f3f2d2 100644
--- a/src/main/java/design/persistence/JSONLeagueDatabase.java
+++ b/src/main/java/design/persistence/JSONLeagueDatabase.java
@@ -45,6 +45,8 @@ public class JSONLeagueDatabase implements LeagueDatabase {
module.addSerializer(Course.class, new Serializers.CourseIdSerializer());
module.addDeserializer(Golfer.class, new Serializers.GolferUsernameDeserializer());
module.addSerializer(Golfer.class, new Serializers.GolferUsernameSerializer());
+ module.addSerializer(Map.class, new Serializers.MapListSerializer());
+ module.addDeserializer(Map.class, new Serializers.MapListDeserializer());
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(module);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java
index 30c280a..a2908f3 100644
--- a/src/main/java/design/persistence/JSONPersonalDatabase.java
+++ b/src/main/java/design/persistence/JSONPersonalDatabase.java
@@ -36,7 +36,7 @@ public class JSONPersonalDatabase implements PersonalDatabase {
private JSONPersonalDatabase(String filename) {
this.file = new File(filename);
this.cache = new HashMap<>();
- this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build();;
+ 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
@@ -47,6 +47,8 @@ public class JSONPersonalDatabase implements PersonalDatabase {
module.addSerializer(Course.class, new Serializers.CourseIdSerializer());
module.addSerializer(League.class, new Serializers.LeagueIDSerializer());
module.addDeserializer(League.class, new Serializers.LeagueIDDeserializer());
+ module.addSerializer(Map.class, new Serializers.MapListSerializer());
+ module.addDeserializer(Map.class, new Serializers.MapListDeserializer());
mapper.registerModule(module);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
mapper.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES));
diff --git a/src/main/java/design/persistence/Serializers.java b/src/main/java/design/persistence/Serializers.java
index 3940b44..d00dcbf 100644
--- a/src/main/java/design/persistence/Serializers.java
+++ b/src/main/java/design/persistence/Serializers.java
@@ -13,6 +13,7 @@ import design.model.Golfer;
import design.model.League;
import java.io.IOException;
+import java.util.Map;
public class Serializers {
public static class CustomPrettyPrinter extends DefaultPrettyPrinter {
@@ -76,4 +77,22 @@ public class Serializers {
return personalDB.getGolfer(username);
}
}
+
+ @SuppressWarnings("rawtypes")
+ public static class MapListSerializer extends JsonSerializer<Map> {
+
+ @Override
+ public void serialize(Map value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ gen.writeObject(value.entrySet());
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ public static class MapListDeserializer extends JsonDeserializer<Map> {
+
+ @Override
+ public Map deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ return Map.ofEntries(p.readValueAs(Map.Entry[].class));
+ }
+ }
}