
vertx.effect.exp.Cond Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vertx-effect Show documentation
Show all versions of vertx-effect Show documentation
When actors meet Functional Programming
package vertx.effect.exp;
import io.vertx.core.CompositeFuture;
import io.vertx.core.Future;
import vertx.effect.RetryPolicy;
import vertx.effect.core.AbstractVal;
import vertx.effect.Val;
import java.util.ArrayList;
import java.util.List;
import java.util.OptionalInt;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static java.util.Objects.requireNonNull;
public final class Cond extends AbstractVal {
private final List> tests;
private final List> consequences;
private static final String ATTEMPTS_LOWER_THAN_ONE_ERROR = "attempts < 1";
private Val otherwise;
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val otherwise) {
List> tests = new ArrayList<>();
List> consequences = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
consequences.add(requireNonNull(consequent1));
consequences.add(requireNonNull(consequent2));
return new Cond<>(tests,
consequences,
otherwise
);
}
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2) {
List> tests = new ArrayList<>();
List> consequences = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
consequences.add(requireNonNull(consequent1));
consequences.add(requireNonNull(consequent2));
return new Cond<>(tests,
consequences
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val otherwise) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
return new Cond<>(tests,
consequents,
otherwise
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
return new Cond<>(tests,
consequents
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4,
final Val otherwise) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
return new Cond<>(tests,
consequents,
otherwise
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
return new Cond<>(tests,
consequents
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4,
final Val test5,
final Val consequent5,
final Val otherwise) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
tests.add(requireNonNull(test5));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
consequents.add(requireNonNull(consequent5));
return new Cond<>(tests,
consequents,
otherwise
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4,
final Val test5,
final Val consequent5) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
tests.add(requireNonNull(test5));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
consequents.add(requireNonNull(consequent5));
return new Cond<>(tests,
consequents
);
}
public Cond(final List> tests,
final List> consequences,
final Val otherwise) {
this(tests,
consequences
);
this.otherwise = otherwise;
}
public Cond(final List> tests,
final List> consequences) {
this.tests = requireNonNull(tests);
this.consequences = requireNonNull(consequences);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4,
final Val test5,
final Val consequent5,
final Val test6,
final Val consequent6,
final Val otherwise) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
tests.add(requireNonNull(test5));
tests.add(requireNonNull(test6));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
consequents.add(requireNonNull(consequent5));
consequents.add(requireNonNull(consequent6));
return new Cond<>(tests,
consequents,
otherwise
);
}
// squid:S00107: static factory methods usually have more than 4 parameters, that's one their advantages precisely
@SuppressWarnings("squid:S00107")
public static Cond of(final Val test1,
final Val consequent1,
final Val test2,
final Val consequent2,
final Val test3,
final Val consequent3,
final Val test4,
final Val consequent4,
final Val test5,
final Val consequent5,
final Val test6,
final Val consequent6) {
List> tests = new ArrayList<>();
List> consequents = new ArrayList<>();
tests.add(requireNonNull(test1));
tests.add(requireNonNull(test2));
tests.add(requireNonNull(test3));
tests.add(requireNonNull(test4));
tests.add(requireNonNull(test5));
tests.add(requireNonNull(test6));
consequents.add(requireNonNull(consequent1));
consequents.add(requireNonNull(consequent2));
consequents.add(requireNonNull(consequent3));
consequents.add(requireNonNull(consequent4));
consequents.add(requireNonNull(consequent5));
consequents.add(requireNonNull(consequent6));
return new Cond<>(tests,
consequents
);
}
@Override
public Val retry(final int attempts) {
if (attempts < 1)
return Cons.failure(new IllegalArgumentException(ATTEMPTS_LOWER_THAN_ONE_ERROR));
return new Cond<>(tests.stream()
.map(it -> it.retry(attempts))
.collect(Collectors.toList()),
consequences.stream()
.map(it -> it.retry(attempts))
.collect(Collectors.toList()
),
otherwise
);
}
@Override
public Val retry(final int attempts,
final BiFunction> retryPolicy) {
if (attempts < 1)
return Cons.failure(new IllegalArgumentException(ATTEMPTS_LOWER_THAN_ONE_ERROR));
if (retryPolicy == null)
return Cons.failure(new NullPointerException("retryPolicy is null"));
return new Cond<>(tests.stream()
.map(it -> it.retry(attempts,
retryPolicy
))
.collect(Collectors.toList()),
consequences.stream()
.map(it -> it.retry(attempts,
retryPolicy
))
.collect(Collectors.toList()),
otherwise
);
}
@Override
public Val retry(final Predicate predicate,
final int attempts) {
if (attempts < 1)
return Cons.failure(new IllegalArgumentException(ATTEMPTS_LOWER_THAN_ONE_ERROR));
if (predicate == null)
return Cons.failure(new NullPointerException("predicate is null"));
return new Cond<>(tests.stream()
.map(it -> it.retry(predicate,
attempts
))
.collect(Collectors.toList()),
consequences.stream()
.map(it -> it.retry(predicate,
attempts
))
.collect(Collectors.toList()),
otherwise
);
}
@Override
public Val retry(final Predicate predicate,
final int attempts,
final RetryPolicy retryPolicy) {
if (attempts < 1)
return Cons.failure(new IllegalArgumentException(ATTEMPTS_LOWER_THAN_ONE_ERROR));
if (retryPolicy == null)
return Cons.failure(new NullPointerException("retryPolicy is null"));
if (predicate == null)
return Cons.failure(new NullPointerException("predicate is null"));
return new Cond<>(tests.stream()
.map(it -> it.retry(predicate,
attempts,
retryPolicy
))
.collect(Collectors.toList()),
consequences.stream()
.map(it -> it.retry(predicate,
attempts,
retryPolicy
))
.collect(Collectors.toList()),
otherwise
);
}
@Override
public Future get() {
return CompositeFuture.all(tests.stream()
.map(Supplier::get)
.collect(Collectors.toList()))
.flatMap(it -> {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy