Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 4ADCC200B6B for ; Fri, 9 Sep 2016 17:28:55 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 49711160ACA; Fri, 9 Sep 2016 15:28:55 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 45250160AC2 for ; Fri, 9 Sep 2016 17:28:54 +0200 (CEST) Received: (qmail 60212 invoked by uid 500); 9 Sep 2016 15:28:53 -0000 Mailing-List: contact commits-help@commonsrdf.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commonsrdf.incubator.apache.org Delivered-To: mailing list commits@commonsrdf.incubator.apache.org Received: (qmail 60203 invoked by uid 99); 9 Sep 2016 15:28:53 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Sep 2016 15:28:53 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 19222CA723 for ; Fri, 9 Sep 2016 15:28:53 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.344 X-Spam-Level: X-Spam-Status: No, score=-4.344 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.124] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id 6CweDZoTLUbP for ; Fri, 9 Sep 2016 15:28:51 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id D90C260D1F for ; Fri, 9 Sep 2016 15:28:49 +0000 (UTC) Received: (qmail 59793 invoked by uid 99); 9 Sep 2016 15:28:48 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Sep 2016 15:28:48 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id BDEF5EEE1C; Fri, 9 Sep 2016 15:28:48 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: stain@apache.org To: commits@commonsrdf.incubator.apache.org Date: Fri, 09 Sep 2016 15:28:55 -0000 Message-Id: <42159f729e50426fa8fe92609b25badd@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [08/11] incubator-commonsrdf git commit: AbstractRDFParserBuilder generic archived-at: Fri, 09 Sep 2016 15:28:55 -0000 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/jsonld-java Commit: 0a5be9dbb9634637e19aa3aaeb56e6865b702577 Parents: ddc545e Author: Stian Soiland-Reyes Authored: Mon Jul 4 12:07:01 2016 +0100 Committer: Stian Soiland-Reyes 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> + 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 targetDataset; private Optional 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 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 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 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 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 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 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 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 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 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 parse() throws IOException, IllegalStateException { - final AbstractRDFParserBuilder c = prepareForParsing(); + final AbstractRDFParserBuilder 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 consumer) { - AbstractRDFParserBuilder c = clone(); + public T target(Consumer consumer) { + AbstractRDFParserBuilder 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 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 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 { @Override protected void parseSynchronusly() throws IOException, IllegalStateException, RDFParseException {