You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by aj...@apache.org on 2018/01/06 15:17:42 UTC

[18/44] jena git commit: Minor refactoring

Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/388583cb
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/388583cb
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/388583cb

Branch: refs/heads/master
Commit: 388583cb34ed02f3a071fb61db9bd6e6aad2983a
Parents: f68776b
Author: ajs6f <aj...@apache.org>
Authored: Sun Nov 19 16:37:54 2017 -0500
Committer: ajs6f <aj...@apache.org>
Committed: Fri Jan 5 09:26:07 2018 -0500

----------------------------------------------------------------------
 .../jena/atlas/lib/IdentityFinishCollector.java |  14 ++-
 .../apache/jena/util/TestModelCollector.java    | 113 +++++++++++++++++++
 2 files changed, 122 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/388583cb/jena-base/src/main/java/org/apache/jena/atlas/lib/IdentityFinishCollector.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/IdentityFinishCollector.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/IdentityFinishCollector.java
index 2386b4b..6d9fc47 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/IdentityFinishCollector.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/IdentityFinishCollector.java
@@ -12,8 +12,6 @@ import org.apache.jena.ext.com.google.common.collect.ImmutableSet;
 
 public interface IdentityFinishCollector<T, A> extends Collector<T, A, A> {
 
-    static Set<Characteristics> CHARACTERISTICS = ImmutableSet.of(IDENTITY_FINISH);
-
     @Override
     default Function<A, A> finisher() {
         return Function.identity();
@@ -21,17 +19,23 @@ public interface IdentityFinishCollector<T, A> extends Collector<T, A, A> {
 
     @Override
     default Set<Characteristics> characteristics() {
-        return CHARACTERISTICS;
+        return ImmutableSet.of(IDENTITY_FINISH);
     }
 
     public interface UnorderedIdentityFinishCollector<T, A> extends IdentityFinishCollector<T, A> {
 
-        static Set<Characteristics> CHARACTERISTICS = ImmutableSet.of(UNORDERED, IDENTITY_FINISH);
+        @Override
+        default Set<Characteristics> characteristics() {
+            return ImmutableSet.of(UNORDERED, IDENTITY_FINISH);
+        }
     }
 
     public interface ConcurrentUnorderedIdentityFinishCollector<T, A> extends UnorderedIdentityFinishCollector<T, A> {
 
-        static Set<Characteristics> CHARACTERISTICS = ImmutableSet.of(UNORDERED, IDENTITY_FINISH);
+        @Override
+        default Set<Characteristics> characteristics() {
+            return ImmutableSet.of(CONCURRENT, UNORDERED, IDENTITY_FINISH);
+        }
 
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/388583cb/jena-core/src/test/java/org/apache/jena/util/TestModelCollector.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/util/TestModelCollector.java b/jena-core/src/test/java/org/apache/jena/util/TestModelCollector.java
new file mode 100644
index 0000000..157b6ba
--- /dev/null
+++ b/jena-core/src/test/java/org/apache/jena/util/TestModelCollector.java
@@ -0,0 +1,113 @@
+package org.apache.jena.util;
+
+import static java.util.Collections.singleton;
+import static java.util.stream.Collector.Characteristics.*;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Stream.generate;
+import static java.util.stream.Stream.iterate;
+import static org.apache.jena.ext.com.google.common.collect.Lists.newArrayList;
+import static org.apache.jena.graph.NodeFactory.createLiteralByValue;
+import static org.apache.jena.rdf.model.ModelFactory.createDefaultModel;
+import static org.apache.jena.rdf.model.ModelFactory.createModelForGraph;
+
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Supplier;
+import java.util.stream.Collector.Characteristics;
+import java.util.stream.Stream;
+
+import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.datatypes.RDFDatatype;
+import org.apache.jena.datatypes.TypeMapper;
+import org.apache.jena.ext.com.google.common.collect.ImmutableSet;
+import org.apache.jena.graph.*;
+import org.apache.jena.graph.impl.CollectionGraph;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.util.ModelCollector.*;
+import org.junit.Test;
+
+public class TestModelCollector extends BaseTest {
+
+    private static final Model EMPTY_MODEL = ModelFactory.createDefaultModel();
+    private static final Node PREDICATE = NodeFactory.createURI("p");
+    private static final Node SUBJECT = NodeFactory.createURI("s");
+    private static final RDFDatatype INTEGER_TYPE = TypeMapper.getInstance().getTypeByValue(555);
+
+    @Test
+    public void testCharacteristics() {
+        Set<Characteristics> characteristics = ImmutableSet.of(UNORDERED, IDENTITY_FINISH);
+        assertEquals(characteristics, new UnionModelCollector().characteristics());
+        assertEquals(characteristics, new IntersectionModelCollector().characteristics());
+        characteristics = ImmutableSet.of(CONCURRENT, UNORDERED, IDENTITY_FINISH);
+        assertEquals(characteristics, new ConcurrentModelCollector(null).characteristics());
+    }
+
+    Stream<Model> fromTriples(Supplier<Triple> kernel, byte size) {
+        AtomicInteger count = new AtomicInteger();
+        return generate(kernel).collect(groupingBy(x -> count.incrementAndGet() / size)).values().stream()
+                .map(CollectionGraph::new).map(ModelFactory::createModelForGraph);
+    }
+
+    private static void test(Stream<Model> data, Model expectedResults, ModelCollector testCollector) {
+        assertTrue(data.collect(testCollector).isIsomorphicWith(expectedResults));
+    }
+
+    @Test
+    public void unionOfEmptyStreamOfModelsIsEmpty() {
+        collectors().forEach(this::unionOfEmptyStreamOfModelsIsEmpty);
+    }
+
+    private void unionOfEmptyStreamOfModelsIsEmpty(ModelCollector testCollector) {
+        assertTrue(Stream.<Model>empty().collect(testCollector).isEmpty());
+    }
+
+    private static ArrayList<ModelCollector> concurrentCollectors() {
+        return newArrayList(new UnionModelCollector().concurrent(), new IntersectionModelCollector().concurrent());
+    }
+
+    private static ArrayList<ModelCollector> collectors() {
+        return newArrayList(new UnionModelCollector(), new IntersectionModelCollector());
+    }
+
+    @Test
+    public void unionOfStreamOfEmptyModelsIsEmpty() {
+        collectors().forEach(this::unionOfStreamOfEmptyModelsIsEmpty);
+
+    }
+
+    private void unionOfStreamOfEmptyModelsIsEmpty(ModelCollector testCollector) {
+        Stream<Model> models = numbers().limit(10).map(x -> createDefaultModel());
+        test(models, EMPTY_MODEL, testCollector);
+    }
+
+    private Triple sampleFromNum(int i) {
+        return Triple.create(SUBJECT, PREDICATE, createLiteralByValue(i, INTEGER_TYPE));
+    }
+
+    @Test
+    public void allStatementsPresentInUnionOfDisjointModels() {
+        ModelCollector testCollector = new UnionModelCollector();
+        Model expectedResults = createDefaultModel();
+        Stream<Triple> addTestStatementsToRubric = numbers().limit(10).map(this::sampleFromNum)
+                .peek(t -> expectedResults.add(expectedResults.asStatement(t)));
+        Stream<Model> models = addTestStatementsToRubric.map(this::intoModel);
+        test(models, expectedResults, testCollector);
+    }
+
+    private static Stream<Integer> numbers() {
+        return generate(new AtomicInteger()::getAndIncrement);
+    }
+
+    @Test
+    public void noStatementsPresentInIntersectionOfDisjointModels() {
+        ModelCollector testCollector = new IntersectionModelCollector();
+        Stream<Model> models = iterate(0, i -> i + 1).limit(10).map(this::sampleFromNum).map(this::intoModel);
+        test(models, EMPTY_MODEL, testCollector);
+    }
+    
+    private Model intoModel(Triple t) {
+        return createModelForGraph(new CollectionGraph(singleton(t)));
+    }
+
+}