All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 fields, Execution execution) {
		ArrayNode fieldsNode = objectMapper.createArrayNode();
		for (FormField field : fields) {
			fieldsNode.add(field.renderView(this, execution));
		}
		return fieldsNode;
	}

	public JsonNode renderModel(List 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 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