Skip to contentMethod: DefaultValueSerializer(MultilingualStringSerializer)
1: /*
2: * JB4JSON-LD
3: * Copyright (C) 2023 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.serialization.serializer.compact;
19:
20: import cz.cvut.kbss.jopa.model.MultilingualString;
21: import cz.cvut.kbss.jsonld.JsonLd;
22: import cz.cvut.kbss.jsonld.serialization.JsonNodeFactory;
23: import cz.cvut.kbss.jsonld.serialization.model.CollectionNode;
24: import cz.cvut.kbss.jsonld.serialization.model.JsonNode;
25: import cz.cvut.kbss.jsonld.serialization.model.ObjectNode;
26: import cz.cvut.kbss.jsonld.serialization.serializer.SerializerUtils;
27: import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer;
28: import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext;
29:
30: import java.util.Collection;
31:
32: public class DefaultValueSerializer implements ValueSerializer {
33:
34: private final MultilingualStringSerializer multilingualStringSerializer;
35:
36: public DefaultValueSerializer(MultilingualStringSerializer multilingualStringSerializer) {
37: this.multilingualStringSerializer = multilingualStringSerializer;
38: }
39:
40: @Override
41: public JsonNode serialize(Object value, SerializationContext ctx) {
42: if (value instanceof Collection) {
43: final Collection<?> col = (Collection<?>) value;
44: final CollectionNode<?> node = JsonNodeFactory.createCollectionNode(ctx.getTerm(), col);
45: col.forEach(item -> {
46: if (SerializerUtils.isAnnotationReference(item, ctx)) {
47: node.addItem(serializeReference(null, item));
48: } else if (item instanceof MultilingualString) {
49: node.addItem(multilingualStringSerializer.serialize((MultilingualString) item,
50: new SerializationContext<>(
51: (MultilingualString) item,
52: ctx.getJsonLdContext())));
53: } else {
54: node.addItem(JsonNodeFactory.createLiteralNode(item));
55: }
56: });
57: return node;
58: } else {
59: if (SerializerUtils.isAnnotationReference(value, ctx)) {
60: return serializeReference(ctx.getTerm(), value);
61: } else if (value instanceof MultilingualString) {
62: return multilingualStringSerializer.serialize((MultilingualString) value, ctx);
63: }
64: return JsonNodeFactory.createLiteralNode(ctx.getTerm(), value);
65: }
66: }
67:
68: private static JsonNode serializeReference(String attId, Object value) {
69: final ObjectNode node = JsonNodeFactory.createObjectNode(attId);
70: node.addItem(JsonNodeFactory.createObjectIdNode(JsonLd.ID, value));
71: return node;
72: }
73: }