Package: ContextBuildingPluralMultilingualStringSerializer
ContextBuildingPluralMultilingualStringSerializer
name | instruction | branch | complexity | line | method | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ContextBuildingPluralMultilingualStringSerializer() |
|
|
|
|
|
||||||||||||||||||||
lambda$serialize$0(Map, String, String) |
|
|
|
|
|
||||||||||||||||||||
lambda$serialize$1(Map, MultilingualString) |
|
|
|
|
|
||||||||||||||||||||
lambda$serialize$2(CollectionNode, String) |
|
|
|
|
|
||||||||||||||||||||
lambda$serialize$3(ObjectNode, String, Set) |
|
|
|
|
|
||||||||||||||||||||
registerTermMapping(SerializationContext) |
|
|
|
|
|
||||||||||||||||||||
serialize(Collection, SerializationContext) |
|
|
|
|
|
Coverage
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.serialization.serializer.context;
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.ObjectNode;
25: import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer;
26: import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext;
27:
28: import java.util.*;
29:
30: public class ContextBuildingPluralMultilingualStringSerializer implements ValueSerializer<Collection<MultilingualString>> {
31:
32: @Override
33: public ObjectNode serialize(Collection<MultilingualString> value,
34: SerializationContext<Collection<MultilingualString>> ctx) {
35:• if (ctx.getTerm() != null) {
36: registerTermMapping(ctx);
37: }
38: final Map<String, Set<String>> allValues = new HashMap<>();
39: value.forEach(ms -> ms.getValue().forEach((lang, text) -> {
40: allValues.putIfAbsent(lang, new LinkedHashSet<>());
41: allValues.get(lang).add(text);
42: }));
43: final ObjectNode node = JsonNodeFactory.createObjectNode(ctx.getTerm());
44: allValues.forEach((lang, texts) -> {
45:• final String langKey = lang != null ? lang : JsonLd.NONE;
46:• if (texts.size() == 1) {
47: node.addItem(JsonNodeFactory.createLiteralNode(langKey, texts.iterator().next()));
48: } else {
49: final CollectionNode<?> translations = JsonNodeFactory.createCollectionNodeFromArray(langKey);
50: texts.forEach(t -> translations.addItem(JsonNodeFactory.createLiteralNode(t)));
51: node.addItem(translations);
52: }
53: });
54: return node;
55: }
56:
57: static void registerTermMapping(SerializationContext<Collection<MultilingualString>> ctx) {
58: final ObjectNode mapping = JsonNodeFactory.createObjectNode(ctx.getFieldName());
59: mapping.addItem(JsonNodeFactory.createLiteralNode(JsonLd.ID, ctx.getTerm()));
60: mapping.addItem(JsonNodeFactory.createLiteralNode(JsonLd.CONTAINER, JsonLd.LANGUAGE));
61: ctx.registerTermMapping(ctx.getFieldName(), mapping);
62: }
63: }