
hope.kola.contract.api.Body Maven / Gradle / Ivy
package hope.kola.contract.api;
import static hope.kola.contract.api.KolaTestFunctions.$V;
import com.squareup.javapoet.CodeBlock;
import groovy.lang.Closure;
import groovy.lang.DelegatesTo;
import hope.kola.contract.validation.Validatable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
public class Body implements Common, Validatable, ObjectFactory {
protected Set values = new LinkedHashSet<>();
/**
* Complex property build
* Framework will pass by the {@code res} as the instance of this complex property
* An example:
*
*
*
*
*
* set('student.address', {
* addStatement('res.setCity("Shanghai")')
* addStatement('res.setZID(123)')
* })
*
*
*
*
*
* @param property, the path of the property {@code student.address}
* @param consumer manipulate the property update logic
*/
public void set(String property, @DelegatesTo(CodeBlock.Builder.class) Closure consumer) {
final BodyValue hv = new BodyValue(property);
CodeBlock.Builder code = CodeBlock.builder();
hv.code(code);
consumer.setDelegate(code);
consumer.call();
values.add(hv);
}
public Set values() {
return values;
}
public boolean hasValues() {
return !values.isEmpty();
}
/**
* Populate dynamic value from the global context by the key
*
* @param property the path of the body
* @param key the key from the context
*/
public void fromGlobal(String property, final String key) {
final BodyValue hv = new BodyValue(property);
hv.code(CodeBlock.builder().add("$L($S)", $V, key));
values.add(hv);
}
public void set(String property, final Integer intValue) {
final BodyValue hv = new BodyValue(property);
hv.withInteger(intValue);
values.add(hv);
}
public void set(String property, final Integer... intValues) {
final BodyValue hv = new BodyValue(property);
hv.withIntegerArray(intValues);
values.add(hv);
}
public void set(String property, final Long longValue) {
final BodyValue hv = new BodyValue(property);
hv.withLong(longValue);
values.add(hv);
}
public void set(String property, final Long... longValues) {
final BodyValue hv = new BodyValue(property);
hv.withLongArray(longValues);
values.add(hv);
}
public void set(String property, final Float floatValue) {
final BodyValue hv = new BodyValue(property);
hv.withFloat(floatValue);
values.add(hv);
}
public void set(String property, final Float... floatValues) {
final BodyValue hv = new BodyValue(property);
hv.withFloatArray(floatValues);
values.add(hv);
}
public void set(String property, final Double doubleValue) {
final BodyValue hv = new BodyValue(property);
hv.withDouble(doubleValue);
values.add(hv);
}
public void set(String property, final Double... doubleValues) {
final BodyValue hv = new BodyValue(property);
hv.withDoubleArray(doubleValues);
values.add(hv);
}
public void set(String property, final BigDecimal bigDecimalValue) {
final BodyValue hv = new BodyValue(property);
hv.withBigDecimal(bigDecimalValue);
values.add(hv);
}
public void set(String property, final BigDecimal... bigDecimalValues) {
final BodyValue hv = new BodyValue(property);
hv.withBigDecimalArray(bigDecimalValues);
values.add(hv);
}
public void set(String property, final BigInteger bigIntegerValue) {
final BodyValue hv = new BodyValue(property);
hv.withBigInteger(bigIntegerValue);
values.add(hv);
}
public void set(String property, final BigInteger... bigIntegerValues) {
final BodyValue hv = new BodyValue(property);
hv.withBigIntegerArray(bigIntegerValues);
values.add(hv);
}
public void set(String property, final String stringValue) {
final BodyValue hv = new BodyValue(property);
hv.withString(stringValue);
values.add(hv);
}
public void set(String property, final String... stringValues) {
final BodyValue hv = new BodyValue(property);
hv.withStringArray(stringValues);
values.add(hv);
}
public void set(String property, final Enum eumValue) {
final BodyValue hv = new BodyValue(property);
hv.withString(eumValue.name());
values.add(hv);
}
public void set(String property, final Enum... eumValues) {
final BodyValue hv = new BodyValue(property);
final String[] got = new String[eumValues.length];
int id = 0;
for (final Enum ev : eumValues) {
got[id++] = ev.name();
}
hv.withStringArray(got);
values.add(hv);
}
// Date & Time:
public void set(String property, final LocalDate date) {
final BodyValue hv = new BodyValue(property);
hv.withLocalDate(date);
values.add(hv);
}
public void set(String property, final LocalDate... dates) {
final BodyValue hv = new BodyValue(property);
hv.withLocalDateArray(dates);
values.add(hv);
}
public void set(String property, final LocalDateTime dateTime) {
final BodyValue hv = new BodyValue(property);
hv.withLocalDateTime(dateTime);
values.add(hv);
}
public void set(String property, final LocalDateTime... dateTime) {
final BodyValue hv = new BodyValue(property);
hv.withLocalDateTimeArray(dateTime);
values.add(hv);
}
public void set(String property, final LocalTime time) {
final BodyValue hv = new BodyValue(property);
hv.withLocalTime(time);
values.add(hv);
}
public void set(String property, final LocalTime... times) {
final BodyValue hv = new BodyValue(property);
hv.withLocalTimeArray(times);
values.add(hv);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy