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