You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by uc...@apache.org on 2014/06/25 11:56:40 UTC

[1/2] [FLINK-926] Add shallow copy, deep equality, and hashCode to Tuple classes

Repository: incubator-flink
Updated Branches:
  refs/heads/master 28863ee08 -> 96e76a584


http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java
index fa11812..08e5cd3 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java
@@ -28,6 +28,7 @@ import com.google.common.io.Files;
 class TupleGenerator {
 
 	// Parameters for tuple classes	
+
 	private static final String ROOT_DIRECTORY = "./src/main/java";
 
 	private static final String PACKAGE = "eu.stratosphere.api.java.tuple";
@@ -498,7 +499,7 @@ class TupleGenerator {
 
 		for (int i = FIRST; i <= LAST; i++) {
 			File tupleFile = new File(dir, "Tuple" + i + ".java");
-			PrintWriter writer = new PrintWriter(tupleFile);
+				PrintWriter writer = new PrintWriter(tupleFile);
 			writeTupleClass(writer, i);
 			writer.flush();
 			writer.close();
@@ -579,6 +580,7 @@ class TupleGenerator {
 		w.println("\t}");
 		w.println();
 
+
 		// arity accessor
 		w.println("\t@Override");
 		w.println("\tpublic int getArity() { return " + numFields + "; }");
@@ -634,7 +636,7 @@ class TupleGenerator {
 		w.println("\t}");
 		w.println();
 
-		// standard utilities (toString, equals, hashCode)
+		// standard utilities (toString, equals, hashCode, copy)
 		w.println();
 		w.println("\t// -------------------------------------------------------------------------------------------------");
 		w.println("\t// standard utilities");
@@ -659,6 +661,72 @@ class TupleGenerator {
 		w.println("\t\t\t+ \")\";");
 		w.println("\t}");
 
+
+
+
+		w.println();
+		w.println("\t/**");
+		w.println("\t * Deep equality for tuples by calling equals() on the tuple members");
+		w.println("\t * @param o the object checked for equality");
+		w.println("\t * @return true if this is equal to o.");
+		w.println("\t */");
+		w.println("\t@Override");
+		w.println("\tpublic boolean equals(Object o) {");
+		w.println("\t\tif(this == o) { return true; }");
+		w.println("\t\tif (!(o instanceof " + className + ")) { return false; }");
+		w.println("\t\t" + className + " tuple = (" + className + ") o;");
+		for (int i = 0; i < numFields; i++) {
+			String field = "f" + i;
+			w.println("\t\tif (" + field + " != null ? !" + field +".equals(tuple." +
+					field + ") : tuple." + field + " != null) { return false; }");
+		}
+		w.println("\t\treturn true;");
+		w.println("\t}");
+
+		w.println();
+		w.println("\t@Override");
+		w.println("\tpublic int hashCode() {");
+		w.println("\t\tint result = f0 != null ? f0.hashCode() : 0;");
+		for (int i = 1; i < numFields; i++) {
+			String field = "f" + i;
+			w.println("\t\tresult = 31 * result + (" + field + " != null ? " + field + ".hashCode() : 0);");
+		}
+		w.println("\t\treturn result;");
+		w.println("\t}");
+
+
+		String tupleTypes = "<";
+		for (int i = 0; i < numFields; i++) {
+			tupleTypes += "T" + i;
+			if (i < numFields - 1) {
+				tupleTypes += ",";
+			}
+		}
+		tupleTypes += ">";
+
+		w.println("\t/**");
+		w.println("\t* Shallow tuple copy.");
+		w.println("\t* @returns A new Tuple with the same fields as this.");
+		w.println("\t */");
+		w.println("\tpublic " + className + tupleTypes + " copy(){ ");
+
+		w.print("\t\treturn new " + className + tupleTypes + "(this.f0");
+		if (numFields > 1) {
+			w.println(",");
+		}
+		for (int i = 1; i < numFields; i++) {
+			String field = "f" + i;
+			w.print("\t\t\tthis." + field);
+			if (i < numFields - 1) {
+				w.println(",");
+			}
+		}
+		w.println(");");
+		w.println("\t}");
+
+		w.println();
+
+
 		// foot
 		w.println("}");
 	}


[2/2] git commit: [FLINK-926] Add shallow copy, deep equality, and hashCode to Tuple classes

Posted by uc...@apache.org.
[FLINK-926] Add shallow copy, deep equality, and hashCode to Tuple classes

This closes #17.


Project: http://git-wip-us.apache.org/repos/asf/incubator-flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-flink/commit/96e76a58
Tree: http://git-wip-us.apache.org/repos/asf/incubator-flink/tree/96e76a58
Diff: http://git-wip-us.apache.org/repos/asf/incubator-flink/diff/96e76a58

Branch: refs/heads/master
Commit: 96e76a58417a820267dae1b134f28e988e903fcf
Parents: 28863ee
Author: Kostas Tzoumas <Ko...@gmail.com>
Authored: Fri Jun 13 17:40:24 2014 +0200
Committer: uce <u....@fu-berlin.de>
Committed: Wed Jun 25 11:55:13 2014 +0200

----------------------------------------------------------------------
 .../eu/stratosphere/api/java/tuple/Tuple1.java  |  28 ++++++
 .../eu/stratosphere/api/java/tuple/Tuple10.java |  55 ++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple11.java |  58 +++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple12.java |  61 +++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple13.java |  64 ++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple14.java |  67 +++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple15.java |  70 +++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple16.java |  73 ++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple17.java |  76 ++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple18.java |  79 +++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple19.java |  82 +++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple2.java  |  31 ++++++
 .../eu/stratosphere/api/java/tuple/Tuple20.java |  85 ++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple21.java |  88 ++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple22.java |  91 +++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple23.java |  94 +++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple24.java |  97 ++++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple25.java | 100 +++++++++++++++++++
 .../eu/stratosphere/api/java/tuple/Tuple3.java  |  34 +++++++
 .../eu/stratosphere/api/java/tuple/Tuple4.java  |  37 +++++++
 .../eu/stratosphere/api/java/tuple/Tuple5.java  |  40 ++++++++
 .../eu/stratosphere/api/java/tuple/Tuple6.java  |  43 ++++++++
 .../eu/stratosphere/api/java/tuple/Tuple7.java  |  46 +++++++++
 .../eu/stratosphere/api/java/tuple/Tuple8.java  |  49 +++++++++
 .../eu/stratosphere/api/java/tuple/Tuple9.java  |  52 ++++++++++
 .../api/java/tuple/TupleGenerator.java          |  72 ++++++++++++-
 26 files changed, 1670 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple1.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple1.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple1.java
index 8752dca..66be617 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple1.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple1.java
@@ -104,4 +104,32 @@ public class Tuple1<T0> extends Tuple {
 		return "(" + StringUtils.arrayAwareToString(this.f0)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple1)) { return false; }
+		Tuple1 tuple = (Tuple1) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple1<T0> copy(){ 
+		return new Tuple1<T0>(this.f0);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple10.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple10.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple10.java
index 246350d..3a8ffd9 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple10.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple10.java
@@ -212,4 +212,59 @@ public class Tuple10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f9)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple10)) { return false; }
+		Tuple10 tuple = (Tuple10) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple10<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9> copy(){ 
+		return new Tuple10<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple11.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple11.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple11.java
index 8bfb6a8..9cafa32 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple11.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple11.java
@@ -224,4 +224,62 @@ public class Tuple11<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> extends Tuple
 			+ ", " + StringUtils.arrayAwareToString(this.f10)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple11)) { return false; }
+		Tuple11 tuple = (Tuple11) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple11<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> copy(){ 
+		return new Tuple11<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple12.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple12.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple12.java
index 810af81..81204a9 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple12.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple12.java
@@ -236,4 +236,65 @@ public class Tuple12<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> extends T
 			+ ", " + StringUtils.arrayAwareToString(this.f11)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple12)) { return false; }
