Skip to content

Package: SingularMultilingualStringFieldStrategy

SingularMultilingualStringFieldStrategy

nameinstructionbranchcomplexitylinemethod
SingularMultilingualStringFieldStrategy(EntityType, AbstractAttribute, Descriptor, EntityMappingHelper)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
addValueFromAxiom(Axiom)
M: 0 C: 47
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
buildAxiomValuesFromInstance(Object, AxiomValueGatherer)
M: 0 C: 27
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
buildInstanceFieldValue(Object)
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%
lambda$translationsToLangStrings$0(Map.Entry)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
translationsToLangStrings(MultilingualString)
M: 0 C: 10
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
verifyCardinality(String, NamedResource)
M: 0 C: 56
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 7
100%
M: 0 C: 1
100%

Coverage

1: package cz.cvut.kbss.jopa.oom;
2:
3: import cz.cvut.kbss.jopa.exceptions.CardinalityConstraintViolatedException;
4: import cz.cvut.kbss.jopa.model.MultilingualString;
5: import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
6: import cz.cvut.kbss.jopa.model.metamodel.AbstractAttribute;
7: import cz.cvut.kbss.jopa.model.metamodel.EntityType;
8: import cz.cvut.kbss.ontodriver.model.Axiom;
9: import cz.cvut.kbss.ontodriver.model.LangString;
10: import cz.cvut.kbss.ontodriver.model.NamedResource;
11: import cz.cvut.kbss.ontodriver.model.Value;
12:
13: import java.util.List;
14: import java.util.stream.Collectors;
15:
16: class SingularMultilingualStringFieldStrategy<X>
17: extends DataPropertyFieldStrategy<AbstractAttribute<? super X, MultilingualString>, X> {
18:
19: private MultilingualString value;
20:
21: SingularMultilingualStringFieldStrategy(EntityType<X> et, AbstractAttribute<? super X, MultilingualString> att,
22: Descriptor entityDescriptor, EntityMappingHelper mapper) {
23: super(et, att, entityDescriptor, mapper);
24: }
25:
26: @Override
27: void addValueFromAxiom(Axiom<?> ax) {
28:• if (value == null) {
29: this.value = new MultilingualString();
30: }
31: final Value<?> axiomValue = ax.getValue();
32:• if (axiomValue.getValue() instanceof LangString) {
33: final LangString lsAxiomValue = (LangString) axiomValue.getValue();
34: verifyCardinality(lsAxiomValue.getLanguage().orElse(null), ax.getSubject());
35: value.set(lsAxiomValue.getLanguage().orElse(null), lsAxiomValue.getValue());
36: } else {
37: value.set(axiomValue.stringValue());
38: }
39: }
40:
41: private void verifyCardinality(String language, NamedResource subject) {
42:• if (language != null && value.contains(language)) {
43: throw new CardinalityConstraintViolatedException(String.format(
44: "Expected single value with language tag %s of attribute %s of instance <%s>, but got multiple.",
45: language, attribute.getName(), subject));
46:• } else if (language == null && value.containsSimple()) {
47: throw new CardinalityConstraintViolatedException(String.format(
48: "Expected single simple literal value of attribute %s of instance <%s>, but got multiple.",
49: attribute.getName(), subject));
50: }
51: }
52:
53: @Override
54: void buildInstanceFieldValue(Object instance) {
55: setValueOnInstance(instance, value);
56: }
57:
58: @Override
59: void buildAxiomValuesFromInstance(X instance, AxiomValueGatherer valueBuilder) {
60: final MultilingualString attValue = (MultilingualString) extractFieldValueFromInstance(instance);
61:• if (attValue == null || attValue.isEmpty()) {
62: valueBuilder.addValue(createAssertion(), Value.nullValue(), getAttributeContext());
63: } else {
64: valueBuilder.addValues(createAssertion(), translationsToLangStrings(attValue), getAttributeContext());
65: }
66: }
67:
68: static List<Value<?>> translationsToLangStrings(MultilingualString str) {
69: return str.getValue().entrySet().stream().map(e -> new Value<>(new LangString(e.getValue(), e.getKey())))
70: .collect(Collectors.toList());
71: }
72: }