You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2018/02/15 01:55:10 UTC
[15/17] commons-rdf git commit: Remove ParserFactory -- only
ParserBuilder
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> {
-}