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());
+       }
+
 }

Reply via email to