diff --git a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/environment/Generators.java b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/environment/Generators.java index 90f4bd725..6390fe492 100644 --- a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/environment/Generators.java +++ b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/environment/Generators.java @@ -73,6 +73,14 @@ public static List createReferencedList(int size) { return lst; } + public static List createDataPropertyList() { + final List list = new ArrayList<>(DEFAULT_SIZE); + for (int i = DEFAULT_SIZE; i >= 0; i--) { + list.add(LocalDate.now().minusDays(i)); + } + return list; + } + public static List createListOfIdentifiers() { return createSimpleList().stream().map(OWLClassA::getUri).collect(Collectors.toList()); } diff --git a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/CreateOperationsRunner.java b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/CreateOperationsRunner.java index 7c4a2c014..dedc85eb9 100644 --- a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/CreateOperationsRunner.java +++ b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/CreateOperationsRunner.java @@ -795,10 +795,7 @@ void persistSupportsAnnotationPropertyValueMappedToSimpleLiteral() throws Except @Test void persistSupportsReferencedListsContainingDataPropertyLiteralValues() { this.em = getEntityManager("persistSupportsReferencedListsContainingDataPropertyLiteralValues", false); - entityM.setLiteralReferencedList(new ArrayList<>()); - for (int i = 5; i >= 0; i--) { - entityM.getLiteralReferencedList().add(LocalDate.now().minusDays(i)); - } + entityM.setLiteralReferencedList(Generators.createDataPropertyList()); persist(entityM); for (int i = 0; i < entityM.getLiteralReferencedList().size(); i++) { diff --git a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/UpdateOperationsRunner.java b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/UpdateOperationsRunner.java index 364012f4a..3a4ede282 100644 --- a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/UpdateOperationsRunner.java +++ b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/runner/UpdateOperationsRunner.java @@ -34,6 +34,7 @@ import java.net.URI; import java.net.URL; import java.time.Instant; +import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.*; @@ -1405,4 +1406,20 @@ void concurrentTransactionsLeaveDataInConsistentState() { final OWLClassA result = em.find(OWLClassA.class, entityA.getUri()); assertEquals(a2String, result.getStringAttribute()); } + + @Test + void updateSupportsChangesInDataPropertyReferencedLists() { + this.em = getEntityManager("updateSupportsChangesInDataPropertyReferencedLists", false); + entityM.setLiteralReferencedList(Generators.createDataPropertyList()); + persist(entityM); + + final List updatedList = new ArrayList<>(entityM.getLiteralReferencedList()); + updatedList.set(Generators.randomPositiveInt(0, updatedList.size()), LocalDate.now().minusDays(365)); + updatedList.add(LocalDate.now().plusDays(365)); + entityM.setLiteralReferencedList(updatedList); + transactional(() -> em.merge(entityM)); + + final OWLClassM result = findRequired(OWLClassM.class, entityM.getKey()); + assertEquals(updatedList, result.getLiteralReferencedList()); + } } 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 da0b2b9a8..806034dba 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 @@ -21,7 +21,6 @@ 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; @@ -185,7 +184,7 @@ void appendNewNodes(ReferencedListValueDescriptor listDescriptor, MergeRe assert i > 0; final Collection toAdd = new ArrayList<>((listDescriptor.getValues().size() - i) * 2); while (i < listDescriptor.getValues().size()) { - final Value content = toRdf4jValue(listDescriptor.getListProperty(), listDescriptor.getValues().get(i)); + final Value content = toRdf4jValue(listDescriptor.getNodeContent(), listDescriptor.getValues().get(i)); previous = createListNode(owner, hasNext, hasContent, content, context, previous, toAdd); i++; } 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 9c699a15d..ef2c95d1b 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 @@ -19,7 +19,6 @@ import cz.cvut.kbss.ontodriver.descriptor.ReferencedListDescriptor; import cz.cvut.kbss.ontodriver.exception.IntegrityConstraintViolatedException; -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; @@ -99,7 +98,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.getNodeContent(), currentContent.getObject()) .orElse(null); } @@ -145,13 +144,8 @@ public void replaceCurrentWith(T newContent) throws Rdf4jDriverException { connector.removeStatements(Collections.singleton(currentContent)); final Resource node = (Resource) currentNode.getObject(); final Statement stmt = vf - .createStatement(node, hasContentProperty, valueConverter.toRdf4jValue(listDescriptor.getListProperty(), newContent), + .createStatement(node, hasContentProperty, valueConverter.toRdf4jValue(listDescriptor.getNodeContent(), newContent), context); connector.addStatements(Collections.singleton(stmt)); } - - protected Axiom createAxiom(Resource subject, Assertion assertion, Resource value) { - final NamedResource subjectRes = NamedResource.create(subject.stringValue()); - return new AxiomImpl<>(subjectRes, assertion, new Value<>(NamedResource.create(value.stringValue()))); - } }