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:12 UTC

[17/17] commons-rdf git commit: Thread pool submit

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