You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by rp...@apache.org on 2022/11/30 11:57:32 UTC

[incubator-wayang] 01/02: Iterator process to download and continue with the pipeline

This is an automated email from the ASF dual-hosted git repository.

rpardomeza pushed a commit to branch WAYANG-agoraeo
in repository https://gitbox.apache.org/repos/asf/incubator-wayang.git

commit 46980ab85c81a141841e25d5d3b3c16509a83000
Author: Rodrigo Pardo Meza <ro...@gmail.com>
AuthorDate: Wed Nov 30 12:45:34 2022 +0100

    Iterator process to download and continue with the pipeline
---
 .../iterators/IteratorSentinelDownload.java        | 63 ++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/iterators/IteratorSentinelDownload.java b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/iterators/IteratorSentinelDownload.java
new file mode 100644
index 00000000..33c769a8
--- /dev/null
+++ b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/iterators/IteratorSentinelDownload.java
@@ -0,0 +1,63 @@
+package org.apache.wayang.agoraeo.iterators;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import java.util.stream.Stream;
+
+public abstract class IteratorSentinelDownload<Input> implements Iterator<Input> {
+
+    private String _name = "";
+    private String command = "";
+    private Process process = null;
+    private Iterator<Input> iteratorProcess = null;
+
+    public IteratorSentinelDownload(String name, String command) {
+        this.command = command;
+        this._name = name;
+    }
+
+    @Override
+    public boolean hasNext() {
+        if(this.process == null){
+            return startProcess();
+        }
+        if( !this.process.isAlive() ){
+            return this.iteratorProcess.hasNext();
+        }
+        return true;
+    }
+
+    @Override
+    public Input next() {
+        if( ! this.iteratorProcess.hasNext()){
+            return this.getDefaultValue();
+        }
+        return this.iteratorProcess.next();
+    }
+
+    private boolean startProcess(){
+        try {
+            final String name = this._name;
+            this.process = Runtime.getRuntime().exec(this.command);
+            this.iteratorProcess = getLogic(
+                    new BufferedReader(
+                            new InputStreamReader(
+                                    process.getInputStream()
+                            )
+                    ).lines()
+            ).iterator();
+            return true;
+        } catch (IOException e) {}
+        return false;
+    }
+
+    protected abstract Stream<Input> getLogic(Stream<String> baseline);
+
+    protected abstract Input getDefaultValue();
+
+    protected String getName(){
+        return this._name;
+    }
+}