Remove ParserFactory -- only ParserBuilder RDF now can return Parser or ParserBuilder
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/10928eac Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/10928eac Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/10928eac Branch: refs/heads/fluent-parser Commit: 10928eac7353266c1c0dc537f7bf7be03536f9f8 Parents: 725e8d0 Author: Stian Soiland-Reyes <st...@apache.org> Authored: Thu Feb 15 01:21:48 2018 +0000 Committer: Stian Soiland-Reyes <st...@apache.org> Committed: Thu Feb 15 01:24:25 2018 +0000 ---------------------------------------------------------------------- .../java/org/apache/commons/rdf/api/RDF.java | 58 +++++++++++--------- .../rdf/api/fluentparser/_Buildable.java | 3 +- .../rdf/api/fluentwriter/_Buildable.java | 3 +- .../rdf/api/io/AbstractParserFactory.java | 50 ++++++----------- .../org/apache/commons/rdf/api/io/Parser.java | 2 - .../commons/rdf/api/io/ParserBuilder.java | 6 +- .../commons/rdf/api/io/ParserConfigImpl.java | 37 +++++++++++-- .../commons/rdf/api/io/ParserFactory.java | 25 --------- 8 files changed, 85 insertions(+), 99 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/RDF.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/RDF.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/RDF.java index 633356c..581d615 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/RDF.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/RDF.java @@ -20,12 +20,13 @@ package org.apache.commons.rdf.api; import java.io.Serializable; import java.util.Locale; import java.util.Optional; +import java.util.concurrent.Future; import org.apache.commons.rdf.api.fluentparser.Async; -import org.apache.commons.rdf.api.fluentparser.OptionalTarget; import org.apache.commons.rdf.api.fluentparser.Sync; +import org.apache.commons.rdf.api.io.Parsed; +import org.apache.commons.rdf.api.io.Parser; import org.apache.commons.rdf.api.io.ParserBuilder; -import org.apache.commons.rdf.api.io.ParserFactory; /** * A RDF implementation. @@ -263,24 +264,7 @@ public interface RDF { throws IllegalArgumentException; /** - * Get a ParserFactory backed by this RDF instance. - * <p> - * The returned factory is thread-safe and can be used multiple times, - * however the builders it creates are not immutable or reusable, unless - * frozen with the {@link _Buildable#build()} method or equivalent. - * - * @return {@link ParserFactory} which can be used - * @throws UnsupportedOperationException - * If this RDF implementation does not support parsing RDF - */ - public ParserFactory parserFactory() throws UnsupportedOperationException; - - /** - * Build a configured parser for the given RDF syntax. - * <p> - * If the RDF syntax is not supported/recognized by this RDF implementation, - * return {@link Optional#empty()}, otherwise the returned {@link Optional} - * contains an {@link ParserBuilder} fluent instance. + * Get a ParserBuilder backed by this RDF instance. * <p> * The returned {@link ParserBuilder} follows a <em>fluent</em> pattern to be * set up before parsing the configured source into the configured target. @@ -290,7 +274,8 @@ public interface RDF { * {@link Async#parseAsync()} on the returned instance. For instance: * <pre>{@code * - * Parsed<Dataset, IRI> p = rdf.parser(RDFSyntax.JSONLD) + * Parsed<Dataset, IRI> p = rdf.parserBuilder() + * .syntax(RDFSyntax.JSONLD) * .source("http://example.com/data.jsonld") * .parse(); * Dataset ds = p.target().target(); @@ -304,21 +289,42 @@ public interface RDF { * For instance: * * <pre>{@code - * rdf.parser(RDFSyntax.TURTLE) - * .target(quad ->; System.out.println(quad.getSubject())) + * rdf.parserBuilder() + * .syntax(RDFSyntax.TURTLE) + * .target(quad -> System.out.println(quad.getSubject())) * .source(Paths.get("/tmp/file.ttl"). * .async().parseAsync(); * }</pre> + * The above shows how parsing can be performed asynchronously, returning + * immediately a {@link Future} eventually returning a {@link Parsed} status. * <p> * Note that the returned {@link ParserBuilder} may be mutable and not * thread-safe, and should only be used for parsing once. A reusable, * immutable builder can be created at any step with * {@link _Builder#build()}. * - * @param syntax RDF Syntax to build a parser for - * @return A {@link ParserBuilder}, or {@link Optional#empty()} if the + * @return {@link ParserBuilder} supported by this RDF implementation + * @throws UnsupportedOperationException + * If this RDF implementation does not support parsing RDF + */ + public ParserBuilder parserBuilder() throws UnsupportedOperationException; + + /** + * Return a parser for the given RDF syntax. + * <p> + * If the syntax is not supported/recognised by this RDF implementation, + * return {@link Optional#empty()}, otherwise return an {@link Optional} + * containing an {@link Parser} for that syntax. + * <p> + * If the provided syntax is <code>null</code>, + * return a generic {@link Parser} that can detect the syntax + * (e.g. from Content-Type headers or file extension), or + * {@link Optional#empty()} if this feature is not supported. + * + * @param syntax RDF Syntax to parse, or <code>null</code> for any/unknown syntax. + * @return A {@link Parser}, or {@link Optional#empty()} if the * syntax is not supported. */ - public Optional<ParserBuilder> parser(RDFSyntax syntax); + public Optional<Parser> parser(RDFSyntax syntax); } http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/_Buildable.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/_Buildable.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/_Buildable.java index 1675cfa..4f1060a 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/_Buildable.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/_Buildable.java @@ -19,7 +19,6 @@ package org.apache.commons.rdf.api.fluentparser; import org.apache.commons.rdf.api.io.Option; import org.apache.commons.rdf.api.io.Option.RequiredOption; -import org.apache.commons.rdf.api.io.ParserFactory; interface _Buildable { /** @@ -33,7 +32,7 @@ interface _Buildable { /** * Return a builder with the given option set. * <p> - * Note that implementations of {@link ParserFactory} may support different + * Note that implementations of {@link Parser} may support different * vendor-specific {@link Option} types, and are free to ignore the set * option (unless it is a {@link RequiredOption}). * <p> http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentwriter/_Buildable.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentwriter/_Buildable.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentwriter/_Buildable.java index fc89f60..95c4c7b 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentwriter/_Buildable.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentwriter/_Buildable.java @@ -19,7 +19,6 @@ package org.apache.commons.rdf.api.fluentwriter; import org.apache.commons.rdf.api.io.Option; import org.apache.commons.rdf.api.io.Option.RequiredOption; -import org.apache.commons.rdf.api.io.ParserFactory; interface _Buildable { /** @@ -33,7 +32,7 @@ interface _Buildable { /** * Return a builder with the given option set. * <p> - * Note that implementations of {@link ParserFactory} may support different + * Note that implementations of {@link Writer} may support different * vendor-specific {@link Option} types, and are free to ignore the set * option (unless it is a {@link RequiredOption}). * <p> http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java index 725a569..141b2f1 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java @@ -36,19 +36,15 @@ import org.apache.commons.rdf.api.fluentparser.OptionalTarget; import org.apache.commons.rdf.api.fluentparser.Sync; @SuppressWarnings({ "unchecked", "rawtypes" }) -public final class AbstractParserFactory implements -Cloneable, -Serializable, -NeedTargetOrRDF, -NeedTargetOrRDFOrSyntax, -NeedSourceOrBase, -NeedSourceBased, -OptionalTarget, -Sync, -Async { +public final class AbstractParserFactory implements Cloneable, Serializable, NeedTargetOrRDF, NeedTargetOrRDFOrSyntax, + NeedSourceOrBase, NeedSourceBased, OptionalTarget, Sync, Async { private static final long serialVersionUID = 1L; + public AbstractParserFactory(RDF rdf) { + + } + @Override public AbstractParserFactory clone() { try { @@ -65,21 +61,9 @@ Async { @Override public NeedTargetOrRDF syntax(RDFSyntax syntax) { - return mutate(config::withSyntax, syntax); - } - - @FunctionalInterface - private interface WithValue<V> { - ParserConfig withValue(V value); - } - - private AbstractParserFactory mutate(WithValue<V> valueFunc, V value) { - if (mutable) { - return valueFunc.withValue(value); - } else { - mutable().mutate(valueFunc, value); - } - + AbstractParserFactory c = mutable(); + c.config.withSyntax(syntax); + return c; } private AbstractParserFactory mutable(boolean mutable) { @@ -120,21 +104,21 @@ Async { @Override public <T> NeedSourceOrBase<T> target(ParserTarget<T> target) { AbstractParserFactory c = mutable(); - c.config.target = target; + c.config.withTarget(target); return c; } @Override public NeedSourceBased base(IRI iri) { AbstractParserFactory c = mutable(); - c.config.base = iri; + c.config.withBase(iri); return c; } @Override public NeedSourceBased base(String iri) { AbstractParserFactory c = mutable(); - c.config.base = new IRIImpl(iri); + c.config.withBase(new IRIImpl(iri)); return c; } @@ -150,15 +134,15 @@ Async { @Override public OptionalTarget<Dataset> rdf(RDF rdf) { AbstractParserFactory c = mutable(); - c.config.rdf = rdf; + c.config.withRDF(rdf); return c; } @Override public Sync source(ParserSource source) { AbstractParserFactory c = mutable(); - c.config.source = source; - return c; + c.config.withSource(source); + return c; } @Override @@ -169,8 +153,8 @@ Async { @Override public AbstractParserFactory option(Option option, Object value) { AbstractParserFactory c = mutable(); - c.config.options.put(option, value); - return c; + c.config.withOption(option, value); + return c; } @Override http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java index 84ad2be..fc0da77 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java @@ -16,8 +16,6 @@ */ package org.apache.commons.rdf.api.io; -import org.apache.commons.rdf.api.io.AbstractParserFactory.ParserConfig; - public interface Parser { Parsed parse(ParserConfig config); http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserBuilder.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserBuilder.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserBuilder.java index 037271c..cd3eae4 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserBuilder.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserBuilder.java @@ -1,9 +1,7 @@ package org.apache.commons.rdf.api.io; import org.apache.commons.rdf.api.Dataset; -import org.apache.commons.rdf.api.fluentparser.OptionalTarget; +import org.apache.commons.rdf.api.fluentparser.OptionalTargetOrSyntax; -public interface ParserBuilder extends OptionalTarget<Dataset> { - ParserBuilder build(); - <V> ParserBuilder option(Option<V> option, V value); +public interface ParserBuilder extends OptionalTargetOrSyntax<Dataset> { } http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigImpl.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigImpl.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigImpl.java index a61e50e..e682c4d 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigImpl.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigImpl.java @@ -30,13 +30,15 @@ public final class ParserConfigImpl implements Cloneable, Serializable, ParserCo private RDF rdf = null; private RDFSyntax syntax = null; private IRI base = null; + @SuppressWarnings("rawtypes") private ParserSource source = null; + @SuppressWarnings("rawtypes") private ParserTarget target = null; - private final Map<Option, Object> options = new HashMap<>(); + private final Map<Option, Object> options = new HashMap<>(); public ParserConfigImpl() { } - + public ParserConfigImpl(ParserConfig old) { rdf = old.rdf().orElse(null); syntax = old.syntax().orElse(null); @@ -81,10 +83,35 @@ public final class ParserConfigImpl implements Cloneable, Serializable, ParserCo return options; } - ParserConfig withSyntax(RDFSyntax syntax) { + public ParserConfig withSyntax(RDFSyntax syntax) { this.syntax = syntax; return this; } - - + + @SuppressWarnings("rawtypes") + public ParserConfig withSource(ParserSource source) { + this.source = source; + return this; + } + + public ParserConfig withTarget(ParserTarget target) { + this.target = target; + return this; + } + + public ParserConfig withRDF(RDF rdf) { + this.rdf = rdf; + return this; + } + + public ParserConfig withBase(IRI base) { + this.base = base; + return this; + } + + public <V> ParserConfig withOption(Option<V> o, V v) { + this.options.put(o, v); + return this; + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/10928eac/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserFactory.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserFactory.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserFactory.java deleted file mode 100644 index a1c82fd..0000000 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * 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.api.io; - -import org.apache.commons.rdf.api.Dataset; -import org.apache.commons.rdf.api.fluentparser.NeedTargetOrRDF; -import org.apache.commons.rdf.api.fluentparser.OptionalTargetOrSyntax; - -public interface ParserFactory extends _SupportedSyntaxes<NeedTargetOrRDF>, OptionalTargetOrSyntax<Dataset> { -}