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