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> {
-}