Skip to contentMethod: getDeserializer(DeserializationContext)
1: /*
2: * JB4JSON-LD
3: * Copyright (C) 2024 Czech Technical University in Prague
4: *
5: * This library is free software; you can redistribute it and/or
6: * modify it under the terms of the GNU Lesser General Public
7: * License as published by the Free Software Foundation; either
8: * version 3.0 of the License, or (at your option) any later version.
9: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library.
17: */
18: package cz.cvut.kbss.jsonld.deserialization;
19:
20: import cz.cvut.kbss.jsonld.Configuration;
21: import cz.cvut.kbss.jsonld.deserialization.datetime.*;
22:
23: import java.time.*;
24: import java.util.*;
25:
26: /**
27: * Manages deserializers for one deserialization process.
28: */
29: public class CommonValueDeserializers implements ValueDeserializers {
30:
31: private final Map<Class<?>, ValueDeserializer<?>> deserializers = new HashMap<>();
32:
33: public CommonValueDeserializers() {
34: initBuiltInDeserializers();
35: }
36:
37: private void initBuiltInDeserializers() {
38: final OffsetDateTimeDeserializer coreDatetimeDeserializer = new OffsetDateTimeDeserializer();
39: final OffsetTimeDeserializer coreTimeDeserializer = new OffsetTimeDeserializer();
40: deserializers.put(OffsetDateTime.class, coreDatetimeDeserializer);
41: deserializers.put(LocalDateTime.class, new LocalDateTimeDeserializer(coreDatetimeDeserializer));
42: deserializers.put(ZonedDateTime.class, new ZonedDateTimeDeserializer(coreDatetimeDeserializer));
43: deserializers.put(Date.class, new DateDeserializer(coreDatetimeDeserializer));
44: deserializers.put(Instant.class, new InstantDeserializer(coreDatetimeDeserializer));
45: deserializers.put(OffsetTime.class, coreTimeDeserializer);
46: deserializers.put(LocalTime.class, new LocalTimeDeserializer(coreTimeDeserializer));
47: deserializers.put(LocalDate.class, new LocalDateDeserializer());
48: deserializers.put(Duration.class, new DurationDeserializer());
49: deserializers.put(Period.class, new PeriodDeserializer());
50: }
51:
52: @Override
53: public <T> boolean hasCustomDeserializer(Class<T> type) {
54: return deserializers.containsKey(type);
55: }
56:
57: @Override
58: public <T> Optional<ValueDeserializer<T>> getDeserializer(DeserializationContext<T> ctx) {
59: Objects.requireNonNull(ctx);
60: return Optional.ofNullable((ValueDeserializer<T>) deserializers.get(ctx.getTargetType()));
61: }
62:
63: @Override
64: public <T> void registerDeserializer(Class<T> forType, ValueDeserializer<T> deserializer) {
65: Objects.requireNonNull(forType);
66: Objects.requireNonNull(deserializer);
67: deserializers.put(forType, deserializer);
68: }
69:
70: @Override
71: public void configure(Configuration configuration) {
72: deserializers.values().forEach(dsr -> dsr.configure(configuration));
73: }
74: }