
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