Skip to content

Package: OffsetDateTimeDeserializer

OffsetDateTimeDeserializer

nameinstructionbranchcomplexitylinemethod
OffsetDateTimeDeserializer()
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
configure(Configuration)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
deserialize(Map, DeserializationContext)
M: 0 C: 25
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getLiteralValue(Map)
M: 0 C: 26
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%

Coverage

1: package cz.cvut.kbss.jsonld.deserialization.datetime;
2:
3: import cz.cvut.kbss.jsonld.Configuration;
4: import cz.cvut.kbss.jsonld.JsonLd;
5: import cz.cvut.kbss.jsonld.deserialization.DeserializationContext;
6: import cz.cvut.kbss.jsonld.deserialization.ValueDeserializer;
7: import cz.cvut.kbss.jsonld.exception.JsonLdDeserializationException;
8:
9: import java.time.OffsetDateTime;
10: import java.util.Map;
11:
12: /**
13: * Deserializes values to {@link OffsetDateTime}.
14: * <p>
15: * If the value is a number, it is taken as the number of milliseconds since the Unix Epoch. Otherwise, it is parsed as a
16: * string.
17: * <p>
18: * If a datetime pattern is configured ({@link cz.cvut.kbss.jsonld.ConfigParam#DATE_TIME_FORMAT}), it is used to parse
19: * the value. Otherwise, the default ISO-based pattern is used.
20: */
21: public class OffsetDateTimeDeserializer implements ValueDeserializer<OffsetDateTime> {
22:
23: private final StringBasedDateTimeResolver stringResolver = new StringBasedDateTimeResolver();
24:
25: private final EpochBasedDateTimeResolver epochResolver = new EpochBasedDateTimeResolver();
26:
27: @Override
28: public OffsetDateTime deserialize(Map<?, ?> jsonNode, DeserializationContext<OffsetDateTime> ctx) {
29: final Object value = getLiteralValue(jsonNode);
30: try {
31:• return value instanceof Long ? epochResolver.resolve((Long) value) :
32: stringResolver.resolve(value.toString());
33: } catch (RuntimeException e) {
34: throw new JsonLdDeserializationException("Unable to deserialize datetime value.", e);
35: }
36: }
37:
38: static Object getLiteralValue(Map<?, ?> jsonNode) {
39: final Object value = jsonNode.get(JsonLd.VALUE);
40:• if (value == null) {
41: throw new JsonLdDeserializationException("Cannot deserialize node " + jsonNode + "as literal. " +
42: "It is missing attribute '" + JsonLd.VALUE + "'.");
43: }
44: return value;
45: }
46:
47: @Override
48: public void configure(Configuration config) {
49: stringResolver.configure(config);
50: }
51: }