/**
*
* 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;
/**
* 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;
private TupleBuilder() {
this.current = Tuples.of();
}
public static Builder0 builder() {
return new TupleBuilder().new Builder0();
}
public class Builder0 extends BaseBuilder<Tuple0> {
public <T0> Builder1<T0> add(T0 e0) {
current = Tuples.of(
e0
);
return new Builder1<>();
}
}
public class Builder1<T0> extends BaseBuilder<Tuple1<T0>> {
public <T1> Builder2<T0, T1> add(T1 e1) {
current = Tuples.of(
current.get(0),
e1
);
return new Builder2<>();
}
}
public class Builder2<T0, T1> extends BaseBuilder<Tuple2<T0, T1>> {
public <T2> Builder3<T0, T1, T2> add(T2 e2) {
current = Tuples.of(
current.get(0),
current.get(1),
e2
);
return new Builder3<>();
}
}
public class Builder3<T0, T1, T2> extends BaseBuilder<Tuple3<T0, T1, T2>> {
public <T3> Builder4<T0, T1, T2, T3> add(T3 e3) {
current = Tuples.of(
current.get(0),
current.get(1),
current.get(2),
e3
);
return new Builder4<>();
}
}
public class Builder4<T0, T1, T2, T3> extends BaseBuilder<Tuple4<T0, T1, T2, T3>> {
public <T4> Builder5<T0, T1, T2, T3, T4> add(T4 e4) {
current = Tuples.of(
current.get(0),
current.get(1),
current.get(2),
current.get(3),
e4
);
return new Builder5<>();
}
}
public class Builder5<T0, T1, T2, T3, T4> extends BaseBuilder<Tuple5<T0, T1, T2, T3, T4>> {
public <T5> Builder6<T0, T1, T2, T3, T4, T5> 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 Builder6<T0, T1, T2, T3, T4, T5> extends BaseBuilder<Tuple6<T0, T1, T2, T3, T4, T5>> {
public <T6> Builder7<T0, T1, T2, T3, T4, T5, T6> 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<>();
}
}
public class Builder7<T0, T1, T2, T3, T4, T5, T6> extends BaseBuilder<Tuple7<T0, T1, T2, T3, T4, T5, T6>> {
public <T7> Builder8<T0, T1, T2, T3, T4, T5, T6, T7> 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<T0, T1, T2, T3, T4, T5, T6, T7> extends BaseBuilder<Tuple8<T0, T1, T2, T3, T4, T5, T6, T7>> {
public <T8> Builder9<T0, T1, T2, T3, T4, T5, T6, T7, T8> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8> extends BaseBuilder<Tuple9<T0, T1, T2, T3, T4, T5, T6, T7, T8>> {
public <T9> Builder10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> extends BaseBuilder<Tuple10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>> {
public <T10> Builder11<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> extends BaseBuilder<Tuple11<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> {
public <T11> Builder12<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> extends BaseBuilder<Tuple12<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> {
public <T12> Builder13<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> extends BaseBuilder<Tuple13<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> {
public <T13> Builder14<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> extends BaseBuilder<Tuple14<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> {
public <T14> Builder15<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> extends BaseBuilder<Tuple15<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> {
public <T15> Builder16<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> extends BaseBuilder<Tuple16<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> {
public <T16> Builder17<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> extends BaseBuilder<Tuple17<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> {
public <T17> Builder18<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> extends BaseBuilder<Tuple18<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>> {
public <T18> Builder19<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> extends BaseBuilder<Tuple19<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>> {
public <T19> Builder20<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> extends BaseBuilder<Tuple20<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>> {
public <T20> Builder21<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> extends BaseBuilder<Tuple21<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>> {
public <T21> Builder22<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> extends BaseBuilder<Tuple22<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>> {
public <T22> Builder23<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> 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<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> extends BaseBuilder<Tuple23<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>> {
}
private class BaseBuilder<T> {
@SuppressWarnings("unchecked")
public T build() {
return (T) current;
}
}
}