
com.xlrit.gears.engine.form.RenderContext Maven / Gradle / Ivy
package com.xlrit.gears.engine.form;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.NullNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.xlrit.gears.base.execution.Execution;
import com.xlrit.gears.engine.meta.MetaManager;
import com.xlrit.gears.engine.meta.PrintOptions;
import com.xlrit.gears.engine.meta.TypeInfo;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class RenderContext {
private final ObjectMapper objectMapper;
private final MetaManager metaManager;
private final RenderOptions renderOptions;
private final PrintOptions printOptions;
public final Set staticallyRenderedDefault = new HashSet<>();
public final Set staticallyRenderedChoices = new HashSet<>();
public ObjectMapper getObjectMapper() {
return objectMapper;
}
public RenderOptions getRenderOptions() {
return renderOptions;
}
public PrintOptions getPrintOptions() {
return printOptions;
}
public ArrayNode createArrayNode() {
return objectMapper.createArrayNode();
}
public ObjectNode createObjectNode() {
return objectMapper.createObjectNode();
}
public JsonNode renderView(List extends FormField> fields, Execution execution) {
ArrayNode fieldsNode = objectMapper.createArrayNode();
for (FormField field : fields) {
fieldsNode.add(field.renderView(this, execution));
}
return fieldsNode;
}
public JsonNode renderModel(List extends FormField> fields, Execution execution, Object basedOn) {
ObjectNode fieldsNode = objectMapper.createObjectNode();
for (FormField field : fields) {
String fieldName = field.getName();
fieldsNode.set(fieldName, field.renderModel(this, execution));
}
if (basedOn != null) {
fieldsNode.set("__basedOn", renderAny(basedOn));
}
return fieldsNode;
}
public JsonNode renderAux(List extends FormField> fields, Execution execution) {
ObjectNode fieldsNode = objectMapper.createObjectNode();
for (FormField field : fields) {
String fieldName = field.getName();
fieldsNode.set(fieldName, field.renderAux(this, execution));
}
return fieldsNode;
}
public JsonNode renderAny(Object value) {
if (value == null) return NullNode.instance;
TypeInfo typeInfo = metaManager.requireTypeInfo(value);
return typeInfo.serialize(value, objectMapper, printOptions); // of via toFormValue?
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy