diff options
| author | jrshi <jrs9538@g.rit.edu> | 2025-11-16 16:02:38 -0500 |
|---|---|---|
| committer | jrshi <jrs9538@g.rit.edu> | 2025-11-16 16:02:38 -0500 |
| commit | 0b43e258054b450f5007ef4d4fa34dacba2d8a9c (patch) | |
| tree | af8f64e4bdb6074fe2fb34c993850b6d81ce61de /src/main/java/design/persistence/JSONLeagueDatabase.java | |
| parent | 343d0baaaf718bfc9959484d187c4df1e171335e (diff) | |
| parent | af9f559a2ee427905c39363643bac2e7878fb10c (diff) | |
| download | designproject-design-6-league-play-refactoring.tar.gz designproject-design-6-league-play-refactoring.tar.bz2 designproject-design-6-league-play-refactoring.zip | |
Merge branch 'league-play-refactoring' of https://github.com/RIT-SWEN-262/designproject-design-6 into league-play-refactoringleague-play-refactoring
Merging?
Diffstat (limited to '')
| -rw-r--r-- | src/main/java/design/persistence/JSONLeagueDatabase.java | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java index 6f3f2d2..6446b34 100644 --- a/src/main/java/design/persistence/JSONLeagueDatabase.java +++ b/src/main/java/design/persistence/JSONLeagueDatabase.java @@ -1,14 +1,7 @@ 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; import design.model.Course; import design.model.Golfer; import design.model.League; @@ -30,6 +23,12 @@ public class JSONLeagueDatabase implements LeagueDatabase { return INSTANCE; } + // static instance strictly for testing, to not add data to leaguedb.json + static JSONLeagueDatabase testInstance(String filename) { + INSTANCE = new JSONLeagueDatabase(filename); + return INSTANCE; + } + private final Map<Integer, League> cache; private final ObjectMapper mapper; private final File file; @@ -38,20 +37,10 @@ public class JSONLeagueDatabase implements LeagueDatabase { public JSONLeagueDatabase(String filename) { this.file = new File(filename); this.cache = new HashMap<>(); - this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build(); - - SimpleModule module = new SimpleModule(); - module.addDeserializer(Course.class, new Serializers.CourseIdDeserializer()); - 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); - mapper.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES)); - mapper.registerModule(new JavaTimeModule()); + this.mapper = new ObjectMapper(); + + Serializers.configureMapper(mapper); + mapper.registerModule(this.getJacksonModule()); try { load(); @@ -101,4 +90,35 @@ public class JSONLeagueDatabase implements LeagueDatabase { cache.put(league.getId(), league); save(); } + + @Override + public void importData(Object rawData) throws IOException { + if (!(rawData instanceof League[] data)) { + throw new ClassCastException(); + } + cache.clear(); + for (League league : data) { + cache.put(league.getId(), league); + } + save(); + } + + @Override + public League[] exportData() { + return getLeagues(); + } + + @Override + public SimpleModule getJacksonModule() { + return new SimpleModule() + .addSerializer(Course.class, new Serializers.CourseIdSerializer()) + .addDeserializer(Course.class, new Serializers.CourseIdDeserializer()) + .addSerializer(Golfer.class, new Serializers.GolferUsernameSerializer()) + .addDeserializer(Golfer.class, new Serializers.GolferUsernameDeserializer()); + } + + @Override + public Class<?> getTargetClass() { + return League[].class; + } } |
