diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandler.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandler.java index 92bdb7a18..372aff643 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandler.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandler.java @@ -17,118 +17,44 @@ */ package cz.cvut.kbss.ontodriver.rdf4j; -import cz.cvut.kbss.ontodriver.descriptor.*; +import cz.cvut.kbss.ontodriver.descriptor.ListDescriptor; import cz.cvut.kbss.ontodriver.exception.IntegrityConstraintViolatedException; -import cz.cvut.kbss.ontodriver.model.Axiom; -import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.connector.Connector; import cz.cvut.kbss.ontodriver.rdf4j.exception.Rdf4jDriverException; import cz.cvut.kbss.ontodriver.rdf4j.util.Rdf4jUtils; -import org.eclipse.rdf4j.model.*; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; +import org.eclipse.rdf4j.model.ValueFactory; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; /** * Base class for list handlers. *

* List handlers are responsible for loading and persisting lists. - * - * @param List descriptor type - * @param List value descriptor type */ -abstract class ListHandler> { +abstract class ListHandler { - protected final Connector connector; - protected final ValueFactory vf; + final Connector connector; + final ValueFactory vf; ListHandler(Connector connector, ValueFactory vf) { this.connector = connector; this.vf = vf; } - /** - * Loads axioms representing list described by the specified list descriptor. - * - * @return Collection of axioms representing sequence values - * @throws Rdf4jDriverException When storage access error occurs - */ - List> loadList(T listDescriptor) throws Rdf4jDriverException { - final List> axioms = new ArrayList<>(); - final ListIterator it = createIterator(listDescriptor); - while (it.hasNext()) { - axioms.add(it.nextAxiom()); - } - return axioms; - } - - abstract ListIterator createIterator(T listDescriptor) throws Rdf4jDriverException; - - /** - * Persists list values specified by the descriptor. - *

- * The values are saved in the order in which they appear in the descriptor. - * - * @param listValueDescriptor Describes values to persist - * @throws Rdf4jDriverException When storage access error occurs - */ - void persistList(V listValueDescriptor) throws Rdf4jDriverException { - if (listValueDescriptor.getValues().isEmpty()) { - return; - } - final Collection statements = new ArrayList<>(listValueDescriptor.getValues().size()); - final IRI head = createListHead(listValueDescriptor, statements); - statements.addAll(createListRest(head, listValueDescriptor)); - connector.addStatements(statements); - } - - abstract IRI createListHead(V valueDescriptor, Collection listStatements) throws Rdf4jDriverException; - - abstract List createListRest(IRI head, V valueDescriptor) throws Rdf4jDriverException; - - /** - * Updates list with values specified by the descriptor. - * - * @param listValueDescriptor Describes the updated values - * @throws Rdf4jDriverException When storage access error occurs - */ - void updateList(V listValueDescriptor) throws Rdf4jDriverException { - if (listValueDescriptor.getValues().isEmpty()) { - clearList(listValueDescriptor); - } else if (isOldListEmpty(owner(listValueDescriptor), hasList(listValueDescriptor), - listValueDescriptor.getListProperty().isInferred(), contexts(listValueDescriptor))) { - persistList(listValueDescriptor); - } else { - mergeList(listValueDescriptor); - } - } - - private boolean isOldListEmpty(Resource owner, IRI hasListProperty, boolean includeInferred, + boolean isOldListEmpty(Resource owner, IRI hasListProperty, boolean includeInferred, Set contexts) throws Rdf4jDriverException { final Collection stmts = connector.findStatements(owner, hasListProperty, null, includeInferred, contexts); return stmts.isEmpty(); } - abstract void clearList(V listDescriptor) throws Rdf4jDriverException; - - private void mergeList(V listDescriptor) throws Rdf4jDriverException { - final ListIterator it = iterator(listDescriptor); - final MergeResult mergeResult = mergeWithOriginalList(listDescriptor, it); - removeObsoletes(it); - assert mergeResult.i > 0; - assert mergeResult.previous != null; - if (mergeResult.i < listDescriptor.getValues().size()) { - appendNewNodes(listDescriptor, mergeResult); - } - } - - abstract ListIterator iterator(V listDescriptor) throws Rdf4jDriverException; - - abstract MergeResult mergeWithOriginalList(V listDescriptor, ListIterator it) throws Rdf4jDriverException; - - abstract void appendNewNodes(V listDescriptor, MergeResult mergeResult) throws Rdf4jDriverException; - - private void removeObsoletes(ListIterator it) throws Rdf4jDriverException { + void removeObsoletes(ListIterator it) throws Rdf4jDriverException { while (it.hasNext()) { it.nextNode(); it.remove(); @@ -174,35 +100,6 @@ IRI toRdf4jIri(java.net.URI uri) { return Rdf4jUtils.toRdf4jIri(uri, vf); } - /** - * Creates handler for simple lists. - * - * @param connector Storage connector - * @param vf RDF4J value factory - * @return List handler - */ - static ListHandler createForSimpleList( - Connector connector, ValueFactory vf) { - assert connector != null; - assert vf != null; - - return new SimpleListHandler(connector, vf); - } - - /** - * Creates handler for referenced lists. - * - * @param connector Storage connector - * @param vf RDF4J value factory - * @return List handler - */ - static ListHandler> createForReferencedList( - Connector connector, ValueFactory vf) { - assert connector != null; - assert vf != null; - - return new ReferencedListHandler(connector, vf); - } static final class MergeResult { final int i; diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jAdapter.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jAdapter.java index 0abff4ad1..c1f842bcf 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jAdapter.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jAdapter.java @@ -19,11 +19,11 @@ import cz.cvut.kbss.ontodriver.Closeable; import cz.cvut.kbss.ontodriver.Wrapper; -import cz.cvut.kbss.ontodriver.descriptor.*; +import cz.cvut.kbss.ontodriver.descriptor.AxiomDescriptor; +import cz.cvut.kbss.ontodriver.descriptor.AxiomValueDescriptor; import cz.cvut.kbss.ontodriver.exception.IdentifierGenerationException; import cz.cvut.kbss.ontodriver.exception.OntoDriverException; import cz.cvut.kbss.ontodriver.model.Axiom; -import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.config.Constants; import cz.cvut.kbss.ontodriver.rdf4j.config.RuntimeConfiguration; import cz.cvut.kbss.ontodriver.rdf4j.connector.Connector; @@ -39,7 +39,11 @@ import org.eclipse.rdf4j.model.vocabulary.RDF; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; class Rdf4jAdapter implements Closeable, Wrapper { @@ -210,15 +214,15 @@ StatementExecutor getQueryExecutor() { return connector; } - ListHandler getSimpleListHandler() throws Rdf4jDriverException { + SimpleListHandler getSimpleListHandler() throws Rdf4jDriverException { startTransactionIfNotActive(); - return ListHandler.createForSimpleList(connector, valueFactory); + return new SimpleListHandler(connector, valueFactory); } - ListHandler, ?> getReferencedListHandler() throws + ReferencedListHandler getReferencedListHandler() throws Rdf4jDriverException { startTransactionIfNotActive(); - return ListHandler.createForReferencedList(connector, valueFactory); + return new ReferencedListHandler(connector, valueFactory); } TypesHandler getTypesHandler() throws Rdf4jDriverException { diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jLists.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jLists.java index 922a924d7..50778e194 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jLists.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/Rdf4jLists.java @@ -84,7 +84,7 @@ public void persistReferencedList(ReferencedListValueDescriptor descripto } @Override - public void updateReferencedList(ReferencedListValueDescriptor descriptor) + public void updateReferencedList(ReferencedListValueDescriptor descriptor) throws OntoDriverException { verifyArgs(descriptor); adapter.getReferencedListHandler().updateList(descriptor); diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandler.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandler.java index b3c3e08a2..38c1ac28b 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandler.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandler.java @@ -20,6 +20,8 @@ import cz.cvut.kbss.ontodriver.descriptor.ReferencedListDescriptor; import cz.cvut.kbss.ontodriver.descriptor.ReferencedListValueDescriptor; import cz.cvut.kbss.ontodriver.model.Assertion; +import cz.cvut.kbss.ontodriver.model.Axiom; +import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.connector.Connector; import cz.cvut.kbss.ontodriver.rdf4j.exception.Rdf4jDriverException; import cz.cvut.kbss.ontodriver.rdf4j.util.ValueConverter; @@ -29,10 +31,14 @@ import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.model.ValueFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; -public class ReferencedListHandler extends - ListHandler, VT> { +public class ReferencedListHandler extends ListHandler { private int sequenceCounter = 0; @@ -43,13 +49,40 @@ public class ReferencedListHandler extends this.valueConverter = new ValueConverter(vf); } - @Override - ListIterator createIterator(ReferencedListDescriptor listDescriptor) throws Rdf4jDriverException { - return new ReferencedListIterator<>(listDescriptor, connector, vf); + /** + * Loads axioms representing list described by the specified list descriptor. + * + * @return Collection of axioms representing sequence values + * @throws Rdf4jDriverException When storage access error occurs + */ + List> loadList(ReferencedListDescriptor listDescriptor) throws Rdf4jDriverException { + final List> axioms = new ArrayList<>(); + final ListIterator it = new ReferencedListIterator<>(listDescriptor, connector, vf); + while (it.hasNext()) { + axioms.add(it.nextAxiom()); + } + return axioms; + } + + /** + * Persists list values specified by the descriptor. + *

+ * The values are saved in the order in which they appear in the descriptor. + * + * @param listValueDescriptor Describes values to persist + * @throws Rdf4jDriverException When storage access error occurs + */ + void persistList(ReferencedListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { + if (listValueDescriptor.getValues().isEmpty()) { + return; + } + final Collection statements = new ArrayList<>(listValueDescriptor.getValues().size()); + final IRI head = createListHead(listValueDescriptor, statements); + statements.addAll(createListRest(head, listValueDescriptor)); + connector.addStatements(statements); } - @Override - IRI createListHead(ReferencedListValueDescriptor listValueDescriptor, + IRI createListHead(ReferencedListValueDescriptor listValueDescriptor, Collection statements) throws Rdf4jDriverException { final IRI owner = owner(listValueDescriptor); final IRI hasList = hasList(listValueDescriptor); @@ -57,7 +90,7 @@ IRI createListHead(ReferencedListValueDescriptor listValueDescriptor, final IRI context = context(listValueDescriptor); final IRI nodeUri = generateSequenceNode(owner, context); statements.add(vf.createStatement(owner, hasList, nodeUri, context)); - final Value nodeContent = toRdf4jValue(listValueDescriptor.getListProperty(), listValueDescriptor.getValues().get(0)); + final Value nodeContent = toRdf4jValue(listValueDescriptor.getNodeContent(), listValueDescriptor.getValues().get(0)); statements.add(vf.createStatement(nodeUri, hasContent, nodeContent, context)); return nodeUri; } @@ -83,21 +116,19 @@ private IRI generateSequenceNode(IRI owner, IRI context) throws Rdf4jDriverExcep return node; } - @Override - List createListRest(IRI headNode, ReferencedListValueDescriptor listValueDescriptor) + List createListRest(IRI headNode, ReferencedListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { final IRI owner = owner(listValueDescriptor); final IRI hasNext = hasNext(listValueDescriptor); final IRI hasContent = hasContent(listValueDescriptor); final IRI context = context(listValueDescriptor); IRI previous = headNode; - final List statements = new ArrayList<>( - listValueDescriptor.getValues().size() * 2); + final List statements = new ArrayList<>(listValueDescriptor.getValues().size() * 2); final Iterator it = listValueDescriptor.getValues().iterator(); // Skip the first element, it is already in the head it.next(); while (it.hasNext()) { - final Value content = toRdf4jValue(listValueDescriptor.getListProperty(), it.next()); + final Value content = toRdf4jValue(listValueDescriptor.getNodeContent(), it.next()); previous = createListNode(owner, hasNext, hasContent, content, context, previous, statements); } return statements; @@ -111,8 +142,24 @@ private IRI createListNode(IRI owner, IRI hasNext, IRI hasContent, Value content return node; } - @Override - void clearList(ReferencedListValueDescriptor listDescriptor) throws Rdf4jDriverException { + /** + * Updates list with values specified by the descriptor. + * + * @param listValueDescriptor Describes the updated values + * @throws Rdf4jDriverException When storage access error occurs + */ + void updateList(ReferencedListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { + if (listValueDescriptor.getValues().isEmpty()) { + clearList(listValueDescriptor); + } else if (isOldListEmpty(owner(listValueDescriptor), hasList(listValueDescriptor), + listValueDescriptor.getListProperty().isInferred(), contexts(listValueDescriptor))) { + persistList(listValueDescriptor); + } else { + mergeList(listValueDescriptor); + } + } + + private void clearList(ReferencedListValueDescriptor listDescriptor) throws Rdf4jDriverException { final IRI hasNext = hasNext(listDescriptor); final IRI hasContent = hasContent(listDescriptor); final boolean includeInferred = listDescriptor.getListProperty().isInferred(); @@ -134,13 +181,18 @@ void clearList(ReferencedListValueDescriptor listDescriptor) throws Rdf4jDri connector.removeStatements(toRemove); } - @Override - ListIterator iterator(ReferencedListValueDescriptor listDescriptor) throws Rdf4jDriverException { - return new ReferencedListIterator<>(listDescriptor, connector, vf); + private void mergeList(ReferencedListValueDescriptor listDescriptor) throws Rdf4jDriverException { + final ListIterator it = new ReferencedListIterator<>(listDescriptor, connector, vf); + final ListHandler.MergeResult mergeResult = mergeWithOriginalList(listDescriptor, it); + removeObsoletes(it); + assert mergeResult.i > 0; + assert mergeResult.previous != null; + if (mergeResult.i < listDescriptor.getValues().size()) { + appendNewNodes(listDescriptor, mergeResult); + } } - @Override - MergeResult mergeWithOriginalList(ReferencedListValueDescriptor listDescriptor, ListIterator it) + MergeResult mergeWithOriginalList(ReferencedListValueDescriptor listDescriptor, ListIterator it) throws Rdf4jDriverException { int i = 0; Resource node = null; @@ -149,15 +201,14 @@ MergeResult mergeWithOriginalList(ReferencedListValueDescriptor listDescript final Object content = it.currentContent(); final Object newNode = listDescriptor.getValues().get(i); if (!content.equals(newNode)) { - it.replaceCurrentWith((VT) newNode); + it.replaceCurrentWith((V) newNode); } i++; } return new MergeResult(i, node); } - @Override - void appendNewNodes(ReferencedListValueDescriptor listDescriptor, MergeResult mergeResult) + void appendNewNodes(ReferencedListValueDescriptor listDescriptor, MergeResult mergeResult) throws Rdf4jDriverException { int i = mergeResult.i; Resource previous = mergeResult.previous; diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListIterator.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListIterator.java index e8e1e72cb..f78a9c72c 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListIterator.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListIterator.java @@ -97,7 +97,7 @@ private Statement getNodeContent(Resource node) throws Rdf4jDriverException { @Override public T currentContent() { - return (T) ValueConverter.fromRdf4jValue(listDescriptor.getListProperty(), currentContent.getObject()); + return (T) ValueConverter.fromRdf4jValue(listDescriptor.getListProperty(), currentContent.getObject()).orElse(null); } @Override diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandler.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandler.java index d52ee3a11..55397b76d 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandler.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandler.java @@ -19,6 +19,7 @@ import cz.cvut.kbss.ontodriver.descriptor.SimpleListDescriptor; import cz.cvut.kbss.ontodriver.descriptor.SimpleListValueDescriptor; +import cz.cvut.kbss.ontodriver.model.Axiom; import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.connector.Connector; import cz.cvut.kbss.ontodriver.rdf4j.exception.Rdf4jDriverException; @@ -27,20 +28,51 @@ import org.eclipse.rdf4j.model.Statement; import org.eclipse.rdf4j.model.ValueFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; -class SimpleListHandler extends ListHandler { +class SimpleListHandler extends ListHandler { SimpleListHandler(Connector connector, ValueFactory vf) { super(connector, vf); } - @Override - ListIterator createIterator(SimpleListDescriptor listDescriptor) throws Rdf4jDriverException { - return new SimpleListIterator(listDescriptor, connector, vf); + /** + * Loads axioms representing list described by the specified list descriptor. + * + * @return Collection of axioms representing sequence values + * @throws Rdf4jDriverException When storage access error occurs + */ + List> loadList(SimpleListDescriptor listDescriptor) throws Rdf4jDriverException { + final List> axioms = new ArrayList<>(); + final ListIterator it = new SimpleListIterator(listDescriptor, connector, vf); + while (it.hasNext()) { + axioms.add(it.nextAxiom()); + } + return axioms; + } + + /** + * Persists list values specified by the descriptor. + *

+ * The values are saved in the order in which they appear in the descriptor. + * + * @param listValueDescriptor Describes values to persist + * @throws Rdf4jDriverException When storage access error occurs + */ + void persistList(SimpleListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { + if (listValueDescriptor.getValues().isEmpty()) { + return; + } + final Collection statements = new ArrayList<>(listValueDescriptor.getValues().size()); + final IRI head = createListHead(listValueDescriptor, statements); + statements.addAll(createListRest(head, listValueDescriptor)); + connector.addStatements(statements); } - @Override IRI createListHead(SimpleListValueDescriptor listValueDescriptor, Collection listStatements) { final IRI firstNode = toRdf4jIri(listValueDescriptor.getValues().get(0).getIdentifier()); listStatements.add(vf.createStatement(owner(listValueDescriptor), hasList(listValueDescriptor), @@ -48,7 +80,6 @@ IRI createListHead(SimpleListValueDescriptor listValueDescriptor, Collection createListRest(IRI head, SimpleListValueDescriptor listValueDescriptor) { final List statements = new ArrayList<>(listValueDescriptor.getValues().size()); IRI previous = head; @@ -65,12 +96,27 @@ List createListRest(IRI head, SimpleListValueDescriptor listValueDesc } /** - * We are using this code instead of iterator.remove for performance - * reasons. The iterator has to reconnect the list for each removed node, - * which takes a lot of time. + * Updates list with values specified by the descriptor. + * + * @param listValueDescriptor Describes the updated values + * @throws Rdf4jDriverException When storage access error occurs */ - @Override - void clearList(SimpleListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { + void updateList(SimpleListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { + if (listValueDescriptor.getValues().isEmpty()) { + clearList(listValueDescriptor); + } else if (isOldListEmpty(owner(listValueDescriptor), hasList(listValueDescriptor), + listValueDescriptor.getListProperty().isInferred(), contexts(listValueDescriptor))) { + persistList(listValueDescriptor); + } else { + mergeList(listValueDescriptor); + } + } + + /** + * We are using this code instead of iterator.remove for performance reasons. The iterator has to reconnect the list + * for each removed node, which takes a lot of time. + */ + private void clearList(SimpleListValueDescriptor listValueDescriptor) throws Rdf4jDriverException { final Set contexts = contexts(listValueDescriptor); final Collection toRemove = new ArrayList<>(); IRI currentProperty = hasList(listValueDescriptor); @@ -89,9 +135,19 @@ void clearList(SimpleListValueDescriptor listValueDescriptor) throws Rdf4jDriver connector.removeStatements(toRemove); } - @Override + private void mergeList(SimpleListValueDescriptor listDescriptor) throws Rdf4jDriverException { + final ListIterator it = iterator(listDescriptor); + final ListHandler.MergeResult mergeResult = mergeWithOriginalList(listDescriptor, it); + removeObsoletes(it); + assert mergeResult.i > 0; + assert mergeResult.previous != null; + if (mergeResult.i < listDescriptor.getValues().size()) { + appendNewNodes(listDescriptor, mergeResult); + } + } + MergeResult mergeWithOriginalList(SimpleListValueDescriptor listDescriptor, ListIterator it) throws - Rdf4jDriverException { + Rdf4jDriverException { int i = 0; Resource node = null; while (it.hasNext() && i < listDescriptor.getValues().size()) { @@ -106,9 +162,8 @@ MergeResult mergeWithOriginalList(SimpleListValueDescriptor listDescriptor, List return new MergeResult(i, node); } - @Override void appendNewNodes(SimpleListValueDescriptor listDescriptor, MergeResult mergeResult) throws - Rdf4jDriverException { + Rdf4jDriverException { int i = mergeResult.i; final Collection toAdd = new ArrayList<>(listDescriptor.getValues().size() - i); Resource previous = mergeResult.previous; @@ -124,8 +179,7 @@ void appendNewNodes(SimpleListValueDescriptor listDescriptor, MergeResult mergeR connector.addStatements(toAdd); } - @Override - ListIterator iterator(SimpleListValueDescriptor listDescriptor) throws Rdf4jDriverException { + private ListIterator iterator(SimpleListValueDescriptor listDescriptor) throws Rdf4jDriverException { return new SimpleListIterator(listDescriptor, connector, vf); } } diff --git a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/util/ValueConverter.java b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/util/ValueConverter.java index be3c85d23..6ebed2966 100644 --- a/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/util/ValueConverter.java +++ b/ontodriver-rdf4j/src/main/java/cz/cvut/kbss/ontodriver/rdf4j/util/ValueConverter.java @@ -57,7 +57,7 @@ public static Optional fromRdf4jValue(Assertion assertion, Value value) if (!(value instanceof Resource)) { return Optional.empty(); } - return Optional.of(new cz.cvut.kbss.ontodriver.model.Value<>(NamedResource.create(value.stringValue()))); + return Optional.of(NamedResource.create(value.stringValue())); case ANNOTATION_PROPERTY: // Intentional fall-through case PROPERTY: return resolveUnknownPropertyTypeValue(assertion, value); diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerTestSupport.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerTestSupport.java index 0800b76f7..1f4ec1589 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerTestSupport.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerTestSupport.java @@ -3,6 +3,7 @@ import cz.cvut.kbss.ontodriver.model.Axiom; import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.environment.Generator; +import cz.cvut.kbss.ontodriver.rdf4j.environment.Vocabulary; import java.util.Iterator; import java.util.List; @@ -17,6 +18,8 @@ public class ListHandlerTestSupport { static final String LIST_PROPERTY = "http://krizik.felk.cvut.cz/ontologies/2008/6/sequences.owl#hasListProperty"; static final String NEXT_NODE_PROPERTY = "http://krizik.felk.cvut.cz/ontologies/2008/6/sequences.owl#hasNext"; + static final String NODE_CONTENT_PROPERTY = + "http://krizik.felk.cvut.cz/ontologies/2008/6/sequences.owl#hasContents"; static void verifyListContent(List> expected, List> actual) { assertEquals(expected.size(), actual.size()); @@ -34,7 +37,7 @@ static List generateList() { static List generateList(int count) { return IntStream.range(0, count) - .mapToObj(i -> NamedResource.create("http://krizik.felk.cvut.cz/ontologies/jopa/elem" + i)) + .mapToObj(i -> NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "elem" + i)) .collect(Collectors.toList()); } } diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerWithStorageTestBase.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerWithStorageTestBase.java index 8c2a68bc8..6a4273dfd 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerWithStorageTestBase.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ListHandlerWithStorageTestBase.java @@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -abstract class ListHandlerWithStorageTestBase> { +abstract class ListHandlerWithStorageTestBase { static final NamedResource OWNER = NamedResource.create(Generator.generateUri()); @@ -42,9 +42,6 @@ abstract class ListHandlerWithStorageTestBase handler; - @AfterEach public void tearDown() throws Exception { connector.close(); @@ -60,14 +57,4 @@ void verifyListContent(Collection> expected, Collection> axioms = generateAxiomsForList(descriptor); - handler.updateList(descriptor); - connector.commit(); - connector.begin(); - verifyListContent(axioms, handler.loadList((D) descriptor)); - } - - abstract Collection> generateAxiomsForList(V listDescriptor); } diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerTest.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerTest.java index f0394ed52..2722a58d3 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerTest.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerTest.java @@ -58,7 +58,6 @@ import static cz.cvut.kbss.ontodriver.rdf4j.ListHandlerTestSupport.generateList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.any; @@ -78,27 +77,24 @@ @MockitoSettings(strictness = Strictness.LENIENT) public class ReferencedListHandlerTest { - private static final String NODE_CONTENT_PROPERTY = - "http://krizik.felk.cvut.cz/ontologies/2008/6/sequences.owl#hasContents"; - private static final ValueFactory vf = SimpleValueFactory.getInstance(); private static final Resource owner = vf.createIRI(OWNER.toString()); private static final IRI hasListProperty = vf.createIRI(LIST_PROPERTY); private static final IRI nextNodeProperty = vf.createIRI(NEXT_NODE_PROPERTY); - private static final IRI nodeContentProperty = vf.createIRI(NODE_CONTENT_PROPERTY); + private static final IRI nodeContentProperty = vf.createIRI(ListHandlerTestSupport.NODE_CONTENT_PROPERTY); private static final Assertion hasListAssertion = Assertion.createObjectPropertyAssertion(URI.create(LIST_PROPERTY), false); private static final Assertion nextNodeAssertion = Assertion.createObjectPropertyAssertion(URI.create(NEXT_NODE_PROPERTY), false); private static final Assertion nodeContentAssertion = Assertion.createObjectPropertyAssertion( - URI.create(NODE_CONTENT_PROPERTY), false); + URI.create(ListHandlerTestSupport.NODE_CONTENT_PROPERTY), false); @Mock private Connector connector; private ReferencedListDescriptor listDescriptor; - private ReferencedListHandler handler; + private ReferencedListHandler handler; private final List added = new ArrayList<>(); private final List removed = new ArrayList<>(); @@ -120,13 +116,6 @@ public void setUp() throws Exception { }).when(connector).removeStatements(anyCollection()); } - @Test - public void staticFactoryMethodForReferencedLists() { - final ListHandler h = ListHandler.createForReferencedList(connector, vf); - assertNotNull(h); - assertTrue(h instanceof ReferencedListHandler); - } - @Test public void loadsReferencedList() throws Exception { final List refList = generateList(); @@ -142,7 +131,7 @@ public void loadsReferencedList() throws Exception { private List initListNodes(List content) { final List nodes = new ArrayList<>(); for (int i = 0; i < content.size(); i++) { - nodes.add(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/SEQ_" + i)); + nodes.add(URI.create(OWNER + "SEQ_" + i)); } return nodes; } @@ -181,7 +170,7 @@ private List initStatementsForList(List nodes, @Test public void throwsICViolationWhenThereIsNoContentInHeadNode() throws Exception { - final IRI headNode = vf.createIRI("http://krizik.felk.cvut.cz/ontologies/jopa/SEQ0"); + final IRI headNode = vf.createIRI(OWNER + "-SEQ_0"); when(connector.findStatements(eq(owner), eq(hasListProperty), eq(null), anyBoolean(), eq(Collections.emptySet()))).thenReturn( Collections.singleton(vf.createStatement(owner, hasListProperty, headNode))); @@ -286,7 +275,7 @@ private static ReferencedListValueDescriptor initValues(int count Assertion.createObjectPropertyAssertion(URI.create(LIST_PROPERTY), false), Assertion.createObjectPropertyAssertion(URI.create(NEXT_NODE_PROPERTY), false), Assertion.createObjectPropertyAssertion( - URI.create(NODE_CONTENT_PROPERTY), false)); + URI.create(ListHandlerTestSupport.NODE_CONTENT_PROPERTY), false)); for (int i = 0; i < count; i++) { desc.addValue(NamedResource.create("http://krizik.felk.cvut.cz/ontologies/jopa/entityA_" + i)); } @@ -344,10 +333,10 @@ void persistListSupportsSavingDataPropertyValuesAsListElements() throws Exceptio final ReferencedListValueDescriptor desc = new ReferencedListValueDescriptor<>(OWNER, Assertion.createObjectPropertyAssertion(URI.create(LIST_PROPERTY), false), Assertion.createObjectPropertyAssertion(URI.create(NEXT_NODE_PROPERTY), - false), Assertion.createDataPropertyAssertion(URI.create(NODE_CONTENT_PROPERTY), false)); + false), Assertion.createDataPropertyAssertion(URI.create(ListHandlerTestSupport.NODE_CONTENT_PROPERTY), false)); IntStream.range(0, 5).mapToObj(i -> Generator.randomInt()).forEach(desc::addValue); - final ReferencedListHandler sut = new ReferencedListHandler<>(connector, vf); + final ReferencedListHandler sut = new ReferencedListHandler(connector, vf); sut.persistList(desc); final ArgumentCaptor captor = ArgumentCaptor.forClass(Collection.class); verify(connector).addStatements(captor.capture()); diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerWithStorageTest.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerWithStorageTest.java index fb043162d..888ea0447 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerWithStorageTest.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/ReferencedListHandlerWithStorageTest.java @@ -17,26 +17,30 @@ */ package cz.cvut.kbss.ontodriver.rdf4j; -import cz.cvut.kbss.ontodriver.descriptor.ReferencedListDescriptor; import cz.cvut.kbss.ontodriver.descriptor.ReferencedListValueDescriptor; -import cz.cvut.kbss.ontodriver.model.*; +import cz.cvut.kbss.ontodriver.model.Assertion; +import cz.cvut.kbss.ontodriver.model.Axiom; +import cz.cvut.kbss.ontodriver.model.AxiomImpl; +import cz.cvut.kbss.ontodriver.model.NamedResource; +import cz.cvut.kbss.ontodriver.model.Value; +import cz.cvut.kbss.ontodriver.rdf4j.environment.Vocabulary; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.net.URI; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class ReferencedListHandlerWithStorageTest - extends ListHandlerWithStorageTestBase> { +public class ReferencedListHandlerWithStorageTest extends ListHandlerWithStorageTestBase { private static final String NODE_CONTENT_PROPERTY = "http://krizik.felk.cvut.cz/ontologies/2008/6/sequences.owl#hasContents"; + private ReferencedListHandler handler; + @BeforeEach public void setUp() throws Exception { connector = repositoryProvider.createConnector(false); @@ -61,21 +65,20 @@ private ReferencedListValueDescriptor initValues(int count) { Assertion.createObjectPropertyAssertion(URI.create(NEXT_NODE_PROPERTY), false), Assertion.createObjectPropertyAssertion(URI.create(NODE_CONTENT_PROPERTY), false)); for (int i = 0; i < count; i++) { - desc.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#EntityA_" + i)); + desc.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "EntityA_" + i)); } return desc; } - @Override - Collection> generateAxiomsForList(ReferencedListValueDescriptor listDescriptor) { + Collection> generateAxiomsForList( + ReferencedListValueDescriptor listDescriptor) { final Collection> axioms = new ArrayList<>(listDescriptor.getValues().size()); if (listDescriptor.getValues().isEmpty()) { return axioms; } int counter = 0; final String uriBase = OWNER.getIdentifier().toString(); - for (NamedResource val : (List)listDescriptor.getValues()) { + for (NamedResource val : listDescriptor.getValues()) { NamedResource node = NamedResource.create(uriBase + "-SEQ_" + counter++); Axiom ax = new AxiomImpl<>(node, listDescriptor.getNodeContent(), new Value<>(val)); @@ -136,11 +139,19 @@ public void updatesListByAppendingSeveralNewValues() throws Exception { updated.addValue(r); } for (int i = 0; i < 5; i++) { - updated.addValue(NamedResource.create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Appended_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Appended_" + i)); } updateAndCheck(updated); } + void updateAndCheck(ReferencedListValueDescriptor descriptor) throws Exception { + final Collection> axioms = generateAxiomsForList(descriptor); + handler.updateList(descriptor); + connector.commit(); + connector.begin(); + verifyListContent(axioms, handler.loadList(descriptor)); + } + @Test public void updatesListByRemovingSeveralValuesFromTheEnd() throws Exception { final ReferencedListValueDescriptor original = persistOriginalList(); @@ -159,8 +170,7 @@ public void updatesListByReplacingSomeElements() throws Exception { final ReferencedListValueDescriptor updated = initValues(0); for (int i = 0; i < original.getValues().size(); i++) { if (i % 2 != 0) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Modified_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Modified_" + i)); } else { updated.addValue(original.getValues().get(i)); } @@ -174,8 +184,7 @@ public void updatesListByPrependingSeveralNewElements() throws Exception { final ReferencedListValueDescriptor updated = initValues(0); for (int i = 0; i < 4; i++) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Prepended_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Prepended_" + i)); } for (NamedResource elem : original.getValues()) { updated.addValue(elem); @@ -189,8 +198,7 @@ public void updatesListByReplacingTheWholeListWithNewElements() throws Exception final ReferencedListValueDescriptor updated = initValues(0); for (int i = 0; i < original.getValues().size() + 2; i++) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Replacement_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Replacement_" + i)); } updateAndCheck(updated); } @@ -207,5 +215,4 @@ public void updatesListByRemovingSomeOfTheElements() throws Exception { } updateAndCheck(updated); } - } diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerTest.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerTest.java index ee742420e..ae1683d06 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerTest.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerTest.java @@ -25,6 +25,7 @@ import cz.cvut.kbss.ontodriver.model.Axiom; import cz.cvut.kbss.ontodriver.model.NamedResource; import cz.cvut.kbss.ontodriver.rdf4j.connector.Connector; +import cz.cvut.kbss.ontodriver.rdf4j.environment.Vocabulary; import cz.cvut.kbss.ontodriver.rdf4j.exception.Rdf4jDriverException; import cz.cvut.kbss.ontodriver.rdf4j.util.Rdf4jUtils; import org.eclipse.rdf4j.model.IRI; @@ -80,7 +81,6 @@ public class SimpleListHandlerTest { private static IRI hasListProperty = vf.createIRI(LIST_PROPERTY); private static IRI nextNodeProperty = vf.createIRI(NEXT_NODE_PROPERTY); - @Mock private Connector connector; @@ -120,13 +120,6 @@ public void setUp() throws Exception { this.handler = new SimpleListHandler(connector, vf); } - @Test - public void staticFactoryMethodForSimpleLists() { - final ListHandler h = ListHandler.createForSimpleList(connector, vf); - assertNotNull(h); - assertTrue(h instanceof SimpleListHandler); - } - @Test public void loadsEmptyListAndReturnsEmptyCollection() throws Exception { when(connector.findStatements(eq(owner), eq(hasListProperty), any(), eq(false), anySet())).thenReturn(Collections.emptyList()); @@ -186,7 +179,7 @@ public void throwsICViolationExceptionWhenMultipleNodeSuccessorsAreFound() throw final Collection stmts = new HashSet<>(); stmts.add(mock(Statement.class)); stmts.add(mock(Statement.class)); - final Resource firstElem = vf.createIRI("http://krizik.felk.cvut.cz/ontologies/jopa/firstElem"); + final Resource firstElem = vf.createIRI(Vocabulary.INDIVIDUAL_IRI_BASE + "firstElem"); final Statement firstStmt = vf.createStatement(owner, hasListProperty, firstElem); when(connector.findStatements(owner, hasListProperty, null, false, Collections.emptySet())) @@ -200,7 +193,7 @@ public void throwsICViolationExceptionWhenMultipleNodeSuccessorsAreFound() throw @Test public void throwsICViolationExceptionWhenLiteralIsFoundInList() throws Exception { - final Resource firstElem = vf.createIRI("http://krizik.felk.cvut.cz/ontologies/jopa/firstElem"); + final Resource firstElem = vf.createIRI(Vocabulary.INDIVIDUAL_IRI_BASE + "firstElem"); final Statement firstStmt = vf.createStatement(owner, hasListProperty, firstElem); when(connector.findStatements(owner, hasListProperty, null, false, Collections.emptySet())) .thenReturn(Collections.singleton(firstStmt)); diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerWithStorageTest.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerWithStorageTest.java index 4f5bc7ad7..c9f821315 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerWithStorageTest.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/SimpleListHandlerWithStorageTest.java @@ -17,9 +17,13 @@ */ package cz.cvut.kbss.ontodriver.rdf4j; -import cz.cvut.kbss.ontodriver.descriptor.SimpleListDescriptor; import cz.cvut.kbss.ontodriver.descriptor.SimpleListValueDescriptor; -import cz.cvut.kbss.ontodriver.model.*; +import cz.cvut.kbss.ontodriver.model.Assertion; +import cz.cvut.kbss.ontodriver.model.Axiom; +import cz.cvut.kbss.ontodriver.model.AxiomImpl; +import cz.cvut.kbss.ontodriver.model.NamedResource; +import cz.cvut.kbss.ontodriver.model.Value; +import cz.cvut.kbss.ontodriver.rdf4j.environment.Vocabulary; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,13 +34,14 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -public class SimpleListHandlerWithStorageTest - extends ListHandlerWithStorageTestBase { +public class SimpleListHandlerWithStorageTest extends ListHandlerWithStorageTestBase { + + private SimpleListHandler sut; @BeforeEach public void setUp() throws Exception { connector = repositoryProvider.createConnector(false); - this.handler = new SimpleListHandler(connector, connector.getValueFactory()); + this.sut = new SimpleListHandler(connector, connector.getValueFactory()); connector.begin(); } @@ -45,10 +50,10 @@ public void persistsSimpleList() throws Exception { final SimpleListValueDescriptor descriptor = initValues(8); final Collection> axioms = generateAxiomsForList(descriptor); - handler.persistList(descriptor); + sut.persistList(descriptor); connector.commit(); connector.begin(); - verifyListContent(axioms, handler.loadList(descriptor)); + verifyListContent(axioms, sut.loadList(descriptor)); } private SimpleListValueDescriptor initValues(int count) { @@ -56,13 +61,11 @@ private SimpleListValueDescriptor initValues(int count) { Assertion.createObjectPropertyAssertion(URI.create(LIST_PROPERTY), false), Assertion.createObjectPropertyAssertion(URI.create(NEXT_NODE_PROPERTY), false)); for (int i = 0; i < count; i++) { - desc.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#EntityA_" + i)); + desc.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "EntityA_" + i)); } return desc; } - @Override Collection> generateAxiomsForList(SimpleListValueDescriptor listDescriptor) { final Collection> axioms = new ArrayList<>(listDescriptor.getValues().size()); if (listDescriptor.getValues().isEmpty()) { @@ -87,22 +90,22 @@ public void persistsEmptyList() throws Exception { final SimpleListValueDescriptor descriptor = initValues(0); final Collection> axioms = generateAxiomsForList(descriptor); - handler.persistList(descriptor); + sut.persistList(descriptor); connector.commit(); connector.begin(); - verifyListContent(axioms, handler.loadList(descriptor)); + verifyListContent(axioms, sut.loadList(descriptor)); } @Test public void updatesListByPersistingValuesWhenTheOriginalWasEmpty() throws Exception { final SimpleListValueDescriptor descriptor = initValues(5); final Collection> axioms = generateAxiomsForList(descriptor); - assertTrue(handler.loadList(descriptor).isEmpty()); + assertTrue(sut.loadList(descriptor).isEmpty()); - handler.updateList(descriptor); + sut.updateList(descriptor); connector.commit(); connector.begin(); - verifyListContent(axioms, handler.loadList(descriptor)); + verifyListContent(axioms, sut.loadList(descriptor)); } @Test @@ -110,18 +113,18 @@ public void updatesListByClearingAllValues() throws Exception { persistOriginalList(); final SimpleListValueDescriptor updated = initValues(0); - handler.updateList(updated); + sut.updateList(updated); connector.commit(); connector.begin(); - assertTrue(handler.loadList(updated).isEmpty()); + assertTrue(sut.loadList(updated).isEmpty()); } private SimpleListValueDescriptor persistOriginalList() throws Exception { final SimpleListValueDescriptor original = initValues(10); - handler.persistList(original); + sut.persistList(original); connector.commit(); connector.begin(); - assertFalse(handler.loadList(original).isEmpty()); + assertFalse(sut.loadList(original).isEmpty()); return original; } @@ -134,12 +137,19 @@ public void updatesListByAppendingSeveralNewValues() throws Exception { updated.addValue(r); } for (int i = 0; i < 5; i++) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Appended_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Appended_" + i)); } updateAndCheck(updated); } + void updateAndCheck(SimpleListValueDescriptor descriptor) throws Exception { + final Collection> axioms = generateAxiomsForList(descriptor); + sut.updateList(descriptor); + connector.commit(); + connector.begin(); + verifyListContent(axioms, sut.loadList(descriptor)); + } + @Test public void updatesListByRemovingSeveralValuesFromTheEnd() throws Exception { final SimpleListValueDescriptor original = persistOriginalList(); @@ -158,8 +168,7 @@ public void updatesListByReplacingSomeElements() throws Exception { final SimpleListValueDescriptor updated = initValues(0); for (int i = 0; i < original.getValues().size(); i++) { if (i % 2 != 0) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Modified_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Modified_" + i)); } else { updated.addValue(original.getValues().get(i)); } @@ -173,8 +182,7 @@ public void updatesListByPrependingSeveralNewElements() throws Exception { final SimpleListValueDescriptor updated = initValues(0); for (int i = 0; i < 4; i++) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#Prepended_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Prepended_" + i)); } for (NamedResource elem : original.getValues()) { updated.addValue(elem); @@ -188,8 +196,7 @@ public void updatesListByReplacingTheWholeListWithNewElements() throws Exception final SimpleListValueDescriptor updated = initValues(0); for (int i = 0; i < original.getValues().size() + 2; i++) { - updated.addValue(NamedResource - .create("http://krizik.felk.cvut.cz/ontologies/jopa/entities#REplacement_" + i)); + updated.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "Replacement_" + i)); } updateAndCheck(updated); } @@ -214,24 +221,24 @@ public void updatesByInsertingElementsMultipleTimesInOneTransaction() throws Exc final SimpleListValueDescriptor updatedFirst = initValues(0); for (int i = 0; i < original.getValues().size(); i++) { if (original.getValues().size() / 2 == i) { - updatedFirst.addValue(NamedResource.create("http://krizik.felk.cvut.cz/ontologies/jopa/added")); + updatedFirst.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "added")); } updatedFirst.addValue(original.getValues().get(i)); } Collection> axioms = generateAxiomsForList(updatedFirst); - handler.updateList(updatedFirst); - verifyListContent(axioms, handler.loadList(updatedFirst)); + sut.updateList(updatedFirst); + verifyListContent(axioms, sut.loadList(updatedFirst)); final SimpleListValueDescriptor updatedSecond = initValues(0); for (int i = 0; i < original.getValues().size() - 1; i++) { updatedSecond.addValue(original.getValues().get(i)); } - updatedSecond.addValue(NamedResource.create("http://krizik.felk.cvut.cz/ontologies/jopa/addedSecond")); + updatedSecond.addValue(NamedResource.create(Vocabulary.INDIVIDUAL_IRI_BASE + "addedSecond")); updatedSecond.addValue(original.getValues().get(original.getValues().size() - 1)); axioms = generateAxiomsForList(updatedSecond); - handler.updateList(updatedSecond); - verifyListContent(axioms, handler.loadList(updatedSecond)); + sut.updateList(updatedSecond); + verifyListContent(axioms, sut.loadList(updatedSecond)); } } diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Generator.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Generator.java index ed4ad4f8b..08587d016 100644 --- a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Generator.java +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Generator.java @@ -42,7 +42,7 @@ public static GeneratedData initTestData(Repository repository) throws Repositor final GeneratedData data = new GeneratedData(); int classCount = randomPositiveInt(10); for (int i = 0; i < classCount; i++) { - final String cls = "https://onto.fel.cvut.cz/ontologies/jopa/entities#OWLClass" + RAND.nextInt(); + final String cls = Vocabulary.CLASS_IRI_BASE + RAND.nextInt(); data.classes.add(cls); int individualCount = randomPositiveInt(20); for (int j = 0; j < individualCount; j++) { @@ -65,15 +65,14 @@ private static void generatePropertiesWithValues(IRI individual, GeneratedData d final ValueFactory vf = connection.getValueFactory(); final int propCount = randomPositiveInt(20); for (int i = 0; i < propCount; i++) { - final String property = "https://onto.fel.cvut.cz/ontologies/jopa/attributes#property" + RAND.nextInt(); + final String property = Vocabulary.PROPERTY_IRI_BASE + RAND.nextInt(); final IRI propertyUri = vf.createIRI(property); final int valueCount = randomPositiveInt(5); final boolean isOp = RAND.nextBoolean(); for (int j = 0; j < valueCount; j++) { if (isOp) { final Assertion a = Assertion.createObjectPropertyAssertion(URI.create(property), false); - final String object = - "https://onto.fel.cvut.cz/ontologies/jopa/entities#OWLClassXY_instance" + RAND.nextInt(); + final String object = Vocabulary.INDIVIDUAL_IRI_BASE + RAND.nextInt(); connection.add(individual, propertyUri, vf.createIRI(object)); data.addValue(individual.toString(), a, NamedResource.create(object)); } else { @@ -107,7 +106,7 @@ public static boolean randomBoolean() { } public static URI generateUri() { - return URI.create("https://onto.fel.cvut.cz/ontologies/jopa/individual-" + randomInt()); + return URI.create(Vocabulary.INDIVIDUAL_IRI_BASE + randomInt()); } public static class GeneratedData { diff --git a/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Vocabulary.java b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Vocabulary.java new file mode 100644 index 000000000..0c7b883dd --- /dev/null +++ b/ontodriver-rdf4j/src/test/java/cz/cvut/kbss/ontodriver/rdf4j/environment/Vocabulary.java @@ -0,0 +1,12 @@ +package cz.cvut.kbss.ontodriver.rdf4j.environment; + +public class Vocabulary { + + public static final String CLASS_IRI_BASE = "https://onto.fel.cvut.cz/ontologies/jopa/classes/"; + public static final String PROPERTY_IRI_BASE = "https://onto.fel.cvut.cz/ontologies/jopa/attributes/"; + public static final String INDIVIDUAL_IRI_BASE = "https://onto.fel.cvut.cz/ontologies/jopa/entities/"; + + private Vocabulary() { + throw new AssertionError(); + } +}