
be.looorent.jflu.EventSerializer Maven / Gradle / Ivy
The newest version!
package be.looorent.jflu;
import be.looorent.jflu.entity.EntityData;
import be.looorent.jflu.manual.ManualData;
import be.looorent.jflu.request.RequestData;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonStreamContext;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Optional;
import static be.looorent.jflu.EventKind.MANUAL;
import static be.looorent.jflu.TimestampConverter.convertToLocalDateTime;
import static java.util.Optional.of;
public class EventSerializer {
public static class TimestampDeserializer extends JsonDeserializer {
@Override
public LocalDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException {
Optional date = convertToLocalDateTime(parser.getValueAsString());
return date.isPresent() ? date.get() : parser.readValueAs(LocalDateTime.class);
}
}
public static class EventDataDeserializer extends JsonDeserializer {
@Override
public EventData deserialize(JsonParser parser, DeserializationContext context) throws IOException {
EventKind kind = of(parser.getParsingContext())
.map(JsonStreamContext::getParent)
.map(JsonStreamContext::getCurrentValue)
.map(EventMetadata.class::cast)
.map(EventMetadata::getKind)
.orElse(MANUAL);
switch (kind) {
case ENTITY_CHANGE:
return parser.readValueAs(EntityData.class);
case REQUEST:
return parser.readValueAs(RequestData.class);
case MANUAL:
default:
return parser.readValueAs(ManualData.class);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy