Skip to content

Package: JacksonJsonLdSerializer

JacksonJsonLdSerializer

nameinstructionbranchcomplexitylinemethod
JacksonJsonLdSerializer(Configuration, Map, JsonSerializer)
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
createSerializer(JsonGenerator)
M: 0 C: 37
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
lambda$createSerializer$0(JsonLdSerializer, Class, ValueSerializer)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
serialize(Object, JsonGenerator, SerializerProvider)
M: 0 C: 19
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
serializeWithType(Object, JsonGenerator, SerializerProvider, TypeSerializer)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
shouldUseBaseSerializer(Object)
M: 2 C: 25
93%
M: 2 C: 6
75%
M: 2 C: 3
60%
M: 1 C: 6
86%
M: 0 C: 1
100%

Coverage

1: /*
2: * JB4JSON-LD Jackson
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.jackson.serialization;
19:
20: import com.fasterxml.jackson.core.JsonGenerator;
21: import com.fasterxml.jackson.databind.JsonSerializer;
22: import com.fasterxml.jackson.databind.SerializerProvider;
23: import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
24: import cz.cvut.kbss.jsonld.Configuration;
25: import cz.cvut.kbss.jsonld.serialization.JsonLdSerializer;
26: import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer;
27:
28: import java.io.IOException;
29: import java.util.Collection;
30: import java.util.Map;
31:
32: class JacksonJsonLdSerializer<T> extends JsonSerializer<T> {
33:
34: private final Configuration configuration;
35:
36: private final Map<Class<?>, ValueSerializer<?>> commonSerializers;
37:
38: private final JsonSerializer<T> baseSerializer;
39:
40: JacksonJsonLdSerializer(Configuration configuration, Map<Class<?>, ValueSerializer<?>> commonSerializers,
41: JsonSerializer<T> baseSerializer) {
42: this.configuration = configuration;
43: this.commonSerializers = commonSerializers;
44: this.baseSerializer = baseSerializer;
45: }
46:
47: @Override
48: public void serialize(T value, JsonGenerator jsonGenerator,
49: SerializerProvider serializerProvider) throws IOException {
50:• if (shouldUseBaseSerializer(value)) {
51: baseSerializer.serialize(value, jsonGenerator, serializerProvider);
52: } else {
53: final JsonLdSerializer serializer = createSerializer(jsonGenerator);
54: serializer.serialize(value);
55: }
56: }
57:
58: private boolean shouldUseBaseSerializer(T value) {
59:• if (!(value instanceof Collection)) {
60: return false;
61: }
62: final Collection<?> col = (Collection<?>) value;
63:• if (col.isEmpty()) {
64: return false;
65: }
66: // Peek at the first element to see if we should handle it
67: final Object firstElem = col.iterator().next();
68:• return firstElem == null || !JsonLdSerializerModifier.isJsonLdCompatible(firstElem.getClass());
69: }
70:
71: private JsonLdSerializer createSerializer(JsonGenerator jsonGenerator) {
72: final cz.cvut.kbss.jsonld.serialization.JsonGenerator writer = new JacksonJsonWriter(jsonGenerator);
73: final JsonLdSerializer serializer;
74:• if (SerializationConstants.FORM_COMPACT_WITH_CONTEXT.equals(
75: configuration.get(SerializationConstants.FORM, SerializationConstants.FORM_COMPACT))) {
76: serializer =
77: JsonLdSerializer.createContextBuildingJsonLdSerializer(writer, new Configuration(configuration));
78: } else {
79: serializer = JsonLdSerializer.createCompactedJsonLdSerializer(writer, new Configuration(configuration));
80: }
81: commonSerializers.forEach((type, valueSerializer) -> serializer.registerSerializer((Class) type,
82: (ValueSerializer) valueSerializer));
83: return serializer;
84: }
85:
86: @Override
87: public void serializeWithType(T value, JsonGenerator gen, SerializerProvider serializers,
88: TypeSerializer typeSer) throws IOException {
89: serialize(value, gen, serializers);
90: }
91: }