You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commonsrdf.apache.org by st...@apache.org on 2016/07/04 11:08:12 UTC
incubator-commonsrdf git commit: AbstractRDFParserBuilder generic
Repository: incubator-commonsrdf
Updated Branches:
refs/heads/parser-with-quads ddc545e51 -> 0a5be9dbb
AbstractRDFParserBuilder generic
so that the build methods can return the correct subtype
of itself
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/0a5be9db
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/0a5be9db
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/0a5be9db
Branch: refs/heads/parser-with-quads
Commit: 0a5be9dbb9634637e19aa3aaeb56e6865b702577
Parents: ddc545e
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jul 4 12:07:01 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jul 4 12:07:01 2016 +0100
----------------------------------------------------------------------
.../rdf/simple/AbstractRDFParserBuilder.java | 111 +++++++++----------
.../commons/rdf/simple/RDFParseException.java | 50 +++++++++
.../rdf/simple/DummyRDFParserBuilder.java | 2 +-
3 files changed, 102 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a5be9db/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java b/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
index cc5fad0..4a5b4d1 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
@@ -33,6 +33,7 @@ import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFParserBuilder;
+import org.apache.commons.rdf.api.RDFParserBuilder.ParseResult;
import org.apache.commons.rdf.api.RDFSyntax;
import org.apache.commons.rdf.api.RDFTermFactory;
@@ -53,28 +54,10 @@ import org.apache.commons.rdf.api.RDFTermFactory;
* multiple {@link #parse()} calls are thread-safe. The default {@link #parse()}
* uses a thread pool in {@link #threadGroup} - but implementations can override
* {@link #parse()} (e.g. because it has its own threading model or use
- * asynchronou remote execution).
+ * asynchronous remote execution).
*/
-public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Cloneable {
-
- public class RDFParseException extends Exception {
- private static final long serialVersionUID = 5427752643780702976L;
- public RDFParseException() {
- super();
- }
- public RDFParseException(String message, Throwable cause) {
- super(message, cause);
- }
- public RDFParseException(String message) {
- super(message);
- }
- public RDFParseException(Throwable cause) {
- super(cause);
- }
- public RDFParserBuilder getRDFParserBuilder() {
- return AbstractRDFParserBuilder.this;
- }
- }
+public abstract class AbstractRDFParserBuilder<T extends AbstractRDFParserBuilder<T>>
+ implements RDFParserBuilder, Cloneable {
public static final ThreadGroup threadGroup = new ThreadGroup("Commons RDF parsers");
private static final ExecutorService threadpool = Executors.newCachedThreadPool(r -> new Thread(threadGroup, r));
@@ -212,79 +195,85 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
private Optional<Dataset> targetDataset;
private Optional<Graph> targetGraph;
+ @SuppressWarnings("unchecked")
@Override
- public AbstractRDFParserBuilder clone() {
+ public T clone() {
try {
- return (AbstractRDFParserBuilder) super.clone();
+ return (T) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
+ @SuppressWarnings("unchecked")
+ protected T asT() {
+ return (T) this;
+ }
+
@Override
- public RDFParserBuilder rdfTermFactory(RDFTermFactory rdfTermFactory) {
- AbstractRDFParserBuilder c = clone();
+ public T rdfTermFactory(RDFTermFactory rdfTermFactory) {
+ AbstractRDFParserBuilder<T> c = clone();
c.rdfTermFactory = Optional.ofNullable(rdfTermFactory);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder contentType(RDFSyntax rdfSyntax) throws IllegalArgumentException {
- AbstractRDFParserBuilder c = clone();
+ public T contentType(RDFSyntax rdfSyntax) throws IllegalArgumentException {
+ AbstractRDFParserBuilder<T> c = clone();
c.contentTypeSyntax = Optional.ofNullable(rdfSyntax);
c.contentType = c.contentTypeSyntax.map(syntax -> syntax.mediaType);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder contentType(String contentType) throws IllegalArgumentException {
- AbstractRDFParserBuilder c = clone();
+ public T contentType(String contentType) throws IllegalArgumentException {
+ AbstractRDFParserBuilder<T> c = clone();
c.contentType = Optional.ofNullable(contentType);
c.contentTypeSyntax = c.contentType.flatMap(RDFSyntax::byMediaType);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder base(IRI base) {
- AbstractRDFParserBuilder c = clone();
+ public T base(IRI base) {
+ AbstractRDFParserBuilder<T> c = clone();
c.base = Optional.ofNullable(base);
c.base.ifPresent(i -> checkIsAbsolute(i));
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder base(String base) throws IllegalArgumentException {
+ public T base(String base) throws IllegalArgumentException {
return base(internalRdfTermFactory.createIRI(base));
}
@Override
- public RDFParserBuilder source(InputStream inputStream) {
- AbstractRDFParserBuilder c = clone();
+ public T source(InputStream inputStream) {
+ AbstractRDFParserBuilder<T> c = clone();
c.resetSource();
c.sourceInputStream = Optional.ofNullable(inputStream);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder source(Path file) {
- AbstractRDFParserBuilder c = clone();
+ public T source(Path file) {
+ AbstractRDFParserBuilder<T> c = clone();
c.resetSource();
c.sourceFile = Optional.ofNullable(file);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder source(IRI iri) {
- AbstractRDFParserBuilder c = clone();
+ public T source(IRI iri) {
+ AbstractRDFParserBuilder<T> c = clone();
c.resetSource();
c.sourceIri = Optional.ofNullable(iri);
c.sourceIri.ifPresent(i -> checkIsAbsolute(i));
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder source(String iri) throws IllegalArgumentException {
- AbstractRDFParserBuilder c = clone();
+ public T source(String iri) throws IllegalArgumentException {
+ AbstractRDFParserBuilder<T> c = clone();
c.resetSource();
c.sourceIri = Optional.ofNullable(iri).map(internalRdfTermFactory::createIRI);
c.sourceIri.ifPresent(i -> checkIsAbsolute(i));
@@ -407,7 +396,7 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
* @throws IOException If the source was not accessible (e.g. a file was not found)
* @throws IllegalStateException If the parser was not in a compatible setting (e.g. contentType was an invalid string)
*/
- protected AbstractRDFParserBuilder prepareForParsing() throws IOException, IllegalStateException {
+ protected T prepareForParsing() throws IOException, IllegalStateException {
checkSource();
checkBaseRequired();
checkContentType();
@@ -415,7 +404,7 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
// We'll make a clone of our current state which will be passed to
// parseSynchronously()
- AbstractRDFParserBuilder c = clone();
+ AbstractRDFParserBuilder<T> c = clone();
// Use a fresh SimpleRDFTermFactory for each parse
if (!c.rdfTermFactory.isPresent()) {
@@ -428,7 +417,7 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
c.base = Optional.of(internalRdfTermFactory.createIRI(baseUri.toString()));
}
- return c;
+ return c.asT();
}
/**
@@ -519,7 +508,7 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
@Override
public Future<ParseResult> parse() throws IOException, IllegalStateException {
- final AbstractRDFParserBuilder c = prepareForParsing();
+ final AbstractRDFParserBuilder<T> c = prepareForParsing();
return threadpool.submit(() -> {
c.parseSynchronusly();
return null;
@@ -527,27 +516,29 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
}
@Override
- public RDFParserBuilder target(Consumer<Quad> consumer) {
- AbstractRDFParserBuilder c = clone();
+ public T target(Consumer<Quad> consumer) {
+ AbstractRDFParserBuilder<T> c = clone();
c.resetTarget();
c.target = consumer;
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder target(Dataset dataset) {
- AbstractRDFParserBuilder c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(dataset);
+ public T target(Dataset dataset) {
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ AbstractRDFParserBuilder<T> c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(dataset);
c.resetTarget();
c.targetDataset = Optional.of(dataset);
- return c;
+ return c.asT();
}
@Override
- public RDFParserBuilder target(Graph graph) {
- AbstractRDFParserBuilder c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(graph);
+ public T target(Graph graph) {
+ @SuppressWarnings({ "rawtypes", "unchecked" }) // super calls our .clone()
+ AbstractRDFParserBuilder<T> c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(graph);
c.resetTarget();
c.targetGraph = Optional.of(graph);
- return c;
+ return c.asT();
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a5be9db/simple/src/main/java/org/apache/commons/rdf/simple/RDFParseException.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/RDFParseException.java b/simple/src/main/java/org/apache/commons/rdf/simple/RDFParseException.java
new file mode 100644
index 0000000..ed16bb2
--- /dev/null
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/RDFParseException.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.rdf.simple;
+
+import org.apache.commons.rdf.api.RDFParserBuilder;
+
+public class RDFParseException extends Exception {
+ private static final long serialVersionUID = 5427752643780702976L;
+ private RDFParserBuilder builder;
+
+ public RDFParseException(RDFParserBuilder builder) {
+ super();
+ this.builder = builder;
+ }
+
+ public RDFParseException(RDFParserBuilder builder, String message, Throwable cause) {
+ super(message, cause);
+ this.builder = builder;
+ }
+
+ public RDFParseException(RDFParserBuilder builder, String message) {
+ super(message);
+ this.builder = builder;
+ }
+
+ public RDFParseException(RDFParserBuilder builder, Throwable cause) {
+ super(cause);
+ this.builder = builder;
+ }
+
+ public RDFParserBuilder getRDFParserBuilder() {
+ return builder;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a5be9db/simple/src/test/java/org/apache/commons/rdf/simple/DummyRDFParserBuilder.java
----------------------------------------------------------------------
diff --git a/simple/src/test/java/org/apache/commons/rdf/simple/DummyRDFParserBuilder.java b/simple/src/test/java/org/apache/commons/rdf/simple/DummyRDFParserBuilder.java
index 0cb7093..baf9768 100644
--- a/simple/src/test/java/org/apache/commons/rdf/simple/DummyRDFParserBuilder.java
+++ b/simple/src/test/java/org/apache/commons/rdf/simple/DummyRDFParserBuilder.java
@@ -43,7 +43,7 @@ import org.apache.commons.rdf.api.RDFTermFactory;
*
*
*/
-public class DummyRDFParserBuilder extends AbstractRDFParserBuilder {
+public class DummyRDFParserBuilder extends AbstractRDFParserBuilder<DummyRDFParserBuilder> {
@Override
protected void parseSynchronusly() throws IOException, IllegalStateException, RDFParseException {