Skip to content

Package: ReferencedListHandler

ReferencedListHandler

nameinstructionbranchcomplexitylinemethod
ReferencedListHandler(Connector, ValueFactory)
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
appendNewNodes(ReferencedListValueDescriptor, ListHandler.MergeResult)
M: 4 C: 67
94%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 15
100%
M: 0 C: 1
100%
clearList(ReferencedListValueDescriptor)
M: 0 C: 82
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
createIterator(ReferencedListDescriptor)
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createListHead(ReferencedListValueDescriptor, Collection)
M: 0 C: 52
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
createListNode(IRI, IRI, IRI, IRI, IRI, Resource, Collection)
M: 0 C: 27
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
createListRest(IRI, ReferencedListValueDescriptor)
M: 0 C: 57
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
generateSequenceNode(IRI, IRI)
M: 0 C: 44
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
hasContent(ReferencedListDescriptor)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
iterator(ReferencedListValueDescriptor)
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
mergeWithOriginalList(ReferencedListValueDescriptor, SesameIterator)
M: 0 C: 42
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
static {...}
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2016 Czech Technical University in Prague
3: * <p>
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: * <p>
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.ontodriver.sesame;
16:
17: import cz.cvut.kbss.ontodriver.sesame.connector.Connector;
18: import cz.cvut.kbss.ontodriver.sesame.exceptions.SesameDriverException;
19: import cz.cvut.kbss.ontodriver.descriptor.ReferencedListDescriptor;
20: import cz.cvut.kbss.ontodriver.descriptor.ReferencedListValueDescriptor;
21: import cz.cvut.kbss.ontodriver.model.NamedResource;
22: import org.eclipse.rdf4j.model.IRI;
23: import org.eclipse.rdf4j.model.Resource;
24: import org.eclipse.rdf4j.model.Statement;
25: import org.eclipse.rdf4j.model.ValueFactory;
26:
27: import java.util.ArrayList;
28: import java.util.Collection;
29: import java.util.Iterator;
30: import java.util.List;
31:
32: public class ReferencedListHandler extends
33: ListHandler<ReferencedListDescriptor, ReferencedListValueDescriptor> {
34:
35: private int sequenceCounter = 0;
36:
37: ReferencedListHandler(Connector connector, ValueFactory vf) {
38: super(connector, vf);
39: }
40:
41: @Override
42: SesameIterator createIterator(ReferencedListDescriptor listDescriptor) throws SesameDriverException {
43: return new ReferencedListIterator(listDescriptor, connector, vf);
44: }
45:
46: IRI createListHead(ReferencedListValueDescriptor listValueDescriptor,
47: Collection<Statement> statements) throws SesameDriverException {
48: final IRI owner = owner(listValueDescriptor);
49: final IRI hasList = hasList(listValueDescriptor);
50: final IRI hasContent = hasContent(listValueDescriptor);
51: final IRI context = context(listValueDescriptor);
52: final IRI nodeUri = generateSequenceNode(owner, context);
53: statements.add(vf.createStatement(owner, hasList, nodeUri, context));
54: final IRI nodeContent = sesameIri(listValueDescriptor.getValues().get(0).getIdentifier());
55: statements.add(vf.createStatement(nodeUri, hasContent, nodeContent, context));
56: return nodeUri;
57: }
58:
59: private IRI hasContent(ReferencedListDescriptor listDescriptor) {
60: return sesameIri(listDescriptor.getNodeContent().getIdentifier());
61: }
62:
63: private IRI generateSequenceNode(IRI owner, IRI context) throws SesameDriverException {
64: final String uriBase = owner.stringValue();
65: boolean unique;
66: IRI node;
67: do {
68: node = vf.createIRI(uriBase + "-SEQ_" + sequenceCounter++);
69: final Collection<Statement> stmts = connector.findStatements(node, null, null, false,
70: context);
71: unique = stmts.isEmpty();
72:• } while (!unique);
73: return node;
74: }
75:
76: List<Statement> createListRest(IRI headNode, ReferencedListValueDescriptor listValueDescriptor)
77: throws SesameDriverException {
78: final IRI owner = owner(listValueDescriptor);
79: final IRI hasNext = hasNext(listValueDescriptor);
80: final IRI hasContent = hasContent(listValueDescriptor);
81: final IRI context = context(listValueDescriptor);
82: IRI previous = headNode;
83: final List<Statement> statements = new ArrayList<>(
84: listValueDescriptor.getValues().size() * 2);
85: final Iterator<NamedResource> it = listValueDescriptor.getValues().iterator();
86: // Skip the first element, it is already in the head
87: it.next();
88:• while (it.hasNext()) {
89: final IRI content = sesameIri(it.next().getIdentifier());
90: previous = createListNode(owner, hasNext, hasContent, content, context, previous, statements);
91: }
92: return statements;
93: }
94:
95: private IRI createListNode(IRI owner, IRI hasNext, IRI hasContent, IRI content, IRI context, Resource previous,
96: Collection<Statement> statements) throws SesameDriverException {
97: final IRI node = generateSequenceNode(owner, context);
98: statements.add(vf.createStatement(previous, hasNext, node, context));
99: statements.add(vf.createStatement(node, hasContent, content, context));
100: return node;
101: }
102:
103: @Override
104: void clearList(ReferencedListValueDescriptor listDescriptor) throws SesameDriverException {
105: final IRI hasNext = hasNext(listDescriptor);
106: final IRI hasContent = hasContent(listDescriptor);
107: final boolean includeInferred = listDescriptor.getListProperty().isInferred();
108: final IRI context = context(listDescriptor);
109: Resource previous = owner(listDescriptor);
110: IRI currentProperty = hasList(listDescriptor);
111: final Collection<Statement> toRemove = new ArrayList<>();
112: Collection<Statement> next;
113: do {
114: next = connector.findStatements(previous, currentProperty, null, includeInferred, context);
115:• if (!next.isEmpty()) {
116: final Resource node = extractListNode(next, currentProperty);
117: toRemove.addAll(next);
118: toRemove.addAll(connector.findStatements(node, hasContent, null, includeInferred, context));
119: previous = node;
120: }
121: currentProperty = hasNext;
122:• } while (!next.isEmpty());
123: connector.removeStatements(toRemove);
124: }
125:
126: @Override
127: SesameIterator iterator(ReferencedListValueDescriptor listDescriptor) throws SesameDriverException {
128: return new ReferencedListIterator(listDescriptor, connector, vf);
129: }
130:
131: @Override
132: MergeResult mergeWithOriginalList(ReferencedListValueDescriptor listDescriptor, SesameIterator it)
133: throws SesameDriverException {
134: int i = 0;
135: Resource node = null;
136:• while (it.hasNext() && i < listDescriptor.getValues().size()) {
137: node = it.nextNode();
138: final Resource content = it.currentContent();
139: final NamedResource newNode = listDescriptor.getValues().get(i);
140:• if (!content.stringValue().equals(newNode.getIdentifier().toString())) {
141: it.replaceCurrentWith(newNode);
142: }
143: i++;
144: }
145: return new MergeResult(i, node);
146: }
147:
148: @Override
149: void appendNewNodes(ReferencedListValueDescriptor listDescriptor, MergeResult mergeResult)
150: throws SesameDriverException {
151: int i = mergeResult.i;
152: Resource previous = mergeResult.previous;
153: final IRI owner = owner(listDescriptor);
154: final IRI hasNext = hasNext(listDescriptor);
155: final IRI hasContent = hasContent(listDescriptor);
156: final IRI context = context(listDescriptor);
157:• assert i > 0;
158: final Collection<Statement> toAdd = new ArrayList<>((listDescriptor.getValues().size() - i) * 2);
159:• while (i < listDescriptor.getValues().size()) {
160: final IRI content = sesameIri(listDescriptor.getValues().get(i).getIdentifier());
161: previous = createListNode(owner, hasNext, hasContent, content, context, previous, toAdd);
162: i++;
163: }
164: connector.addStatements(toAdd);
165: }
166: }