Thread pool submit

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/a944f7b9
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/a944f7b9
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/a944f7b9

Branch: refs/heads/fluent-parser
Commit: a944f7b9e1f2ab7d64828e2b43baf440eff4def3
Parents: 0e43e6e
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Feb 15 01:54:07 2018 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Feb 15 01:54:07 2018 +0000

----------------------------------------------------------------------
 .../rdf/api/io/AbstractParserBuilder.java       | 50 +++++++++++++++-----
 .../apache/commons/rdf/api/io/AsyncImpl.java    | 48 +++++++++++++++++++
 .../commons/rdf/api/io/ParserConfigImpl.java    |  2 +
 .../simple/experimental/AbstractRDFParser.java  |  2 +-
 4 files changed, 89 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a944f7b9/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserBuilder.java
 
b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserBuilder.java
index c51cabb..bfd6b80 100644
--- 
a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserBuilder.java
+++ 
b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserBuilder.java
@@ -19,7 +19,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.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
 import org.apache.commons.rdf.api.Dataset;
@@ -41,8 +43,12 @@ public final class AbstractParserBuilder implements 
Cloneable, Serializable, Nee
 
        private static final long serialVersionUID = 1L;
 
+
+    private static final ThreadGroup THEAD_GROUP = new ThreadGroup("Commons 
RDF parsers");
+    private static final ExecutorService DEFAULT_EXECUTOR = 
Executors.newCachedThreadPool(r -> new Thread(THEAD_GROUP, r));
+       
        public AbstractParserBuilder(RDF rdf) {
-               
+               config.withRDF(rdf);
        }
        
        @Override
@@ -58,6 +64,7 @@ public final class AbstractParserBuilder implements 
Cloneable, Serializable, Nee
 
        private boolean mutable = false;
        private ParserConfigImpl config = new ParserConfigImpl();
+       private ExecutorService executor = DEFAULT_EXECUTOR;
 
        @Override
        public NeedTargetOrRDF syntax(RDFSyntax syntax) {
@@ -158,31 +165,50 @@ public final class AbstractParserBuilder implements 
Cloneable, Serializable, Nee
        }
 
        @Override
-       public Future parseAsync() {
-               // TODO Auto-generated method stub
-               return null;
+       public Future<Parsed> parseAsync() {
+               // Ensure immutable
+               AbstractParserBuilder frozen = mutable(false);
+               Parser parser = getParserOrFail(frozen.config);         
+               return frozen.executor.submit(() -> 
parser.parse(frozen.config));
        }
 
        @Override
        public Async async() {
-               // TODO Auto-generated method stub
-               return null;
+               AbstractParserBuilder c = mutable();
+               c.executor = DEFAULT_EXECUTOR;
+               return c;
        }
 
        @Override
        public Async async(ExecutorService executor) {
-               // TODO Auto-generated method stub
-               return null;
+               AbstractParserBuilder c = mutable();
+               c.executor = executor;
+               return c;
        }
 
        @Override
-       public Parsed parse() {
-               return null;
+       public Sync source(InputStream is) {
+               return source(new InputParserSource(is));
        }
 
        @Override
-       public Sync source(InputStream is) {
-               return source(new InputParserSource(is));
+       public Parsed parse() {
+               // ensure immutable copy of config
+               ParserConfigImpl c = mutable(false).config;
+               Parser parser = getParserOrFail(c);
+               return parser.parse(c);
+       }
+
+       private Parser getParserOrFail(ParserConfigImpl c) {
+               if (! c.rdf().isPresent()) {
+                       throw new IllegalStateException("ParserState has no RDF 
instance configured");
+               }
+               Optional<Parser> parser = 
c.rdf().get().parser(c.syntax().orElse(null));
+               if (! parser.isPresent()) { 
+                       throw new IllegalStateException("Unsupported RDF syntax 
" 
+                                       + c.syntax().map(t -> t.name() 
).orElse("(guess)"));
+               }
+               return parser.get();
        }
 
 }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a944f7b9/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AsyncImpl.java
----------------------------------------------------------------------
diff --git 
a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AsyncImpl.java 
b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AsyncImpl.java
new file mode 100644
index 0000000..2c0c0d5
--- /dev/null
+++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AsyncImpl.java
@@ -0,0 +1,48 @@
+/*
+ * 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 java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.apache.commons.rdf.api.fluentparser.Async;
+
+public class AsyncImpl implements Async {
+
+    public static final ThreadGroup threadGroup = new ThreadGroup("Commons RDF 
parsers");
+    private static final ExecutorService threadpool = 
Executors.newCachedThreadPool(r -> new Thread(threadGroup, r));
+       
+       @Override
+       public Async build() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Async option(Option option, Object value) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future parseAsync() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a944f7b9/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 e682c4d..0c12104 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
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
+import java.util.concurrent.ExecutorService;
 
 import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.RDF;
@@ -35,6 +36,7 @@ public final class ParserConfigImpl implements Cloneable, 
Serializable, ParserCo
        @SuppressWarnings("rawtypes")
        private ParserTarget target = null;
        private final Map<Option, Object> options = new HashMap<>();
+       private ExecutorService executor;
 
        public ParserConfigImpl() {
        }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a944f7b9/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/experimental/AbstractRDFParser.java
----------------------------------------------------------------------
diff --git 
a/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/experimental/AbstractRDFParser.java
 
b/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/experimental/AbstractRDFParser.java
index 55c8de8..f02ed19 100644
--- 
a/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/experimental/AbstractRDFParser.java
+++ 
b/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/experimental/AbstractRDFParser.java
@@ -58,7 +58,7 @@ import org.apache.commons.rdf.simple.SimpleRDF;
  * asynchronous remote execution).
  */
 public abstract class AbstractRDFParser<T extends AbstractRDFParser<T>> 
implements RDFParser, Cloneable {
-
+       
     // Basically only used for creating IRIs
     private static RDF internalRdfTermFactory = new SimpleRDF();
 

Reply via email to