package org.molgenis.messageconverter; import org.apache.commons.io.IOUtils; import org.molgenis.data.EntityCollection; import org.molgenis.data.csv.CsvWriter; import org.molgenis.util.BaseHttpMessageConverter; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import java.io.IOException; import java.io.OutputStreamWriter; /** * Converts an EntityCollection to comma separated values */ public class CsvHttpMessageConverter extends BaseHttpMessageConverter<EntityCollection> { public CsvHttpMessageConverter() { super(new MediaType("text", "csv", DEFAULT_CHARSET)); } @Override protected void writeInternal(EntityCollection entities, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { OutputStreamWriter out = new OutputStreamWriter(outputMessage.getBody(), getCharset(outputMessage.getHeaders())); CsvWriter writer = new CsvWriter(out); try { writer.writeAttributeNames(entities.getAttributeNames()); writer.add(entities.stream()); } finally { IOUtils.closeQuietly(writer); } } @Override protected boolean supports(Class<?> clazz) { return EntityCollection.class.isAssignableFrom(clazz); } @Override protected EntityCollection readInternal(Class<? extends EntityCollection> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { throw new UnsupportedOperationException(); } }