Skip to content

Commit 9c1ccc0

Browse files
committed
ont-api: add RDFNodeList#contains(E) functionality + tests
1 parent 3bf9916 commit 9c1ccc0

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/main/java/com/github/owlcs/ontapi/jena/impl/OntListImpl.java

+8
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,14 @@ public ExtendedIterator<OntStatement> listSpec() {
435435
return Iter.flatMap(createSafeRDFListIterator(list.asNode()), this::toListStatements);
436436
}
437437

438+
@Override
439+
public boolean contains(E item) {
440+
RDFList list = getRDFList();
441+
if (isNil(list)) return false;
442+
return Iter.anyMatch(getModel().getGraph().find(Node.ANY, RDF.first.asNode(), item.asNode()),
443+
t -> Iter.anyMatch(createSafeRDFListIterator(list.asNode()), x -> x.contains(t)));
444+
}
445+
438446
public ExtendedIterator<OntStatement> listContent() {
439447
return Iter.of(getMainStatement()).andThen(listSpec());
440448
}

src/main/java/com/github/owlcs/ontapi/jena/model/RDFNodeList.java

+16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.apache.jena.rdf.model.RDFNode;
1919
import org.apache.jena.rdf.model.Resource;
2020

21+
import java.util.Objects;
2122
import java.util.Optional;
2223
import java.util.stream.Stream;
2324

@@ -44,6 +45,21 @@ public interface RDFNodeList<E extends RDFNode> extends Resource {
4445
*/
4546
Stream<E> members();
4647

48+
/**
49+
* Answers {@code true} if the []-list contains the specified {@code element}.
50+
* More formally, returns {@code true} if and only if
51+
* this RDF-list contains at least one element {@code e} of the type {@link E} such that {@code element.equals(e)}.
52+
*
53+
* @param element {@link E}, not {@code null}
54+
* @return boolean
55+
*/
56+
default boolean contains(E element) {
57+
Objects.requireNonNull(element);
58+
try (Stream<E> members = members()) {
59+
return members.anyMatch(element::equals);
60+
}
61+
}
62+
4763
/**
4864
* Answers the first element of the type {@link E}.
4965
*

src/test/java/com/github/owlcs/ontapi/tests/jena/OntListTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,16 @@ public void testCommonFunctionality1() {
9292
Assert.assertEquals(1, p2.propertyChains().count());
9393
Assert.assertEquals(0, p3.propertyChains().count());
9494
Assert.assertEquals(2, m.objectProperties().flatMap(OntObjectProperty::propertyChains).count());
95+
Assert.assertTrue(list.contains(p3));
96+
Assert.assertFalse(list.contains(p2));
9597
check(m, 2, OntObjectProperty.Named.class);
9698

9799
list.remove();
98100
Assert.assertEquals(2, list.members().count());
99101
Assert.assertEquals(2, list.as(RDFList.class).size());
100102
Assert.assertFalse(list.isNil());
101103
Assert.assertFalse(list.members().anyMatch(p -> p.equals(p1)));
104+
Assert.assertFalse(list.contains(p1));
102105
Assert.assertEquals(p3, list.last().orElseThrow(AssertionError::new));
103106
Assert.assertEquals(p3, list.first().orElseThrow(AssertionError::new));
104107
check(m, 2, OntObjectProperty.Named.class);
@@ -112,6 +115,9 @@ public void testCommonFunctionality1() {
112115
Assert.assertEquals(0, list.members().count());
113116
Assert.assertEquals(0, list.as(RDFList.class).size());
114117
Assert.assertTrue(list.isNil());
118+
Assert.assertFalse(list.contains(p1));
119+
Assert.assertFalse(list.contains(p2));
120+
Assert.assertFalse(list.contains(p3));
115121
check(m, 2, OntObjectProperty.class);
116122
}
117123

@@ -236,6 +242,7 @@ public void testMixedList() {
236242
Assert.assertEquals(3, list.size());
237243
Assert.assertEquals(2, list.members().count());
238244
Assert.assertEquals(3, list.addFirst(p3).members().count());
245+
Assert.assertTrue(list.contains(p3));
239246
Assert.assertEquals(4, list.size());
240247
Assert.assertEquals(2, list.get(1).members().count());
241248
Assert.assertEquals(p3, list.first().orElseThrow(AssertionError::new));
@@ -375,6 +382,10 @@ public void testTypedList() {
375382
Assert.assertEquals(15, list.spec().count());
376383
Assert.assertEquals(Arrays.asList("Y", "B", "C", "D", "X"),
377384
list.members().map(String::valueOf).collect(Collectors.toList()));
385+
Assert.assertTrue(list.contains(m.createResource("X")));
386+
Assert.assertFalse(list.contains(m.createLiteral("X")));
387+
Assert.assertFalse(list.contains(m.createResource("Y")));
388+
Assert.assertTrue(list.contains(m.createLiteral("Y")));
378389

379390
Assert.assertEquals(2, list.get(2).removeFirst()
380391
.addFirst(m.createResource("Z")).get(1)
@@ -383,6 +394,7 @@ public void testTypedList() {
383394
Assert.assertEquals(Arrays.asList("Y", "B", "Z", "X", "F"), list.members().map(String::valueOf).collect(Collectors.toList()));
384395
Assert.assertEquals(16, m.size());
385396
Assert.assertEquals(15, list.spec().count());
397+
Assert.assertTrue(list.contains(m.createResource("Z")));
386398

387399
list.clear();
388400
Assert.assertTrue(list.isNil());

0 commit comments

Comments
 (0)