You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by be...@apache.org on 2021/04/06 04:13:59 UTC
[incubator-wayang] 08/12: [WAYANG-28] Add HackitTuple structure
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 <be...@scalytics.io>
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++;
+ }
+}