Skip to contentMethod: getDeserializer(DeserializationContext)
1: package cz.cvut.kbss.jsonld.deserialization;
2:
3: import cz.cvut.kbss.jsonld.Configuration;
4: import cz.cvut.kbss.jsonld.deserialization.datetime.*;
5:
6: import java.time.*;
7: import java.util.*;
8:
9: /**
10: * Manages deserializers for one deserialization process.
11: */
12: public class CommonValueDeserializers implements ValueDeserializers {
13:
14: private final Map<Class<?>, ValueDeserializer<?>> deserializers = new HashMap<>();
15:
16: public CommonValueDeserializers() {
17: initBuiltInDeserializers();
18: }
19:
20: private void initBuiltInDeserializers() {
21: final OffsetDateTimeDeserializer coreDatetimeDeserializer = new OffsetDateTimeDeserializer();
22: final OffsetTimeDeserializer coreTimeDeserializer = new OffsetTimeDeserializer();
23: deserializers.put(OffsetDateTime.class, coreDatetimeDeserializer);
24: deserializers.put(LocalDateTime.class, new LocalDateTimeDeserializer(coreDatetimeDeserializer));
25: deserializers.put(ZonedDateTime.class, new ZonedDateTimeDeserializer(coreDatetimeDeserializer));
26: deserializers.put(Date.class, new DateDeserializer(coreDatetimeDeserializer));
27: deserializers.put(Instant.class, new InstantDeserializer(coreDatetimeDeserializer));
28: deserializers.put(OffsetTime.class, coreTimeDeserializer);
29: deserializers.put(LocalTime.class, new LocalTimeDeserializer(coreTimeDeserializer));
30: deserializers.put(LocalDate.class, new LocalDateDeserializer());
31: deserializers.put(Duration.class, new DurationDeserializer());
32: deserializers.put(Period.class, new PeriodDeserializer());
33: }
34:
35: @Override
36: public <T> boolean hasCustomDeserializer(Class<T> type) {
37: return deserializers.containsKey(type);
38: }
39:
40: @Override
41: public <T> Optional<ValueDeserializer<T>> getDeserializer(DeserializationContext<T> ctx) {
42: Objects.requireNonNull(ctx);
43: return Optional.ofNullable((ValueDeserializer<T>) deserializers.get(ctx.getTargetType()));
44: }
45:
46: @Override
47: public <T> void registerDeserializer(Class<T> forType, ValueDeserializer<T> deserializer) {
48: Objects.requireNonNull(forType);
49: Objects.requireNonNull(deserializer);
50: deserializers.put(forType, deserializer);
51: }
52:
53: @Override
54: public void configure(Configuration configuration) {
55: deserializers.values().forEach(dsr -> dsr.configure(configuration));
56: }
57: }