package design.persistence; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.util.DefaultIndenter; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import design.model.Course; import design.model.Golfer; import design.model.League; import java.io.IOException; import java.time.LocalDateTime; public class Serializers { public static class CustomPrettyPrinter extends DefaultPrettyPrinter { public CustomPrettyPrinter() { super._arrayIndenter = new DefaultIndenter(); super._objectFieldValueSeparatorWithSpaces = _separators.getObjectFieldValueSeparator() + " "; super._arrayEmptySeparator = ""; } @Override public CustomPrettyPrinter createInstance() { return new CustomPrettyPrinter(); } } public static class CourseIdSerializer extends JsonSerializer { @Override public void serialize(Course course, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeNumber(course.getId()); } } public static class CourseIdDeserializer extends JsonDeserializer { @Override public Course deserialize(JsonParser p, DeserializationContext context) throws IOException { MasterDatabase masterDB = MasterDatabase.instance(); int id = p.getValueAsInt(); return masterDB.getCourse(id); } } public static class LeagueIDSerializer extends JsonSerializer { @Override public void serialize(League value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeNumber(value.getId()); } } public static class LeagueIDDeserializer extends JsonDeserializer { @Override public League deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { LeagueDatabase leagueDB = LeagueDatabase.instance(); int id = p.getValueAsInt(); return leagueDB.getLeague(id); } } public static class GolferUsernameSerializer extends JsonSerializer { @Override public void serialize(Golfer course, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(course.getUsername()); } } public static class GolferUsernameDeserializer extends JsonDeserializer { @Override public Golfer deserialize(JsonParser p, DeserializationContext context) throws IOException { PersonalDatabase personalDB = PersonalDatabase.instance(); String username = p.getValueAsString(); return personalDB.getGolfer(username); } } public static class DateTimeStringSerializer extends JsonSerializer { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.toString()); } } }