Package: DataTypeTransformer
DataTypeTransformer
name | instruction | branch | complexity | line | method | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DataTypeTransformer() |
|
|
|
|
|
||||||||||||||||||||
initCustomTransformers() |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$0(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$1(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$2(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$3(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$4(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$5(Object) |
|
|
|
|
|
||||||||||||||||||||
lambda$initCustomTransformers$6(Object) |
|
|
|
|
|
||||||||||||||||||||
static {...} |
|
|
|
|
|
||||||||||||||||||||
transformToEnumConstant(Object, Class) |
|
|
|
|
|
||||||||||||||||||||
transformValue(Object, Class) |
|
|
|
|
|
Coverage
1: /**
2: * Copyright (C) 2022 Czech Technical University in Prague
3: * <p>
4: * This program is free software: you can redistribute it and/or modify it under
5: * the terms of the GNU General Public License as published by the Free Software
6: * Foundation, either version 3 of the License, or (at your option) any
7: * later version.
8: * <p>
9: * This program is distributed in the hope that it will be useful, but WITHOUT
10: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12: * details. You should have received a copy of the GNU General Public License
13: * along with this program. If not, see <http://www.gnu.org/licenses/>.
14: */
15: package cz.cvut.kbss.jsonld.deserialization.util;
16:
17: import cz.cvut.kbss.jopa.datatype.DatatypeTransformer;
18: import cz.cvut.kbss.jopa.datatype.util.Pair;
19: import cz.cvut.kbss.jopa.model.MultilingualString;
20:
21: import java.time.*;
22: import java.util.*;
23: import java.util.function.Function;
24:
25: /**
26: * Provides transformation of values to various target types.
27: */
28: public class DataTypeTransformer {
29:
30: private static final Map<Pair, Function<Object, ?>> CUSTOM_TRANSFORMERS = initCustomTransformers();
31:
32: private static Map<Pair, Function<Object, ?>> initCustomTransformers() {
33: final Map<Pair, Function<Object, ?>> map = new HashMap<>();
34: map.put(new Pair<>(LangString.class, MultilingualString.class), src -> {
35: final LangString ls = (LangString) src;
36: return new MultilingualString(Collections.singletonMap(ls.getLanguage().orElse(null), ls.getValue()));
37: });
38: map.put(new Pair<>(String.class, MultilingualString.class),
39: src -> new MultilingualString(Collections.singletonMap(null, src.toString())));
40: map.put(new Pair<>(OffsetDateTime.class, LocalDateTime.class), src -> ((OffsetDateTime) src).toLocalDateTime());
41: map.put(new Pair<>(OffsetDateTime.class, ZonedDateTime.class), src -> ((OffsetDateTime) src).toZonedDateTime());
42: map.put(new Pair<>(OffsetDateTime.class, Instant.class), src -> ((OffsetDateTime) src).toInstant());
43: map.put(new Pair<>(OffsetDateTime.class, Date.class), src -> Date.from(((OffsetDateTime) src).toInstant()));
44: map.put(new Pair<>(OffsetTime.class, LocalTime.class), src -> ((OffsetTime) src).toLocalTime());
45: return map;
46: }
47:
48: public static <T> T transformValue(Object value, Class<T> targetClass) {
49: Objects.requireNonNull(value);
50: Objects.requireNonNull(targetClass);
51: final Class<?> sourceClass = value.getClass();
52:• if (targetClass.isAssignableFrom(sourceClass)) {
53: return targetClass.cast(value);
54: }
55:• if (targetClass.isEnum()) {
56: return (T) transformToEnumConstant(value, (Class) targetClass);
57: }
58: final Pair<Class<?>, Class<?>> key = new Pair<>(sourceClass, targetClass);
59:• if (CUSTOM_TRANSFORMERS.containsKey(key)) {
60: return targetClass.cast(CUSTOM_TRANSFORMERS.get(key).apply(value));
61: }
62: return DatatypeTransformer.transform(value, targetClass);
63: }
64:
65: private static <T extends Enum<T>> T transformToEnumConstant(Object value, Class<T> targetClass) {
66: return Enum.valueOf(targetClass, value.toString());
67: }
68: }