Fixed problem with list parser - in raw rdf nodes are not reversed
Signed-off-by:Jacek Grzebyta <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/any23/repo Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/d005d7f3 Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/d005d7f3 Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/d005d7f3 Branch: refs/heads/master Commit: d005d7f306c16e75f4f6e4e395bd50e68bf73a06 Parents: a4f2cd4 Author: Jacek Grzebyta <[email protected]> Authored: Mon Nov 20 00:41:12 2017 +0000 Committer: Jacek Grzebyta <[email protected]> Committed: Mon Nov 20 00:41:12 2017 +0000 ---------------------------------------------------------------------- .../any23/extractor/yaml/ElementsProcessor.java | 61 ++++++++++---------- 1 file changed, 32 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/any23/blob/d005d7f3/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java b/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java index ca0811c..0112a45 100644 --- a/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java +++ b/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java @@ -18,11 +18,9 @@ package org.apache.any23.extractor.yaml; import com.google.common.collect.Sets; import java.util.AbstractMap; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.stream.Stream; import org.apache.any23.rdf.RDFUtils; import org.apache.any23.vocab.YAML; import org.eclipse.rdf4j.model.BNode; @@ -154,6 +152,7 @@ public class ElementsProcessor { return asMapEntry(nodeURI, model); } + @SuppressWarnings("UnusedAssignment") protected Map.Entry<Value, Model> processList(IRI ns, List<Object> object) { if (object.isEmpty() || object.stream().noneMatch((i) -> { @@ -163,33 +162,37 @@ public class ElementsProcessor { } assert ns != null : "Namespace value is null"; - // revers order - Collections.reverse(object); - - Stream<Map.Entry<Value, Model>> nodesStream = object - .stream() - .map((i) -> { - return asModel(ns, i, vf.createBNode()); - }); - // add last element - Map.Entry<Value, Model> outcome = Stream.concat(Stream.of(asMapEntry(RDF.NIL, modelFactory.createEmptyModel())), nodesStream) - .reduce((res, i) -> { - BNode currentNode = vf.createBNode(); - Value val = res.getKey(); - Model mod = res.getValue(); - - mod.add(vf.createStatement(currentNode, RDF.FIRST, i.getKey())); - mod.add(vf.createStatement(currentNode, RDF.REST, val)); - - if (i.getValue() != null) { - mod.addAll(i.getValue()); - } - - return asMapEntry(currentNode, mod); - }).get(); - - outcome.getValue().add(vf.createStatement((Resource) outcome.getKey(), RDF.TYPE, RDF.LIST)); - return outcome; + int objectSize = object.size(); + Value listRoot = null; + Resource prevNode = null; + Model finalModel = modelFactory.createEmptyModel(); + for (int i=0; i < objectSize; i++) { + Map.Entry<Value, Model> node = asModel(ns, object.get(i), RDFUtils.bnode()); + BNode currentNode = RDFUtils.bnode(); + + if (i == 0) { + listRoot = currentNode; + } + + finalModel.add(currentNode, RDF.FIRST, node.getKey(), (Resource[]) null); + + if (prevNode != null) { + finalModel.add(prevNode, RDF.REST, currentNode, (Resource[]) null); + } + + if (i == objectSize-1) { + finalModel.add(currentNode, RDF.REST, RDF.NIL, (Resource[]) null); + } + + if(node.getValue() != null) { + finalModel.addAll(node.getValue()); + } + + prevNode = currentNode; + } + + finalModel.add((Resource) listRoot, RDF.TYPE, RDF.LIST, (Resource[]) null); + return asMapEntry(listRoot, finalModel); } // hide constructor
