Test for TestIntersectionDatasetCollector now passes
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/bd9a4528 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/bd9a4528 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/bd9a4528 Branch: refs/heads/master Commit: bd9a4528847f8f3bfa636a8df22f7f8a223ea9e4 Parents: 2ce74c0 Author: ajs6f <[email protected]> Authored: Sun Dec 31 14:19:06 2017 -0500 Committer: ajs6f <[email protected]> Committed: Fri Jan 5 09:32:55 2018 -0500 ---------------------------------------------------------------------- .../jena/query/util/DatasetCollector.java | 21 ++++++++-------- .../jena/query/util/TestDatasetCollector.java | 1 - .../util/TestIntersectionDatasetCollector.java | 26 +++++++++++++++++--- 3 files changed, 33 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/bd9a4528/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java b/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java index 092b8f8..37fe72b 100644 --- a/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java +++ b/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java @@ -18,13 +18,10 @@ package org.apache.jena.query.util; -import static org.apache.jena.atlas.iterator.Iter.filter; import static org.apache.jena.system.Txn.executeRead; import static org.apache.jena.system.Txn.executeWrite; -import java.util.function.BiConsumer; -import java.util.function.BinaryOperator; -import java.util.function.Supplier; +import java.util.function.*; import org.apache.jena.atlas.lib.IdentityFinishCollector.UnorderedIdentityFinishCollector; import org.apache.jena.query.Dataset; @@ -87,8 +84,9 @@ public abstract class DatasetCollector implements UnorderedIdentityFinishCollect public static class IntersectionDatasetCollector extends DatasetCollector { /** - * The first element is treated differently because {@link DatasetCollector#supplier()} does - * not provide an identity element for intersection. + * The first element is treated differently because + * {@link DatasetCollector#supplier()} does not provide an identity element for + * intersection. */ boolean afterFirstElement = false; @@ -102,13 +100,16 @@ public abstract class DatasetCollector implements UnorderedIdentityFinishCollect return (d1, d2) -> { if (afterFirstElement) { d1.setDefaultModel(d1.getDefaultModel().intersection(d2.getDefaultModel())); - filter(d1.listNames(), d2::containsNamedModel).forEachRemaining(name -> { - Model intersection = d1.getNamedModel(name).intersection(d2.getNamedModel(name)); - d1.replaceNamedModel(name, intersection); + d1.listNames().forEachRemaining(name -> { + if (d2.containsNamedModel(name)) { + Model intersection = d1.getNamedModel(name).intersection(d2.getNamedModel(name)); + d1.replaceNamedModel(name, intersection); + } else d1.removeNamedModel(name); }); } else { + // first element of the stream d1.setDefaultModel(d2.getDefaultModel()); - d2.listNames().forEachRemaining(name -> d1.addNamedModel(name, d2.getNamedModel(name))); + d2.listNames().forEachRemaining(name -> d1.replaceNamedModel(name, d2.getNamedModel(name))); afterFirstElement = true; } }; http://git-wip-us.apache.org/repos/asf/jena/blob/bd9a4528/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java b/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java index 539974c..b58cd82 100644 --- a/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java +++ b/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java @@ -5,7 +5,6 @@ import static org.apache.jena.sparql.sse.SSE.parseGraph; import java.util.stream.Stream; -import org.apache.jena.ext.com.google.common.collect.Maps; import org.apache.jena.graph.*; import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; http://git-wip-us.apache.org/repos/asf/jena/blob/bd9a4528/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java b/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java index 8ee0d1f..a0dcfa0 100644 --- a/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java +++ b/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java @@ -18,10 +18,12 @@ package org.apache.jena.query.util; +import static org.apache.jena.graph.NodeFactory.createBlankNode; import static org.apache.jena.rdf.model.ModelFactory.createModelForGraph; import static org.apache.jena.sparql.sse.SSE.parseGraph; -import org.apache.jena.graph.Graph; +import java.util.stream.Stream; + import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; import org.apache.jena.rdf.model.Model; @@ -36,9 +38,25 @@ public class TestIntersectionDatasetCollector extends TestDatasetCollector { @Test public void testIntersection() { - Graph graph = parseGraph("(graph (triple <s1> <p1> <o1> ))"); - Model model = createModelForGraph(graph); - Dataset dataset = DatasetFactory.create(model); + final Model m1 = createModelForGraph(parseGraph("(graph (triple <s1> <p1> <o1> ))")); + final Dataset ds1 = DatasetFactory.create(m1); + final String graphName1 = createBlankNode().toString(); + ds1.addNamedModel(graphName1, m1); + final Model m2 = createModelForGraph(parseGraph("(graph (triple <s2> <p2> <o2> ))")); + final Dataset ds2 = DatasetFactory.create(m2); + final String graphName2 = createBlankNode().toString(); + ds2.addNamedModel(graphName2, m2); + final Model m3 = createModelForGraph(parseGraph("(graph (triple <s3> <p3> <o3> ))")); + final String graphName3 = createBlankNode().toString(); + ds1.addNamedModel(graphName3, m3); + ds2.addNamedModel(graphName3, m3); + + Dataset ds = Stream.<Dataset>builder().add(ds1).add(ds2).build().collect(testInstance()); + + assertTrue(ds.getDefaultModel().isEmpty()); + assertTrue(ds.getNamedModel(graphName1).isEmpty()); + assertTrue(ds.getNamedModel(graphName2).isEmpty()); + assertTrue(m3.isIsomorphicWith(ds.getNamedModel(graphName3))); } }
