package com.psddev.cms.tool.page.content.field;
import com.psddev.dari.db.ObjectField;
import com.psddev.dari.db.State;
import com.psddev.dari.util.ObjectUtils;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;
public class TextField {
/**
* Validates and associates the given {@code value} with the given
* {@code field} in the given {@code state}.
*
* @param state Nonnull.
* @param field Nonnull.
* @param value Nullable.
*/
public static void put(State state, ObjectField field, Object value) {
if (value != null) {
String type = field.getInternalItemType();
if (ObjectField.UUID_TYPE.equals(type)) {
recurse(value, item -> {
if (ObjectUtils.to(UUID.class, item) == null) {
state.addError(field, String.format(
"[%s] is not a UUID!", item));
}
});
}
}
state.put(field.getInternalName(), value);
}
private static void recurse(Object value, Consumer<Object> consumer) {
if (value != null) {
if (value instanceof Iterable) {
for (Object item : (Iterable<?>) value) {
recurse(item, consumer);
}
} else if (value instanceof Map) {
for (Object item : ((Map<?, ?>) value).values()) {
recurse(item, consumer);
}
} else {
consumer.accept(value);
}
}
}
}