DefaultAsyncParser is now in Parser interface
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/9c22589a Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/9c22589a Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/9c22589a Branch: refs/heads/fluent-parser Commit: 9c22589a6b121646dbaeed19a9733328f61dec14 Parents: 2dfd491 Author: Stian Soiland-Reyes <st...@apache.org> Authored: Mon Feb 19 09:23:53 2018 +0000 Committer: Stian Soiland-Reyes <st...@apache.org> Committed: Mon Feb 19 09:23:53 2018 +0000 ---------------------------------------------------------------------- .../commons/rdf/api/fluentparser/Sync.java | 4 --- .../org/apache/commons/rdf/api/io/Parser.java | 30 ++++++++++++++++++++ .../commons/rdf/api/io/ParserConfigBuilder.java | 25 ++++++++++++---- 3 files changed, 50 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/9c22589a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/Sync.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/Sync.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/Sync.java index 14f321d..c877180 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/Sync.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/fluentparser/Sync.java @@ -17,8 +17,6 @@ */ package org.apache.commons.rdf.api.fluentparser; -import java.util.concurrent.ExecutorService; - import org.apache.commons.rdf.api.io.Option; import org.apache.commons.rdf.api.io.Parsed; @@ -26,9 +24,7 @@ public interface Sync<T, S> extends _Buildable { Sync<T, S> build(); <V> Sync<T, S> option(Option<V> option, V value); - Async<T, S> async(); - Async<T, S> async(ExecutorService executor); Parsed<T, S> parse(); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/9c22589a/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 9e9a18a..a1040f2 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,9 +16,39 @@ */ package org.apache.commons.rdf.api.io; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + public interface Parser { @SuppressWarnings("rawtypes") Parsed parse(ParserConfig config); + @SuppressWarnings("rawtypes") + default Future<Parsed> parseAsync(ParserConfig config) { + return new DefaultAsyncParser(this, config).submit(); + } + + class DefaultAsyncParser { + private static final ThreadGroup THEAD_GROUP = new ThreadGroup("Commons RDF async parser"); + private static final ExecutorService DEFAULT_EXECUTOR = Executors + .newCachedThreadPool(r -> new Thread(THEAD_GROUP, r)); + + private final Parser syncParser; + private final ParserConfig config; + + DefaultAsyncParser(Parser parser, ParserConfig config) { + this.syncParser = parser; + this.config = config.asImmutableConfig(); + } + + Parsed parse() { + return syncParser.parse(config); + } + + Future<Parsed> submit() { + return DEFAULT_EXECUTOR.submit(this::parse); + } + } } http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/9c22589a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigBuilder.java ---------------------------------------------------------------------- diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigBuilder.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigBuilder.java index 3409173..9adc6ce 100644 --- a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigBuilder.java +++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfigBuilder.java @@ -17,9 +17,9 @@ package org.apache.commons.rdf.api.io; import java.io.InputStream; -import java.io.Serializable; import java.nio.file.Path; import java.util.Optional; +import java.util.concurrent.Future; import org.apache.commons.rdf.api.Dataset; import org.apache.commons.rdf.api.Graph; @@ -36,11 +36,9 @@ import org.apache.commons.rdf.api.fluentparser.Sync; import org.apache.commons.rdf.api.io.ParserConfig.ImmutableParserConfig; @SuppressWarnings({ "unchecked", "rawtypes" }) -public final class ParserConfigBuilder implements Serializable, NeedTargetOrRDF, NeedTargetOrRDFOrSyntax, +public final class ParserConfigBuilder implements NeedTargetOrRDF, NeedTargetOrRDFOrSyntax, NeedSourceOrBase, NeedSourceBased, OptionalTarget, Sync, Async { - private static final long serialVersionUID = 1L; - public ParserConfigBuilder(ParserConfig mutated) { this.config = mutated; } @@ -134,7 +132,7 @@ public final class ParserConfigBuilder implements Serializable, NeedTargetOrRDF, Parser parser = getParserOrFail(c); return parser.parse(c); } - + private static Parser getParserOrFail(ImmutableParserConfig c) { if (! c.rdf().isPresent()) { throw new IllegalStateException("ParserState has no RDF instance configured"); @@ -147,4 +145,21 @@ public final class ParserConfigBuilder implements Serializable, NeedTargetOrRDF, return parser.get(); } + @Override + public Future parseAsync() { + ImmutableParserConfig c = config.asImmutableConfig(); + Parser parser = getParserOrFail(c); + return parser.parseAsync(c); + } + + @Override + public Async async() { + return this; + } + + @Override + public ParserConfigBuilder build() { + return mutate(config.asImmutableConfig()); + } + }