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++; + } +}
