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

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

commit 42a9461b050c1a5fad6f85d498afefefbd86a28a
Author: Bertty Contreras-Rojas <[email protected]>
AuthorDate: Tue Apr 6 00:01:05 2021 -0400

    [WAYANG-28] Add HackitTuple structure
---
 .../plugin/hackit/core/tuple/HackitTuple.java      |  78 ++++++++++++++++
 .../plugin/hackit/core/tuple/header/Header.java    | 101 +++++++++++++++++++++
 .../hackit/core/tuple/header/HeaderBuilder.java    |  14 +++
 .../hackit/core/tuple/header/HeaderLong.java       |  31 +++++++
 4 files changed, 224 insertions(+)

diff --git 
a/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/HackitTuple.java
 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/HackitTuple.java
new file mode 100644
index 0000000..f6126de
--- /dev/null
+++ 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/HackitTuple.java
@@ -0,0 +1,78 @@
+package org.apache.wayang.plugin.hackit.core.tuple;
+
+import org.apache.wayang.plugin.hackit.core.action.ActionGroup;
+import org.apache.wayang.plugin.hackit.core.tags.HackitTag;
+import org.apache.wayang.plugin.hackit.core.tuple.header.Header;
+import org.apache.wayang.plugin.hackit.core.tuple.header.HeaderBuilder;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+public class HackitTuple<K, T> implements Serializable, ActionGroup {
+    private static HeaderBuilder BUILDER;
+    private Header<K> header;
+    private T value;
+
+    static {
+        BUILDER = new HeaderBuilder();
+    }
+
+    public HackitTuple(T value){
+        this.header = BUILDER.generateHeader();
+        this.value = value;
+    }
+
+    public HackitTuple(Header<K> header, T value){
+        this.header = header;
+        this.value = value;
+    }
+
+    public Header<K> getHeader(){
+        return this.header;
+    }
+
+    public K getKey(){
+        return this.header.getId();
+    }
+
+    public T getValue(){
+        return this.value;
+    }
+
+    public void addTag(HackitTag tag){
+        this.header.addTag(tag);
+    }
+
+    public Iterator<HackitTag> getTags(){
+        return this.header.iterate();
+    }
+
+    @Override
+    public String toString() {
+        return "HackItTuple{" +
+                "header=" + header +
+                ", value=" + value +
+                '}';
+    }
+
+
+    @Override
+    public boolean hasCallback() {
+        return this.getHeader().hasCallback();
+    }
+
+    @Override
+    public boolean isHaltJob() {
+        return this.getHeader().isHaltJob();
+    }
+
+    @Override
+    public boolean isSendOut() {
+        return this.getHeader().isSendOut();
+    }
+
+    @Override
+    public boolean isSkip() {
+        return this.getHeader().isSkip();
+    }
+}
diff --git 
a/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/Header.java
 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/Header.java
new file mode 100644
index 0000000..07ae1f3
--- /dev/null
+++ 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/Header.java
@@ -0,0 +1,101 @@
+package org.apache.wayang.plugin.hackit.core.tuple.header;
+
+import org.apache.wayang.plugin.hackit.core.action.Action;
+import org.apache.wayang.plugin.hackit.core.action.ActionGroup;
+import org.apache.wayang.plugin.hackit.core.tags.HackitTag;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+public abstract class Header<K> implements Serializable, ActionGroup {
+    private K id;
+    protected int child = 0;
+    private List<HackitTag> tags;
+    private boolean has_Callback_tag = false;
+    private boolean has_skip_tag = false;
+    private boolean has_sendout_tag = false;
+    private boolean has_haltjob_tag = false;
+
+    public Header() {
+        this.id = generateID();
+    }
+
+    public Header(K id) {
+        this.id = id;
+    }
+
+    public Header(K id, int child){
+        this(id);
+        this.child = child;
+    }
+
+
+    public K getId(){
+        return this.id;
+    }
+
+    public void addTag(HackitTag tag){
+        if(this.tags == null){
+            this.tags = new ArrayList<>();
+        }
+        this.tags.add(tag);
+        updateActionVector(tag);
+    }
+
+    public void clearTags(){
+        this.tags.clear();
+        this.has_Callback_tag = false;
+        this.has_haltjob_tag  = false;
+        this.has_sendout_tag  = false;
+        this.has_skip_tag     = false;
+    }
+
+    public Iterator<HackitTag> iterate(){
+        if(this.tags == null){
+            return Collections.emptyIterator();
+        }
+        return this.tags.iterator();
+    }
+
+    public abstract Header<K> createChild();
+
+    protected abstract K generateID();
+
+    @Override
+    public String toString() {
+        return "HackItTupleHeader{" +
+                "id=" + id +
+                ", child=" + child +
+                '}';
+    }
+
+    private void updateActionVector(HackitTag tag){
+        this.has_Callback_tag = (tag.hasCallback())? true: 
this.has_Callback_tag;
+        this.has_haltjob_tag  = (tag.isHaltJob())? true: this.has_haltjob_tag;
+        this.has_sendout_tag  = (tag.isSendOut())? true: this.has_sendout_tag;
+        this.has_skip_tag     = (tag.isSkip())? true: this.has_skip_tag;
+    }
+
+    @Override
+    public boolean hasCallback() {
+        return this.has_Callback_tag;
+    }
+
+    @Override
+    public boolean isHaltJob() {
+        return this.has_haltjob_tag;
+    }
+
+    @Override
+    public boolean isSendOut() {
+        return this.has_sendout_tag;
+    }
+
+    @Override
+    public boolean isSkip() {
+        return this.has_skip_tag;
+    }
+}
diff --git 
a/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderBuilder.java
 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderBuilder.java
new file mode 100644
index 0000000..598e18c
--- /dev/null
+++ 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderBuilder.java
@@ -0,0 +1,14 @@
+package org.apache.wayang.plugin.hackit.core.tuple.header;
+
+public class HeaderBuilder {
+
+
+    public HeaderBuilder(){
+        //TODO: take from the configuration
+    }
+
+    public <T> Header<T> generateHeader(){
+        return (Header<T>) new HeaderLong();
+    }
+
+}
diff --git 
a/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderLong.java
 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderLong.java
new file mode 100644
index 0000000..68a74a7
--- /dev/null
+++ 
b/wayang-plugins/wayang-hackit/wayang-hackit-core/src/main/java/org/apache/wayang/plugin/hackit/core/tuple/header/HeaderLong.java
@@ -0,0 +1,31 @@
+package org.apache.wayang.plugin.hackit.core.tuple.header;
+
+public class HeaderLong extends Header<Long> {
+    static long base;
+
+    static{
+        base = 0;//(new Random()).nextLong();
+    }
+
+    public HeaderLong(Long id){
+        super(id);
+    }
+
+    public HeaderLong() {
+        super();
+    }
+
+    public HeaderLong(Long id, int child) {
+        super(id, child);
+    }
+
+    @Override
+    public HeaderLong createChild() {
+        return new HeaderLong(this.getId(), this.child++);
+    }
+
+    @Override
+    protected Long generateID() {
+        return base++;
+    }
+}

Reply via email to