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)));
+ }
+
+}