+		Tuple12 tuple = (Tuple12) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple12<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11> copy(){ 
+		return new Tuple12<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple13.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple13.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple13.java
index c4f4655..5a4b02a 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple13.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple13.java
@@ -248,4 +248,68 @@ public class Tuple13<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> exte
 			+ ", " + StringUtils.arrayAwareToString(this.f12)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple13)) { return false; }
+		Tuple13 tuple = (Tuple13) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple13<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12> copy(){ 
+		return new Tuple13<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple14.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple14.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple14.java
index 737aba6..205e0b4 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple14.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple14.java
@@ -260,4 +260,71 @@ public class Tuple14<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
 			+ ", " + StringUtils.arrayAwareToString(this.f13)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple14)) { return false; }
+		Tuple14 tuple = (Tuple14) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple14<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13> copy(){ 
+		return new Tuple14<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple15.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple15.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple15.java
index 9cecba7..6ffaa4e 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple15.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple15.java
@@ -272,4 +272,74 @@ public class Tuple15<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f14)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple15)) { return false; }
+		Tuple15 tuple = (Tuple15) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple15<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> copy(){ 
+		return new Tuple15<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple16.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple16.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple16.java
index ce55e36..ed4b67d 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple16.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple16.java
@@ -284,4 +284,77 @@ public class Tuple16<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f15)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple16)) { return false; }
+		Tuple16 tuple = (Tuple16) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple16<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> copy(){ 
+		return new Tuple16<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple17.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple17.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple17.java
index 58a0c87..68760f5 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple17.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple17.java
@@ -296,4 +296,80 @@ public class Tuple17<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f16)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple17)) { return false; }
+		Tuple17 tuple = (Tuple17) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple17<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16> copy(){ 
+		return new Tuple17<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple18.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple18.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple18.java
index 6f59431..33ac5d9 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple18.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple18.java
@@ -308,4 +308,83 @@ public class Tuple18<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f17)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple18)) { return false; }
+		Tuple18 tuple = (Tuple18) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple18<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17> copy(){ 
+		return new Tuple18<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple19.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple19.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple19.java
index a3ab04d..4419ca3 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple19.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple19.java
@@ -320,4 +320,86 @@ public class Tuple19<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f18)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple19)) { return false; }
+		Tuple19 tuple = (Tuple19) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple19<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18> copy(){ 
+		return new Tuple19<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple2.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple2.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple2.java
index ec52f4e..d175511 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple2.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple2.java
@@ -116,4 +116,35 @@ public class Tuple2<T0, T1> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f1)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple2)) { return false; }
+		Tuple2 tuple = (Tuple2) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple2<T0,T1> copy(){ 
+		return new Tuple2<T0,T1>(this.f0,
+			this.f1);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple20.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple20.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple20.java
index 6b124df..ce6c03e 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple20.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple20.java
@@ -332,4 +332,89 @@ public class Tuple20<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f19)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple20)) { return false; }
+		Tuple20 tuple = (Tuple20) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple20<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19> copy(){ 
+		return new Tuple20<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple21.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple21.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple21.java
index 959fce7..7995ced 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple21.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple21.java
@@ -344,4 +344,92 @@ public class Tuple21<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f20)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple21)) { return false; }
+		Tuple21 tuple = (Tuple21) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		if (f20 != null ? !f20.equals(tuple.f20) : tuple.f20 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		result = 31 * result + (f20 != null ? f20.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple21<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20> copy(){ 
+		return new Tuple21<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19,
+			this.f20);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple22.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple22.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple22.java
index 5f26083..060f158 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple22.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple22.java
@@ -356,4 +356,95 @@ public class Tuple22<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f21)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple22)) { return false; }
+		Tuple22 tuple = (Tuple22) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		if (f20 != null ? !f20.equals(tuple.f20) : tuple.f20 != null) { return false; }
+		if (f21 != null ? !f21.equals(tuple.f21) : tuple.f21 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		result = 31 * result + (f20 != null ? f20.hashCode() : 0);
+		result = 31 * result + (f21 != null ? f21.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple22<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21> copy(){ 
+		return new Tuple22<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19,
+			this.f20,
+			this.f21);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple23.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple23.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple23.java
index 2e4f145..1910024 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple23.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple23.java
@@ -368,4 +368,98 @@ public class Tuple23<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f22)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple23)) { return false; }
+		Tuple23 tuple = (Tuple23) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		if (f20 != null ? !f20.equals(tuple.f20) : tuple.f20 != null) { return false; }
+		if (f21 != null ? !f21.equals(tuple.f21) : tuple.f21 != null) { return false; }
+		if (f22 != null ? !f22.equals(tuple.f22) : tuple.f22 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		result = 31 * result + (f20 != null ? f20.hashCode() : 0);
+		result = 31 * result + (f21 != null ? f21.hashCode() : 0);
+		result = 31 * result + (f22 != null ? f22.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple23<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22> copy(){ 
+		return new Tuple23<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19,
+			this.f20,
+			this.f21,
+			this.f22);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple24.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple24.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple24.java
index 8d09321..8ed9438 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple24.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple24.java
@@ -380,4 +380,101 @@ public class Tuple24<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f23)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple24)) { return false; }
+		Tuple24 tuple = (Tuple24) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		if (f20 != null ? !f20.equals(tuple.f20) : tuple.f20 != null) { return false; }
+		if (f21 != null ? !f21.equals(tuple.f21) : tuple.f21 != null) { return false; }
+		if (f22 != null ? !f22.equals(tuple.f22) : tuple.f22 != null) { return false; }
+		if (f23 != null ? !f23.equals(tuple.f23) : tuple.f23 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		result = 31 * result + (f20 != null ? f20.hashCode() : 0);
+		result = 31 * result + (f21 != null ? f21.hashCode() : 0);
+		result = 31 * result + (f22 != null ? f22.hashCode() : 0);
+		result = 31 * result + (f23 != null ? f23.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple24<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23> copy(){ 
+		return new Tuple24<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19,
+			this.f20,
+			this.f21,
+			this.f22,
+			this.f23);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple25.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple25.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple25.java
index 8ebe152..cf0fcdd 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple25.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple25.java
@@ -392,4 +392,104 @@ public class Tuple25<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 			+ ", " + StringUtils.arrayAwareToString(this.f24)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple25)) { return false; }
+		Tuple25 tuple = (Tuple25) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		if (f9 != null ? !f9.equals(tuple.f9) : tuple.f9 != null) { return false; }
+		if (f10 != null ? !f10.equals(tuple.f10) : tuple.f10 != null) { return false; }
+		if (f11 != null ? !f11.equals(tuple.f11) : tuple.f11 != null) { return false; }
+		if (f12 != null ? !f12.equals(tuple.f12) : tuple.f12 != null) { return false; }
+		if (f13 != null ? !f13.equals(tuple.f13) : tuple.f13 != null) { return false; }
+		if (f14 != null ? !f14.equals(tuple.f14) : tuple.f14 != null) { return false; }
+		if (f15 != null ? !f15.equals(tuple.f15) : tuple.f15 != null) { return false; }
+		if (f16 != null ? !f16.equals(tuple.f16) : tuple.f16 != null) { return false; }
+		if (f17 != null ? !f17.equals(tuple.f17) : tuple.f17 != null) { return false; }
+		if (f18 != null ? !f18.equals(tuple.f18) : tuple.f18 != null) { return false; }
+		if (f19 != null ? !f19.equals(tuple.f19) : tuple.f19 != null) { return false; }
+		if (f20 != null ? !f20.equals(tuple.f20) : tuple.f20 != null) { return false; }
+		if (f21 != null ? !f21.equals(tuple.f21) : tuple.f21 != null) { return false; }
+		if (f22 != null ? !f22.equals(tuple.f22) : tuple.f22 != null) { return false; }
+		if (f23 != null ? !f23.equals(tuple.f23) : tuple.f23 != null) { return false; }
+		if (f24 != null ? !f24.equals(tuple.f24) : tuple.f24 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		result = 31 * result + (f9 != null ? f9.hashCode() : 0);
+		result = 31 * result + (f10 != null ? f10.hashCode() : 0);
+		result = 31 * result + (f11 != null ? f11.hashCode() : 0);
+		result = 31 * result + (f12 != null ? f12.hashCode() : 0);
+		result = 31 * result + (f13 != null ? f13.hashCode() : 0);
+		result = 31 * result + (f14 != null ? f14.hashCode() : 0);
+		result = 31 * result + (f15 != null ? f15.hashCode() : 0);
+		result = 31 * result + (f16 != null ? f16.hashCode() : 0);
+		result = 31 * result + (f17 != null ? f17.hashCode() : 0);
+		result = 31 * result + (f18 != null ? f18.hashCode() : 0);
+		result = 31 * result + (f19 != null ? f19.hashCode() : 0);
+		result = 31 * result + (f20 != null ? f20.hashCode() : 0);
+		result = 31 * result + (f21 != null ? f21.hashCode() : 0);
+		result = 31 * result + (f22 != null ? f22.hashCode() : 0);
+		result = 31 * result + (f23 != null ? f23.hashCode() : 0);
+		result = 31 * result + (f24 != null ? f24.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple25<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24> copy(){ 
+		return new Tuple25<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8,
+			this.f9,
+			this.f10,
+			this.f11,
+			this.f12,
+			this.f13,
+			this.f14,
+			this.f15,
+			this.f16,
+			this.f17,
+			this.f18,
+			this.f19,
+			this.f20,
+			this.f21,
+			this.f22,
+			this.f23,
+			this.f24);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple3.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple3.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple3.java
index 5c2101c..aa6aff9 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple3.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple3.java
@@ -128,4 +128,38 @@ public class Tuple3<T0, T1, T2> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f2)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple3)) { return false; }
+		Tuple3 tuple = (Tuple3) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple3<T0,T1,T2> copy(){ 
+		return new Tuple3<T0,T1,T2>(this.f0,
+			this.f1,
+			this.f2);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple4.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple4.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple4.java
index 135aa8b..3c165b0 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple4.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple4.java
@@ -140,4 +140,41 @@ public class Tuple4<T0, T1, T2, T3> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f3)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple4)) { return false; }
+		Tuple4 tuple = (Tuple4) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple4<T0,T1,T2,T3> copy(){ 
+		return new Tuple4<T0,T1,T2,T3>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple5.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple5.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple5.java
index 383fcb4..17d3ec7 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple5.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple5.java
@@ -152,4 +152,44 @@ public class Tuple5<T0, T1, T2, T3, T4> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f4)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple5)) { return false; }
+		Tuple5 tuple = (Tuple5) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple5<T0,T1,T2,T3,T4> copy(){ 
+		return new Tuple5<T0,T1,T2,T3,T4>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple6.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple6.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple6.java
index 4b7fff4..0f519aa 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple6.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple6.java
@@ -164,4 +164,47 @@ public class Tuple6<T0, T1, T2, T3, T4, T5> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f5)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple6)) { return false; }
+		Tuple6 tuple = (Tuple6) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple6<T0,T1,T2,T3,T4,T5> copy(){ 
+		return new Tuple6<T0,T1,T2,T3,T4,T5>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple7.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple7.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple7.java
index d017246..1572083 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple7.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple7.java
@@ -176,4 +176,50 @@ public class Tuple7<T0, T1, T2, T3, T4, T5, T6> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f6)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple7)) { return false; }
+		Tuple7 tuple = (Tuple7) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple7<T0,T1,T2,T3,T4,T5,T6> copy(){ 
+		return new Tuple7<T0,T1,T2,T3,T4,T5,T6>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple8.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple8.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple8.java
index 46a9656..b4fe194 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple8.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple8.java
@@ -188,4 +188,53 @@ public class Tuple8<T0, T1, T2, T3, T4, T5, T6, T7> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f7)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple8)) { return false; }
+		Tuple8 tuple = (Tuple8) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple8<T0,T1,T2,T3,T4,T5,T6,T7> copy(){ 
+		return new Tuple8<T0,T1,T2,T3,T4,T5,T6,T7>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple9.java
----------------------------------------------------------------------
diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple9.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple9.java
index 5c4b540..0a1ce0b 100644
--- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple9.java
+++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/Tuple9.java
@@ -200,4 +200,56 @@ public class Tuple9<T0, T1, T2, T3, T4, T5, T6, T7, T8> extends Tuple {
 			+ ", " + StringUtils.arrayAwareToString(this.f8)
 			+ ")";
 	}
+
+	/**
+	 * Deep equality for tuples by calling equals() on the tuple members
+	 * @param o the object checked for equality
+	 * @return true if this is equal to o.
+	 */
+	@Override
+	public boolean equals(Object o) {
+		if(this == o) { return true; }
+		if (!(o instanceof Tuple9)) { return false; }
+		Tuple9 tuple = (Tuple9) o;
+		if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) { return false; }
+		if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) { return false; }
+		if (f2 != null ? !f2.equals(tuple.f2) : tuple.f2 != null) { return false; }
+		if (f3 != null ? !f3.equals(tuple.f3) : tuple.f3 != null) { return false; }
+		if (f4 != null ? !f4.equals(tuple.f4) : tuple.f4 != null) { return false; }
+		if (f5 != null ? !f5.equals(tuple.f5) : tuple.f5 != null) { return false; }
+		if (f6 != null ? !f6.equals(tuple.f6) : tuple.f6 != null) { return false; }
+		if (f7 != null ? !f7.equals(tuple.f7) : tuple.f7 != null) { return false; }
+		if (f8 != null ? !f8.equals(tuple.f8) : tuple.f8 != null) { return false; }
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = f0 != null ? f0.hashCode() : 0;
+		result = 31 * result + (f1 != null ? f1.hashCode() : 0);
+		result = 31 * result + (f2 != null ? f2.hashCode() : 0);
+		result = 31 * result + (f3 != null ? f3.hashCode() : 0);
+		result = 31 * result + (f4 != null ? f4.hashCode() : 0);
+		result = 31 * result + (f5 != null ? f5.hashCode() : 0);
+		result = 31 * result + (f6 != null ? f6.hashCode() : 0);
+		result = 31 * result + (f7 != null ? f7.hashCode() : 0);
+		result = 31 * result + (f8 != null ? f8.hashCode() : 0);
+		return result;
+	}
+	/**
+	* Shallow tuple copy.
+	* @returns A new Tuple with the same fields as this.
+	 */
+	public Tuple9<T0,T1,T2,T3,T4,T5,T6,T7,T8> copy(){ 
+		return new Tuple9<T0,T1,T2,T3,T4,T5,T6,T7,T8>(this.f0,
+			this.f1,
+			this.f2,
+			this.f3,
+			this.f4,
+			this.f5,
+			this.f6,
+			this.f7,
+			this.f8);
+	}
+
 }