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:08 UTC
[13/17] commons-rdf git commit: ParserConfig interface
ParserConfig 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/fb9a60bc
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/fb9a60bc
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/fb9a60bc
Branch: refs/heads/fluent-parser
Commit: fb9a60bc8e5cea358982fd3833be6e150752314a
Parents: 5241e75
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Feb 15 00:41:36 2018 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Feb 15 00:41:36 2018 +0000
----------------------------------------------------------------------
.../rdf/api/io/AbstractParserFactory.java | 354 +++++++++++++++++++
.../org/apache/commons/rdf/api/io/Parser.java | 25 ++
.../apache/commons/rdf/api/io/ParserConfig.java | 34 ++
.../apache/commons/rdf/simple/SimpleRDF.java | 14 +
4 files changed, 427 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/fb9a60bc/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java
----------------------------------------------------------------------
diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java
new file mode 100644
index 0000000..2e37b81
--- /dev/null
+++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/AbstractParserFactory.java
@@ -0,0 +1,354 @@
+/*
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+
+import org.apache.commons.rdf.api.Dataset;
+import org.apache.commons.rdf.api.Graph;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.RDF;
+import org.apache.commons.rdf.api.RDFSyntax;
+import org.apache.commons.rdf.api.fluentparser.Async;
+import org.apache.commons.rdf.api.fluentparser.NeedSourceBased;
+import org.apache.commons.rdf.api.fluentparser.NeedSourceOrBase;
+import org.apache.commons.rdf.api.fluentparser.NeedTargetOrRDF;
+import org.apache.commons.rdf.api.fluentparser.NeedTargetOrRDFOrSyntax;
+import org.apache.commons.rdf.api.fluentparser.OptionalTarget;
+import org.apache.commons.rdf.api.fluentparser.Sync;
+
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public final class AbstractParserFactory implements
+Cloneable,
+Serializable,
+NeedTargetOrRDF,
+NeedTargetOrRDFOrSyntax,
+NeedSourceOrBase,
+NeedSourceBased,
+OptionalTarget,
+Sync,
+Async {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public AbstractParserFactory clone() {
+ try {
+ AbstractParserFactory c = (AbstractParserFactory) super.clone();
+ c.config = (ParserConfigImpl) config.clone();
+ return c;
+ } catch (CloneNotSupportedException e) {
+ throw new IllegalStateException("AbstractParserFactory was not Cloneable", e);
+ }
+ }
+
+ static final class InputParserSource implements ParserSource {
+ private final InputStream is;
+
+ private InputParserSource(InputStream is) {
+ this.is = is;
+ }
+
+ @Override
+ public Object src() {
+ return is;
+ }
+
+ @Override
+ public InputStream inputStream() throws IOException {
+ return is;
+ }
+
+ @Override
+ public Optional iri() {
+ return Optional.empty();
+ }
+ }
+
+ private final class PathParserSource implements ParserSource<Path> {
+ private final Path path;
+
+ private PathParserSource(Path path) {
+ this.path = path;
+ }
+
+ @Override
+ public Path src() {
+ return path;
+ }
+
+ @Override
+ public InputStream inputStream() throws IOException {
+ return Files.newInputStream(path);
+ }
+
+ @Override
+ public Optional<IRI> iri() {
+ final String uri = path.toUri().toString();
+ return Optional.of(new IRIImpl(uri));
+ }
+ }
+
+ private final class IRIParserSource implements ParserSource<IRI> {
+ private final IRI iri;
+
+ private IRIParserSource(IRI iri) {
+ this.iri = iri;
+ }
+
+ @Override
+ public IRI src() {
+ return iri;
+ }
+
+ @Override
+ public InputStream inputStream() throws IOException {
+ return new URL(iri.getIRIString()).openStream();
+ }
+
+ @Override
+ public Optional<IRI> iri() {
+ return Optional.of(iri);
+ }
+ }
+
+ private final class IRIImpl implements IRI {
+ private final String uri;
+
+ private IRIImpl(String uri) {
+ this.uri = uri;
+ }
+
+ @Override
+ public String ntriplesString() {
+ return "<" + uri + ">";
+ }
+
+ @Override
+ public String getIRIString() {
+ return uri;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return (obj instanceof IRI) && ((IRI) obj).getIRIString().equals(uri);
+ }
+
+ @Override
+ public int hashCode() {
+ return uri.hashCode();
+ }
+ }
+
+ public static final class ParserConfigImpl implements Cloneable, Serializable, ParserConfig {
+ private static final long serialVersionUID = 1L;
+ private RDF rdf = null;
+ private RDFSyntax syntax = null;
+ private IRI base = null;
+ private ParserSource source = null;
+ private ParserTarget target = null;
+ final private Map<Option, Object> options = new HashMap<>();
+
+ public ParserConfigImpl() {
+ }
+
+ public ParserConfigImpl(ParserConfig old) {
+ rdf = old.rdf().orElse(null);
+ syntax = old.syntax().orElse(null);
+ base = old.base().orElse(null);
+ source = old.source().orElse(null);
+ target = old.target().orElse(null);
+ options.putAll(old.options());
+ }
+
+ @Override
+ protected Object clone() {
+ return new ParserConfigImpl(this);
+ }
+
+ @Override
+ public Optional<ParserSource> source() {
+ return Optional.of(source);
+ }
+
+ @Override
+ public Optional<IRI> base() {
+ return Optional.of(base);
+ }
+
+ @Override
+ public Optional<ParserTarget> target() {
+ return Optional.of(target);
+ }
+
+ @Override
+ public Optional<RDFSyntax> syntax() {
+ return Optional.of(syntax);
+ }
+
+ @Override
+ public Optional<RDF> rdf() {
+ return Optional.of(rdf);
+ }
+
+ @Override
+ public Map<Option, Object> options() {
+ return options;
+ }
+
+
+ }
+ private boolean mutable = false;
+ private ParserConfigImpl config = new ParserConfigImpl();
+
+ @Override
+ public NeedTargetOrRDF syntax(RDFSyntax syntax) {
+ AbstractParserFactory c = mutable();
+ c.config.syntax = syntax;
+ return c;
+ }
+
+ private AbstractParserFactory mutable(boolean mutable) {
+ if (this.mutable == mutable) {
+ return this;
+ } else {
+ AbstractParserFactory c = clone();
+ c.mutable = mutable;
+ return c;
+ }
+ }
+
+ private AbstractParserFactory mutable() {
+ return mutable(true);
+ }
+
+ @Override
+ public AbstractParserFactory build() {
+ return mutable(false);
+ }
+
+ @Override
+ public NeedSourceOrBase target(Dataset dataset) {
+ return target(dataset::add);
+
+ }
+
+ @Override
+ public NeedSourceOrBase<Graph> target(Graph graph) {
+ return target(q -> {
+ if (q.getGraphName().isPresent()) {
+ // Only add if q is in default graph
+ graph.add(q.asTriple());
+ }
+ });
+ }
+
+ @Override
+ public <T> NeedSourceOrBase<T> target(ParserTarget<T> target) {
+ AbstractParserFactory c = mutable();
+ c.config.target = target;
+ return c;
+ }
+
+ @Override
+ public NeedSourceBased base(IRI iri) {
+ AbstractParserFactory c = mutable();
+ c.config.base = iri;
+ return c;
+ }
+
+ @Override
+ public NeedSourceBased base(String iri) {
+ AbstractParserFactory c = mutable();
+ c.config.base = new IRIImpl(iri);
+ return c;
+ }
+
+ @Override
+ public Sync source(final IRI iri) {
+ return source(new IRIParserSource(iri));
+ }
+
+ public Sync source(Path path) {
+ return source(new PathParserSource(path));
+ }
+
+ @Override
+ public OptionalTarget<Dataset> rdf(RDF rdf) {
+ AbstractParserFactory c = mutable();
+ c.config.rdf = rdf;
+ return c;
+ }
+
+ @Override
+ public Sync source(ParserSource source) {
+ AbstractParserFactory c = mutable();
+ c.config.source = source;
+ return c;
+ }
+
+ @Override
+ public Sync source(String iri) {
+ return source(new IRIImpl(iri));
+ }
+
+ @Override
+ public AbstractParserFactory option(Option option, Object value) {
+ AbstractParserFactory c = mutable();
+ c.config.options.put(option, value);
+ return c;
+ }
+
+ @Override
+ public Future parseAsync() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Async async() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Async async(ExecutorService executor) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Parsed parse() {
+ return null;
+ }
+
+ @Override
+ public Sync source(InputStream is) {
+ return source(new InputParserSource(is));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/fb9a60bc/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
new file mode 100644
index 0000000..84ad2be
--- /dev/null
+++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/Parser.java
@@ -0,0 +1,25 @@
+/*
+ * 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 org.apache.commons.rdf.api.io.AbstractParserFactory.ParserConfig;
+
+public interface Parser {
+
+ Parsed parse(ParserConfig config);
+
+}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/fb9a60bc/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfig.java
----------------------------------------------------------------------
diff --git a/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfig.java b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfig.java
new file mode 100644
index 0000000..d18a268
--- /dev/null
+++ b/commons-rdf-api/src/main/java/org/apache/commons/rdf/api/io/ParserConfig.java
@@ -0,0 +1,34 @@
+/*
+ * 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.Map;
+import java.util.Optional;
+
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.RDF;
+import org.apache.commons.rdf.api.RDFSyntax;
+
+public interface ParserConfig {
+ Optional<ParserSource> source();
+ Optional<IRI> base();
+ Optional<ParserTarget> target();
+ Optional<RDFSyntax> syntax();
+ Optional<RDF> rdf();
+ Map<Option, Object> options();
+
+}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/fb9a60bc/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDF.java
----------------------------------------------------------------------
diff --git a/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDF.java b/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDF.java
index 6f6b2a5..74d2378 100644
--- a/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDF.java
+++ b/commons-rdf-simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDF.java
@@ -17,6 +17,7 @@
*/
package org.apache.commons.rdf.simple;
+import java.util.Optional;
import java.util.UUID;
import org.apache.commons.rdf.api.BlankNode;
@@ -28,7 +29,10 @@ import org.apache.commons.rdf.api.Literal;
import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.RDF;
+import org.apache.commons.rdf.api.RDFSyntax;
import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.api.io.ParserBuilder;
+import org.apache.commons.rdf.api.io.ParserFactory;
/**
* Simple RDF implementation.
@@ -109,4 +113,14 @@ public class SimpleRDF implements RDF {
throws IllegalArgumentException {
return new QuadImpl(graphName, subject, predicate, object);
}
+
+ @Override
+ public ParserFactory parserFactory() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("SimpleRDF does not support parsing");
+ }
+
+ @Override
+ public Optional<ParserBuilder> parser(RDFSyntax syntax) {
+ return Optional.empty();
+ }
}