/* (c) 2017 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.importer.rest.converters; import java.io.IOException; import java.io.OutputStreamWriter; import org.geoserver.importer.Importer; import org.geoserver.importer.rest.ImportWrapper; import org.geoserver.importer.rest.converters.ImportJSONWriter.FlushableJSONBuilder; import org.geoserver.rest.converters.BaseMessageConverter; import org.geoserver.rest.util.MediaTypeExtensions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.stereotype.Component; /** * {@link BaseMessageConverter} implementation for writing {@link ImportWrapper} objects. * <p> * This converter is willing to write JSON directly, or output JSON as HTML for visual inspection. */ @Component public class ImportWrapperMessageConverter extends BaseMessageConverter<ImportWrapper> { Importer importer; @Autowired public ImportWrapperMessageConverter(Importer importer) { super(MediaType.APPLICATION_JSON, MediaTypeExtensions.TEXT_JSON, MediaType.TEXT_HTML); this.importer = importer; } @Override public int getPriority() { return super.getPriority() - 5; } @Override protected boolean supports(Class<?> clazz) { return ImportWrapper.class.isAssignableFrom(clazz); } // // Reading // @Override protected boolean canRead(MediaType mediaType) { return false; } // // writing // @Override protected void writeInternal(ImportWrapper wrapper, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { MediaType contentType = outputMessage.getHeaders().getContentType(); try (OutputStreamWriter outputWriter = new OutputStreamWriter(outputMessage.getBody())) { if (MediaType.TEXT_HTML.isCompatibleWith(contentType)) { writeHTML(wrapper, outputWriter); } else { writeJSON(wrapper, outputWriter); } outputWriter.flush(); } } private void writeHTML(ImportWrapper wrapper, OutputStreamWriter outputWriter) throws IOException { outputWriter.write("<html><body><pre>"); writeJSON(wrapper, outputWriter); outputWriter.write("</pre></body></html>"); } private void writeJSON(ImportWrapper wrapper, OutputStreamWriter outputWriter) throws IOException { FlushableJSONBuilder json = new FlushableJSONBuilder(outputWriter); ImportJSONWriter writer = new ImportJSONWriter(importer); wrapper.write(outputWriter, json, writer); } }