
com.github.dakusui.valid8j_pcond.fluent.Statement Maven / Gradle / Ivy
The newest version!
package com.github.dakusui.valid8j_pcond.fluent;
import com.github.dakusui.valid8j_pcond.core.fluent.builtins.*;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.stream.Stream;
import static com.github.dakusui.valid8j_pcond.forms.Functions.elementAt;
import static com.github.dakusui.valid8j_pcond.forms.Predicates.allOf;
import static com.github.dakusui.valid8j_pcond.forms.Predicates.transform;
import static com.github.dakusui.valid8j_pcond.internals.InternalUtils.makeSquashable;
@FunctionalInterface
public interface Statement {
default T statementValue() {
throw new NoSuchElementException();
}
Predicate statementPredicate();
/**
* Returns a transformer for a `String` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see StringTransformer
*/
static StringTransformer
stringValue(String value) {
return StringTransformer.create(() -> value);
}
/**
* Returns a transformer for a `double` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see DoubleTransformer
*/
static DoubleTransformer
doubleValue(Double value) {
return DoubleTransformer.create(() -> value);
}
/**
* Returns a transformer for a `float` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see FloatTransformer
*/
static FloatTransformer
floatValue(Float value) {
return FloatTransformer.create(() -> value);
}
/**
* Returns a transformer for a `long` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see LongTransformer
*/
static LongTransformer
longValue(Long value) {
return LongTransformer.create(() -> value);
}
/**
* Returns a transformer for a `int` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see IntegerTransformer
*/
static IntegerTransformer
integerValue(Integer value) {
return IntegerTransformer.create(() -> value);
}
/**
* Returns a transformer for a `short` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see ShortTransformer
*/
static ShortTransformer
shortValue(Short value) {
return ShortTransformer.create(() -> value);
}
/**
* Returns a transformer for a `boolean` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see BooleanTransformer
*/
static BooleanTransformer
booleanValue(Boolean value) {
return BooleanTransformer.create(() -> value);
}
/**
* Returns a transformer for a general `Object` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see ObjectTransformer
*/
static
ObjectTransformer
objectValue(E value) {
return ObjectTransformer.create(() -> value);
}
/**
* Returns a transformer for a `List` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see ListTransformer
*/
static
ListTransformer, E>
listValue(List value) {
return ListTransformer.create(() -> value);
}
/**
* Returns a transformer for a `Stream` value.
*
* @param value A value for which a transformer is created.
* @return A transformer for a {@code value}.
* @see StreamTransformer
*/
static
StreamTransformer, E>
streamValue(Stream value) {
return StreamTransformer.create(() -> value);
}
static Predicate super List>> createPredicateForAllOf(Statement>[] statements) {
AtomicInteger i = new AtomicInteger(0);
@SuppressWarnings("unchecked") Predicate super List>>[] predicates = Arrays.stream(statements)
.map(e -> makeSquashable(transform(elementAt(i.getAndIncrement())).check("WHEN", (Predicate super Object>) e.statementPredicate())))
.toArray(Predicate[]::new);
return makeSquashable(allOf(predicates));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy