You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@any23.apache.org by HansBrende <gi...@git.apache.org> on 2018/09/12 13:48:55 UTC
[GitHub] any23 pull request #121: ANY23-396 Add ability to run extractors in flow
Github user HansBrende commented on a diff in the pull request:
https://github.com/apache/any23/pull/121#discussion_r217037875
--- Diff: core/src/main/java/org/apache/any23/writer/BufferedTripleHandler.java ---
@@ -0,0 +1,161 @@
+package org.apache.any23.writer;
+
+import com.google.common.base.Throwables;
+import org.apache.any23.extractor.ExtractionContext;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.model.impl.LinkedHashModelFactory;
+import org.eclipse.rdf4j.model.impl.TreeModelFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+import java.util.Stack;
+import java.util.TreeMap;
+
+/**
+ * Collects all statements until end document.
+ *
+ * All statements are kept within {@link Model}.
+ *
+ * @author Jacek Grzebyta (jgrzebyta@apache.org)
+ */
+public class BufferedTripleHandler implements TripleHandler {
+
+ private static final Logger log = LoggerFactory.getLogger(BufferedTripleHandler.class);
+ private TripleHandler underlying;
+ private static boolean isDocumentFinish = false;
+
+ private static class ContextHandler {
+ ContextHandler(ExtractionContext ctx, Model m) {
+ extractionContext = ctx;
+ extractionModel = m;
+ }
+ ExtractionContext extractionContext;
+ Model extractionModel;
+ }
+
+ private static class WorkflowContext {
+ WorkflowContext(TripleHandler underlying) {
+ this.rootHandler = underlying;
+ }
+
+
+ Stack<String> extractors = new Stack<>();
+ Map<String, ContextHandler> modelMap = new TreeMap<>();
+ IRI documentIRI = null;
+ TripleHandler rootHandler ;
+ }
+
+ public BufferedTripleHandler(TripleHandler underlying) {
+ this.underlying = underlying;
+
+ // hide model in the thread
+ WorkflowContext wc = new WorkflowContext(underlying);
+ BufferedTripleHandler.workflowContext.set(wc);
+ }
+
+ private static final ThreadLocal<WorkflowContext> workflowContext = new ThreadLocal<>();
--- End diff --
Model should not be static, unless there is a very good reason for doing so?
---