Skip to content

Method: JsonLdDeserializer()

1: /**
2: * Copyright (C) 2022 Czech Technical University in Prague
3: *
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: *
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;
16:
17: import cz.cvut.kbss.jopa.model.annotations.OWLClass;
18: import cz.cvut.kbss.jsonld.ConfigParam;
19: import cz.cvut.kbss.jsonld.Configuration;
20: import cz.cvut.kbss.jsonld.common.BeanAnnotationProcessor;
21: import cz.cvut.kbss.jsonld.common.Configurable;
22: import cz.cvut.kbss.jsonld.deserialization.expanded.ExpandedJsonLdDeserializer;
23: import cz.cvut.kbss.jsonld.deserialization.util.ClasspathScanner;
24: import cz.cvut.kbss.jsonld.deserialization.util.TargetClassResolver;
25: import cz.cvut.kbss.jsonld.deserialization.util.TargetClassResolverConfig;
26: import cz.cvut.kbss.jsonld.deserialization.util.TypeMap;
27:
28: import java.util.Objects;
29:
30: /**
31: * Takes a pre-processed JSON-LD structure and deserializes it.
32: */
33: public abstract class JsonLdDeserializer implements Configurable {
34:
35: private final Configuration configuration;
36:
37: protected final TargetClassResolver classResolver;
38:
39: protected JsonLdDeserializer() {
40: this.configuration = new Configuration();
41: this.classResolver = initializeTargetClassResolver();
42: }
43:
44: protected JsonLdDeserializer(Configuration configuration) {
45: this.configuration = Objects.requireNonNull(configuration);
46: this.classResolver = initializeTargetClassResolver();
47: }
48:
49: private TargetClassResolver initializeTargetClassResolver() {
50: final TypeMap typeMap = new TypeMap();
51: final String scanPath = configuration.get(ConfigParam.SCAN_PACKAGE, "");
52: new ClasspathScanner(c -> {
53: final OWLClass ann = c.getDeclaredAnnotation(OWLClass.class);
54: if (ann != null) {
55: typeMap.register(BeanAnnotationProcessor.expandIriIfNecessary(ann.iri(), c), c);
56: }
57: }).processClasses(scanPath);
58: return new TargetClassResolver(typeMap,
59: new TargetClassResolverConfig(
60: configuration.is(ConfigParam.ASSUME_TARGET_TYPE),
61: configuration().is(ConfigParam.ENABLE_OPTIMISTIC_TARGET_TYPE_RESOLUTION),
62: configuration().is(ConfigParam.PREFER_SUPERCLASS)));
63: }
64:
65: @Override
66: public Configuration configuration() {
67: return configuration;
68: }
69:
70: /**
71: * Deserializes the specified JSON-LD data.
72: *
73: * @param <T> The type of the target object
74: * @param jsonLd JSON-LD structure
75: * @param resultClass Type of the result instance
76: * @return Deserialized Java instance
77: */
78: public abstract <T> T deserialize(Object jsonLd, Class<T> resultClass);
79:
80: /**
81: * Creates deserializer for expanded JSON-LD, initialized with the specified configuration.
82: *
83: * @param configuration Configuration of the deserializer
84: * @return New deserializer
85: */
86: public static JsonLdDeserializer createExpandedDeserializer(Configuration configuration) {
87: return new ExpandedJsonLdDeserializer(configuration);
88: }
89:
90: /**
91: * Creates deserializer for expanded JSON-LD.
92: *
93: * @return New deserializer
94: */
95: public static JsonLdDeserializer createExpandedDeserializer() {
96: return new ExpandedJsonLdDeserializer();
97: }
98: }