diff --git a/common-parent/common-all/pom.xml b/common-parent/common-all/pom.xml
index aa83a27ce9..5c8125e93a 100644
--- a/common-parent/common-all/pom.xml
+++ b/common-parent/common-all/pom.xml
@@ -42,7 +42,7 @@
1.0.1
1.0.1
1.0.3
- 1.0.3
+ 1.0.4-SNAPSHOT
1.0.4
2.4.6-SNAPSHOT
1.0.2
diff --git a/common-parent/tuple/pom.xml b/common-parent/tuple/pom.xml
index ffebb3e416..6b007c1fa5 100644
--- a/common-parent/tuple/pom.xml
+++ b/common-parent/tuple/pom.xml
@@ -26,16 +26,16 @@
com.speedment.common
common-parent
- 1.0.4
+ 3.0.9-SNAPSHOT
tuple
- 1.0.3
+ 1.0.4-SNAPSHOT
bundle
Speedment - Common - Tuple
- A collection of Tuple classes that represent sets of a fixed length
+ A collection of Immutable Tuple classes that represent sets of a fixed length
where every element has a specific type.
https://github.com/speedment/speedment/wiki/Tuple
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/BasicTuple.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/BasicTuple.java
index 9fd69f32bf..494195d6f9 100644
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/BasicTuple.java
+++ b/common-parent/tuple/src/main/java/com/speedment/common/tuple/BasicTuple.java
@@ -25,14 +25,13 @@
*/
public interface BasicTuple {
-
/**
- * Returns the length of the Tuple. For example, a Tuple2 has a length of 2
- * whereas a Tuple3 has a length of 3.
+ * Returns the degree of the Tuple. For example, a Tuple2 has a degree of 2
+ * whereas a Tuple3 has a degree of 3.
*
- * @return the length of the Tuple
+ * @return the degree of the Tuple
*/
- int length();
+ int degree();
/**
* Gets the tuple element at the given index. For example, get(0) will
@@ -46,10 +45,10 @@ public interface BasicTuple {
R get(int index);
/**
- * Returns a {@link Stream} of all non-null values for this Tuple of the
- * given class. I.e. all non-null members of a Tuple that can be cast to the
- * given class are included in the Stream. If sequential, the Stream will
- * start with the 0:th tuple and progress upwards.
+ * Returns a {@link Stream} of all values for this Tuple of the given class.
+ * I.e. all non-null members of a Tuple that can be cast to the given class
+ * are included in the Stream. If sequential, the Stream will start with the
+ * 0:th tuple and progress upwards.
*
* @param The type of stream
* @param clazz The class of the type of the stream
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple.java
index 68fd3e3013..4d3a65cb99 100644
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple.java
+++ b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple.java
@@ -35,13 +35,14 @@ public interface Tuple extends BasicTuple {
* @return a {@link Stream} of all values for this Tuple
*/
Stream stream();
-
+
@Override
default Stream streamOf(Class clazz) {
return stream()
- .filter(s -> s != null)
.filter(clazz::isInstance)
.map(clazz::cast);
}
+ // T map(Function extends Tuple, T> mapper);
+
}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple3OfNullables.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple3OfNullables.java
deleted file mode 100644
index 3aa9baaf36..0000000000
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple3OfNullables.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- *
- * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); You may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.speedment.common.tuple;
-
-import java.util.Optional;
-
-/**
- *
- * @author pemi
- * @param Type of 0:th argument
- * @param Type of 1:st argument
- * @param Type of 2:nd argument
- */
-public interface Tuple3OfNullables extends TupleOfNullables {
-
- Optional get0();
-
- Optional get1();
-
- Optional get2();
-
-}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple4OfNullables.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple4OfNullables.java
deleted file mode 100644
index 475f1b920f..0000000000
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple4OfNullables.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- *
- * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); You may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.speedment.common.tuple;
-
-import java.util.Optional;
-
-/**
- *
- * @author pemi
- * @param Type of 0:th argument
- * @param Type of 1:st argument
- * @param Type of 2:nd argument
- * @param Type of 3:rd argument
- */
-public interface Tuple4OfNullables extends TupleOfNullables {
-
- Optional get0();
-
- Optional get1();
-
- Optional get2();
-
- Optional get3();
-
-}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple5OfNullables.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple5OfNullables.java
deleted file mode 100644
index d80697736d..0000000000
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple5OfNullables.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- *
- * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); You may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.speedment.common.tuple;
-
-import java.util.Optional;
-
-/**
- *
- * @author pemi
- * @param Type of 0:th argument
- * @param Type of 1:st argument
- * @param Type of 2:nd argument
- * @param Type of 3:rd argument
- * @param Type of 4:th argument
- */
-public interface Tuple5OfNullables extends TupleOfNullables {
-
- Optional get0();
-
- Optional get1();
-
- Optional get2();
-
- Optional get3();
-
- Optional get4();
-
-}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple6OfNullables.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple6OfNullables.java
deleted file mode 100644
index 1e48e8a6c4..0000000000
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuple6OfNullables.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- *
- * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); You may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.speedment.common.tuple;
-
-import java.util.Optional;
-
-/**
- *
- * @author pemi
- * @param Type of 0:th argument
- * @param Type of 1:st argument
- * @param Type of 2:nd argument
- * @param Type of 3:rd argument
- * @param Type of 4:th argument
- * @param Type of 5:th argument
- */
-public interface Tuple6OfNullables extends TupleOfNullables {
-
- Optional get0();
-
- Optional get1();
-
- Optional get2();
-
- Optional get3();
-
- Optional get4();
-
- Optional get5();
-
-}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleBuilder.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleBuilder.java
index c0a4d8c5ce..61476f30ab 100644
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleBuilder.java
+++ b/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleBuilder.java
@@ -1,13 +1,13 @@
/**
- *
+ *
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); You may not
* use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
+ * the License at:
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -16,91 +16,543 @@
*/
package com.speedment.common.tuple;
+import com.speedment.common.tuple.nonnullable.Tuple0;
+import com.speedment.common.tuple.nonnullable.Tuple10;
+import com.speedment.common.tuple.nonnullable.Tuple11;
+import com.speedment.common.tuple.nonnullable.Tuple12;
+import com.speedment.common.tuple.nonnullable.Tuple13;
+import com.speedment.common.tuple.nonnullable.Tuple14;
+import com.speedment.common.tuple.nonnullable.Tuple15;
+import com.speedment.common.tuple.nonnullable.Tuple16;
+import com.speedment.common.tuple.nonnullable.Tuple17;
+import com.speedment.common.tuple.nonnullable.Tuple18;
+import com.speedment.common.tuple.nonnullable.Tuple19;
+import com.speedment.common.tuple.nonnullable.Tuple1;
+import com.speedment.common.tuple.nonnullable.Tuple20;
+import com.speedment.common.tuple.nonnullable.Tuple21;
+import com.speedment.common.tuple.nonnullable.Tuple22;
+import com.speedment.common.tuple.nonnullable.Tuple23;
+import com.speedment.common.tuple.nonnullable.Tuple2;
+import com.speedment.common.tuple.nonnullable.Tuple3;
+import com.speedment.common.tuple.nonnullable.Tuple4;
+import com.speedment.common.tuple.nonnullable.Tuple5;
+import com.speedment.common.tuple.nonnullable.Tuple6;
+import com.speedment.common.tuple.nonnullable.Tuple7;
+import com.speedment.common.tuple.nonnullable.Tuple8;
+import com.speedment.common.tuple.nonnullable.Tuple9;
+
/**
- *
+ * This class is a Builder that can be used to build type safe Tuple of degree
+ * up to 23 that can hold non-null
+ * values.
+ *
* @author Per Minborg
*/
public class TupleBuilder {
-
- private Tuple current = Tuples.of();
-
+
+ private Tuple current;
+
private TupleBuilder() {
+ this.current = Tuples.of();
}
-
- public static Build0 builder() {
- return new TupleBuilder().new Build0();
+
+ static Builder0 builder() {
+ return new TupleBuilder().new Builder0();
}
-
- public class Build0 extends BaseBuilder {
-
- public Build1 add(T0 e0) {
- current = Tuples.of(e0);
- return new Build1<>();
+
+ public class Builder0 extends BaseBuilder {
+
+ public Builder1 add(T0 e0) {
+ current = Tuples.of(
+ e0
+ );
+ return new Builder1<>();
}
-
}
-
- public class Build1 extends BaseBuilder> {
-
- public Build2 add(T1 e1) {
- current = Tuples.of(current.get(0), e1);
- return new Build2<>();
+
+ public class Builder1 extends BaseBuilder> {
+
+ public Builder2 add(T1 e1) {
+ current = Tuples.of(
+ current.get(0),
+ e1
+ );
+ return new Builder2<>();
}
-
}
-
- public class Build2 extends BaseBuilder> {
-
- public Build3 add(T2 e2) {
- current = Tuples.of(current.get(0), current.get(1), e2);
- return new Build3<>();
+
+ public class Builder2 extends BaseBuilder> {
+
+ public Builder3 add(T2 e2) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ e2
+ );
+ return new Builder3<>();
}
-
}
-
- public class Build3 extends BaseBuilder> {
-
- public Build4 add(T3 e3) {
- current = Tuples.of(current.get(0), current.get(1), current.get(2), e3);
- return new Build4<>();
+
+ public class Builder3 extends BaseBuilder> {
+
+ public Builder4 add(T3 e3) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ e3
+ );
+ return new Builder4<>();
}
}
-
- public class Build4 extends BaseBuilder> {
-
- public Build5 add(T4 e4) {
- current = Tuples.of(current.get(0), current.get(1), current.get(2), current.get(3), e4);
- return new Build5<>();
+
+ public class Builder4 extends BaseBuilder> {
+
+ public Builder5 add(T4 e4) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ e4
+ );
+ return new Builder5<>();
}
-
}
-
- public class Build5 extends BaseBuilder> {
-
- public Build6 add(T5 e5) {
- current = Tuples.of(
- current.get(0),
- current.get(1),
- current.get(2),
- current.get(3),
- current.get(4),
- e5);
- return new Build6<>();
+
+ public class Builder5 extends BaseBuilder> {
+
+ public Builder6 add(T5 e5) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ e5
+ );
+ return new Builder6<>();
}
-
}
-
- public class Build6 extends BaseBuilder> {
-
+
+ public class Builder6 extends BaseBuilder> {
+
+ public Builder7 add(T6 e6) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ e6
+ );
+ return new Builder7<>();
+ }
}
-
- protected class BaseBuilder {
-
+
+ public class Builder7 extends BaseBuilder> {
+
+ public Builder8 add(T7 e7) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ e7
+ );
+ return new Builder8<>();
+ }
+ }
+
+ public class Builder8 extends BaseBuilder> {
+
+ public Builder9 add(T8 e8) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ e8
+ );
+ return new Builder9<>();
+ }
+ }
+
+ public class Builder9 extends BaseBuilder> {
+
+ public Builder10 add(T9 e9) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ e9
+ );
+ return new Builder10<>();
+ }
+ }
+
+ public class Builder10 extends BaseBuilder> {
+
+ public Builder11 add(T10 e10) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ e10
+ );
+ return new Builder11<>();
+ }
+ }
+
+ public class Builder11 extends BaseBuilder> {
+
+ public Builder12 add(T11 e11) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ e11
+ );
+ return new Builder12<>();
+ }
+ }
+
+ public class Builder12 extends BaseBuilder> {
+
+ public Builder13 add(T12 e12) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ e12
+ );
+ return new Builder13<>();
+ }
+ }
+
+ public class Builder13 extends BaseBuilder> {
+
+ public Builder14 add(T13 e13) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ e13
+ );
+ return new Builder14<>();
+ }
+ }
+
+ public class Builder14 extends BaseBuilder> {
+
+ public Builder15 add(T14 e14) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ e14
+ );
+ return new Builder15<>();
+ }
+ }
+
+ public class Builder15 extends BaseBuilder> {
+
+ public Builder16 add(T15 e15) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ e15
+ );
+ return new Builder16<>();
+ }
+ }
+
+ public class Builder16 extends BaseBuilder> {
+
+ public Builder17 add(T16 e16) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ e16
+ );
+ return new Builder17<>();
+ }
+ }
+
+ public class Builder17 extends BaseBuilder> {
+
+ public Builder18 add(T17 e17) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ e17
+ );
+ return new Builder18<>();
+ }
+ }
+
+ public class Builder18 extends BaseBuilder> {
+
+ public Builder19 add(T18 e18) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ current.get(17),
+ e18
+ );
+ return new Builder19<>();
+ }
+ }
+
+ public class Builder19 extends BaseBuilder> {
+
+ public Builder20 add(T19 e19) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ current.get(17),
+ current.get(18),
+ e19
+ );
+ return new Builder20<>();
+ }
+ }
+
+ public class Builder20 extends BaseBuilder> {
+
+ public Builder21 add(T20 e20) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ current.get(17),
+ current.get(18),
+ current.get(19),
+ e20
+ );
+ return new Builder21<>();
+ }
+ }
+
+ public class Builder21 extends BaseBuilder> {
+
+ public Builder22 add(T21 e21) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ current.get(17),
+ current.get(18),
+ current.get(19),
+ current.get(20),
+ e21
+ );
+ return new Builder22<>();
+ }
+ }
+
+ public class Builder22 extends BaseBuilder> {
+
+ public Builder23 add(T22 e22) {
+ current = Tuples.of(
+ current.get(0),
+ current.get(1),
+ current.get(2),
+ current.get(3),
+ current.get(4),
+ current.get(5),
+ current.get(6),
+ current.get(7),
+ current.get(8),
+ current.get(9),
+ current.get(10),
+ current.get(11),
+ current.get(12),
+ current.get(13),
+ current.get(14),
+ current.get(15),
+ current.get(16),
+ current.get(17),
+ current.get(18),
+ current.get(19),
+ current.get(20),
+ current.get(21),
+ e22
+ );
+ return new Builder23<>();
+ }
+ }
+
+ public class Builder23 extends BaseBuilder> {
+
+
+ }
+
+ private class BaseBuilder {
+
@SuppressWarnings("unchecked")
public T build() {
return (T) current;
}
-
}
-
-}
+}
\ No newline at end of file
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleMapper.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleMapper.java
new file mode 100644
index 0000000000..5e641c73dc
--- /dev/null
+++ b/common-parent/tuple/src/main/java/com/speedment/common/tuple/TupleMapper.java
@@ -0,0 +1,48 @@
+/**
+ *
+ * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); You may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.speedment.common.tuple;
+
+import java.util.function.Function;
+
+/**
+ * A BasicTupleMapper may be used to map from an object of type T to a Tuple
+ *
+ * @author pemi
+ * @param The return type of the apply method
+ */
+public interface TupleMapper extends Function {
+
+ /**
+ * Returns the degree of the Tuple. For example, a Tuple2 has a degree of 2
+ * whereas a Tuple3 has a degree of 3.
+ *
+ * @return the degree of the Tuple
+ */
+ int degree();
+
+ /**
+ * Gets the mapper at the given index. For example, get(0) will return the
+ * first mapper and get(1) will return the second etc.
+ *
+ * @param index of the mapper to get
+ * @return the mapper at the given index
+ * @throws IndexOutOfBoundsException if
+ * {@code index < 0 || index >= length()}
+ */
+ Function get(int index);
+
+}
diff --git a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuples.java b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuples.java
index 9b39a19c08..5972efa49c 100644
--- a/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuples.java
+++ b/common-parent/tuple/src/main/java/com/speedment/common/tuple/Tuples.java
@@ -1,13 +1,13 @@
/**
- *
+ *
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); You may not
* use this file except in compliance with the License. You may obtain a copy of
- * the License at:
- *
+ * the License at:
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -16,278 +16,2419 @@
*/
package com.speedment.common.tuple;
-import com.speedment.common.tuple.internal.*;
+import com.speedment.common.tuple.internal.nonnullable.Tuple0Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple10Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple11Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple12Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple13Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple14Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple15Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple16Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple17Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple18Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple19Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple1Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple20Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple21Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple22Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple23Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple2Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple3Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple4Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple5Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple6Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple7Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple8Impl;
+import com.speedment.common.tuple.internal.nonnullable.Tuple9Impl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple0MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple10MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple11MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple12MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple13MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple14MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple15MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple16MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple17MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple18MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple19MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple1MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple20MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple21MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple22MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple23MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple2MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple3MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple4MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple5MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple6MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple7MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple8MapperImpl;
+import com.speedment.common.tuple.internal.nonnullable.mapper.Tuple9MapperImpl;
+import com.speedment.common.tuple.nonnullable.Tuple0;
+import com.speedment.common.tuple.nonnullable.Tuple10;
+import com.speedment.common.tuple.nonnullable.Tuple11;
+import com.speedment.common.tuple.nonnullable.Tuple12;
+import com.speedment.common.tuple.nonnullable.Tuple13;
+import com.speedment.common.tuple.nonnullable.Tuple14;
+import com.speedment.common.tuple.nonnullable.Tuple15;
+import com.speedment.common.tuple.nonnullable.Tuple16;
+import com.speedment.common.tuple.nonnullable.Tuple17;
+import com.speedment.common.tuple.nonnullable.Tuple18;
+import com.speedment.common.tuple.nonnullable.Tuple19;
+import com.speedment.common.tuple.nonnullable.Tuple1;
+import com.speedment.common.tuple.nonnullable.Tuple20;
+import com.speedment.common.tuple.nonnullable.Tuple21;
+import com.speedment.common.tuple.nonnullable.Tuple22;
+import com.speedment.common.tuple.nonnullable.Tuple23;
+import com.speedment.common.tuple.nonnullable.Tuple2;
+import com.speedment.common.tuple.nonnullable.Tuple3;
+import com.speedment.common.tuple.nonnullable.Tuple4;
+import com.speedment.common.tuple.nonnullable.Tuple5;
+import com.speedment.common.tuple.nonnullable.Tuple6;
+import com.speedment.common.tuple.nonnullable.Tuple7;
+import com.speedment.common.tuple.nonnullable.Tuple8;
+import com.speedment.common.tuple.nonnullable.Tuple9;
+import java.util.function.Function;
/**
- * Basic convenience factory for Tuples.
- *
- * @author pemi
+ * A collection of static methods to produce different types of {@link Tuple }
+ * objects
+ *
+ * @author Per Minborg
*/
-public interface Tuples {
-
+public final class Tuples {
+
+ private Tuples() {
+ throw new UnsupportedOperationException();
+ }
+
/**
- * Creates and returns an empty Tuple
- *
- * @return a {@link Tuple0}
- *
+ * Creates and returns a {@link Tuple0} with the given parameters.
+ *
+ * @return a {@link Tuple0} with the given parameters.
+ *
* @see Tuple0
* @see Tuple
*/
- static Tuple0 of() {
+ public static Tuple0 of() {
return Tuple0Impl.EMPTY_TUPLE;
}
-
+
+ /**
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple0} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple0 }
+ * @return a Function that, when applied, creates a {@link Tuple0} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple0
+ * @see Tuple
+ */
+ @SuppressWarnings("unchecked")
+ public static Function toTuple() {
+ return (Function) Tuple0MapperImpl.EMPTY_MAPPER;
+ }
+
/**
- * Creates and returns a Tuple1 with the given parameters.
- *
+ * Creates and returns a {@link Tuple1} with the given parameters.
+ *
* @param type of element 0
- * @param e0 element 0
- *
- * @return a {@link Tuple1} with the given parameters
- *
+ * @param e0 element 0
+ * @return a {@link Tuple1} with the given parameters.
+ *
* @see Tuple1
* @see Tuple
*/
- static Tuple1 of(T0 e0) {
+ public static Tuple1 of(T0 e0) {
return new Tuple1Impl<>(e0);
}
-
+
/**
- * Creates and returns a Tuple2 with the given parameters.
- *
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple1} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple1 }
+ * @param target type of m0
+ * @param m0 mapper to apply for Tuple1's element 0
+ * @return a Function that, when applied, creates a {@link Tuple1} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple1
+ * @see Tuple
+ */
+ public static Function> toTuple(Function m0) {
+ return new Tuple1MapperImpl<>(m0);
+ }
+
+ /**
+ * Creates and returns a {@link Tuple2} with the given parameters.
+ *
* @param type of element 0
* @param type of element 1
- * @param e0 element 0
- * @param e1 element 1
- *
- * @return a {@link Tuple2} with the given parameters
- *
+ * @param e0 element 0
+ * @param e1 element 1
+ * @return a {@link Tuple2} with the given parameters.
+ *
* @see Tuple2
* @see Tuple
*/
- static Tuple2 of(T0 e0, T1 e1) {
+ public static Tuple2 of(T0 e0, T1 e1) {
return new Tuple2Impl<>(e0, e1);
}
-
+
/**
- * Creates and returns a Tuple3 with the given parameters.
- *
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple2} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple2 }
+ * @param target type of m0
+ * @param target type of m1
+ * @param m0 mapper to apply for Tuple2's element 0
+ * @param m1 mapper to apply for Tuple2's element 1
+ * @return a Function that, when applied, creates a {@link Tuple2} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple2
+ * @see Tuple
+ */
+ public static Function> toTuple(Function m0, Function m1) {
+ return new Tuple2MapperImpl<>(m0, m1);
+ }
+
+ /**
+ * Creates and returns a {@link Tuple3} with the given parameters.
+ *
* @param type of element 0
* @param type of element 1
* @param type of element 2
- * @param e0 element 0
- * @param e1 element 1
- * @param e2 element 2
- *
- * @return a {@link Tuple3} with the given parameters
- *
+ * @param e0 element 0
+ * @param e1 element 1
+ * @param e2 element 2
+ * @return a {@link Tuple3} with the given parameters.
+ *
* @see Tuple3
* @see Tuple
*/
- static Tuple3 of(T0 e0, T1 e1, T2 e2) {
+ public static Tuple3 of(T0 e0, T1 e1, T2 e2) {
return new Tuple3Impl<>(e0, e1, e2);
}
-
+
/**
- * Creates and returns a Tuple3 with the given parameters.
- *
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple3} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple3 }
+ * @param target type of m0
+ * @param target type of m1
+ * @param target type of m2
+ * @param m0 mapper to apply for Tuple3's element 0
+ * @param m1 mapper to apply for Tuple3's element 1
+ * @param m2 mapper to apply for Tuple3's element 2
+ * @return a Function that, when applied, creates a {@link Tuple3} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple3
+ * @see Tuple
+ */
+ public static Function> toTuple(Function m0, Function m1, Function m2) {
+ return new Tuple3MapperImpl<>(m0, m1, m2);
+ }
+
+ /**
+ * Creates and returns a {@link Tuple4} with the given parameters.
+ *
* @param type of element 0
* @param type of element 1
* @param type of element 2
* @param type of element 3
- * @param e0 element 0
- * @param e1 element 1
- * @param e2 element 2
- * @param e3 element 3
- *
- * @return a {@link Tuple4} with the given parameters
- *
+ * @param e0 element 0
+ * @param e1 element 1
+ * @param e2 element 2
+ * @param e3 element 3
+ * @return a {@link Tuple4} with the given parameters.
+ *
* @see Tuple4
* @see Tuple
*/
- static Tuple4 of(T0 e0, T1 e1, T2 e2, T3 e3) {
+ public static Tuple4 of(
+ T0 e0,
+ T1 e1,
+ T2 e2,
+ T3 e3) {
return new Tuple4Impl<>(e0, e1, e2, e3);
}
-
+
/**
- * Creates and returns a Tuple3 with the given parameters.
- *
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple4} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple4 }
+ * @param target type of m0
+ * @param target type of m1
+ * @param target type of m2
+ * @param target type of m3
+ * @param m0 mapper to apply for Tuple4's element 0
+ * @param m1 mapper to apply for Tuple4's element 1
+ * @param m2 mapper to apply for Tuple4's element 2
+ * @param m3 mapper to apply for Tuple4's element 3
+ * @return a Function that, when applied, creates a {@link Tuple4} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple4
+ * @see Tuple
+ */
+ public static Function> toTuple(
+ Function m0,
+ Function m1,
+ Function m2,
+ Function m3) {
+ return new Tuple4MapperImpl<>(m0, m1, m2, m3);
+ }
+
+ /**
+ * Creates and returns a {@link Tuple5} with the given parameters.
+ *
* @param type of element 0
* @param type of element 1
* @param type of element 2
* @param type of element 3
- * @param type of element 3
- * @param e0 element 0
- * @param e1 element 1
- * @param e2 element 2
- * @param e3 element 3
- * @param e4 element 4
- *
- * @return a {@link Tuple5} with the given parameters
- *
+ * @param type of element 4
+ * @param e0 element 0
+ * @param e1 element 1
+ * @param e2 element 2
+ * @param e3 element 3
+ * @param e4 element 4
+ * @return a {@link Tuple5} with the given parameters.
+ *
* @see Tuple5
* @see Tuple
*/
- static Tuple5 of(T0 e0, T1 e1, T2 e2, T3 e3, T4 e4) {
+ public static Tuple5 of(
+ T0 e0,
+ T1 e1,
+ T2 e2,
+ T3 e3,
+ T4 e4) {
return new Tuple5Impl<>(e0, e1, e2, e3, e4);
}
-
+
/**
- * Creates and returns a Tuple3 with the given parameters.
- *
+ * Creates and returns a Function that, when applied, creates a {@link
+ * Tuple5} from an initial object of type T by applying the given mappers.
+ *
+ * @param type of the initial object to be used by the function to
+ * create a {@link Tuple5 }
+ * @param target type of m0
+ * @param target type of m1
+ * @param target type of m2
+ * @param target type of m3
+ * @param target type of m4
+ * @param m0 mapper to apply for Tuple5's element 0
+ * @param m1 mapper to apply for Tuple5's element 1
+ * @param m2 mapper to apply for Tuple5's element 2
+ * @param m3 mapper to apply for Tuple5's element 3
+ * @param m4 mapper to apply for Tuple5's element 4
+ * @return a Function that, when applied, creates a {@link Tuple5} from
+ * an initial object of type T by applying the given mappers.
+ *
+ * @see Tuple5
+ * @see Tuple
+ */
+ public static Function> toTuple(
+ Function m0,
+ Function