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

com.xlrit.gears.engine.document.JsonDocumentProcessor Maven / Gradle / Ivy

package com.xlrit.gears.engine.document;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import com.xlrit.gears.engine.meta.PrintOptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xlrit.gears.base.content.ContentRef;
import com.xlrit.gears.base.model.Document;
import com.xlrit.gears.base.content.ContentStore;
import com.xlrit.gears.engine.meta.MetaManager;

import lombok.RequiredArgsConstructor;

@Component
@Order(100)
@RequiredArgsConstructor
public class JsonDocumentProcessor implements DocumentProcessor {
	private static final Logger LOG = LoggerFactory.getLogger(JsonDocumentProcessor.class);
	private static final String CONTENT_TYPE = "application/json";

	private final ObjectMapper objectMapper;
	private final MetaManager metaManager;
	private final ContentStore contentStore;

	@Override
	public boolean supports(Document doc) {
		return "json".equals(doc.getType());
	}

	@Override
	public ContentRef process(Document doc) {
		try {
			JsonNode json = toJson(doc.getParameters());
			byte[] data = toByteArray(json);
			return contentStore.putContent(doc.getFilename(), CONTENT_TYPE, data);
		}
		catch (IOException e) {
			throw new RuntimeException("Unable to write JSON", e);
		}
	}

	private byte[] toByteArray(JsonNode json) throws IOException {
		try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
			objectMapper.writerWithDefaultPrettyPrinter().writeValue(outputStream, json);
			return outputStream.toByteArray();
		}
	}

	private JsonNode toJson(Object params) {
		return metaManager.requireTypeInfo(params).serialize(params, objectMapper, PrintOptions.NONE);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy