From d9158a8868450d2742b08229406825f001299e6c Mon Sep 17 00:00:00 2001 From: Zellweger Christof Ralf Date: Tue, 22 Dec 2015 13:12:03 +0100 Subject: [PATCH] sf_daq/ch.psi.daq.queryrest#1 --- .../daq/queryrest/config/QueryRestConfig.java | 3 +- .../AbstractResponseStreamWriter.java | 7 ++- .../QueryRestControllerCsvTest.java | 47 +++++++++++++++++- .../QueryRestControllerJsonTest.java | 48 ++++++++++++++----- 4 files changed, 87 insertions(+), 18 deletions(-) diff --git a/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java b/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java index e6cbd43..40c5864 100644 --- a/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java +++ b/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java @@ -58,8 +58,7 @@ public class QueryRestConfig extends WebMvcConfigurerAdapter { // a nested configuration // this guarantees that the ordering of the properties file is as expected - // see: - // https://jira.spring.io/browse/SPR-10409?focusedCommentId=101393&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-101393 + // see: https://jira.spring.io/browse/SPR-10409?focusedCommentId=101393&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-101393 @Configuration @Import({QueryConfig.class}) static class InnerConfiguration { diff --git a/src/main/java/ch/psi/daq/queryrest/response/AbstractResponseStreamWriter.java b/src/main/java/ch/psi/daq/queryrest/response/AbstractResponseStreamWriter.java index 295f1fe..45bea43 100644 --- a/src/main/java/ch/psi/daq/queryrest/response/AbstractResponseStreamWriter.java +++ b/src/main/java/ch/psi/daq/queryrest/response/AbstractResponseStreamWriter.java @@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.http.MediaType; +import ch.psi.daq.domain.ResponseFormat; import ch.psi.daq.query.model.impl.DAQQuery; @@ -42,11 +43,13 @@ public abstract class AbstractResponseStreamWriter implements ResponseStreamWrit response.addHeader("Content-Type", contentType); if (query.isCompressed()) { - response.addHeader("Content-Disposition", "attachment; filename=data.gz"); + String filename = "data." + query.getCompression().getFileSuffix(); + response.addHeader("Content-Disposition", "attachment; filename=" + filename); response.addHeader("Content-Encoding", query.getCompression().toString()); out = query.getCompression().wrapStream(out); } else { - response.addHeader("Content-Disposition", "attachment; filename=data.csv"); + String filename = "data." + (query.getResponseFormat() == ResponseFormat.CSV ? "csv" : "json"); + response.addHeader("Content-Disposition", "attachment; filename=" + filename); } return out; diff --git a/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerCsvTest.java b/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerCsvTest.java index 4553239..d3f7ec2 100644 --- a/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerCsvTest.java +++ b/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerCsvTest.java @@ -37,7 +37,6 @@ import ch.psi.daq.query.model.QueryField; import ch.psi.daq.query.model.impl.DAQQuery; import ch.psi.daq.queryrest.controller.QueryRestController; import ch.psi.daq.queryrest.filter.CorsFilter; -import ch.psi.daq.queryrest.response.AbstractResponseStreamWriter; import ch.psi.daq.test.cassandra.admin.CassandraTestAdmin; import ch.psi.daq.test.queryrest.AbstractDaqRestTest; @@ -601,4 +600,50 @@ public class QueryRestControllerCsvTest extends AbstractDaqRestTest { mapReader.close(); } } + + @Test + public void testGzipFileSuffixHeader() throws Exception { + DAQQuery request = new DAQQuery( + new RequestRangePulseId( + 10, + 11), + TEST_CHANNEL_NAMES); + request.setResponseFormat(ResponseFormat.CSV); + request.setCompression(Compression.GZIP); + + String content = mapper.writeValueAsString(request); + + this.mockMvc + .perform(MockMvcRequestBuilders + .post(QueryRestController.QUERY) + .contentType(MediaType.APPLICATION_JSON) + .content(content)) + + .andDo(MockMvcResultHandlers.print()) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.header().string("Content-Disposition", "attachment; filename=data.gz")); + } + + @Test + public void testJsonFileSuffixHeader() throws Exception { + DAQQuery request = new DAQQuery( + new RequestRangePulseId( + 10, + 11), + TEST_CHANNEL_NAMES); + request.setResponseFormat(ResponseFormat.CSV); + request.setCompression(Compression.NONE); + + String content = mapper.writeValueAsString(request); + + this.mockMvc + .perform(MockMvcRequestBuilders + .post(QueryRestController.QUERY) + .contentType(MediaType.APPLICATION_JSON) + .content(content)) + + .andDo(MockMvcResultHandlers.print()) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.header().string("Content-Disposition", "attachment; filename=data.csv")); + } } diff --git a/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerJsonTest.java b/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerJsonTest.java index d3f8486..2d3ee83 100644 --- a/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerJsonTest.java +++ b/src/test/java/ch/psi/daq/test/queryrest/controller/QueryRestControllerJsonTest.java @@ -441,27 +441,49 @@ public class QueryRestControllerJsonTest extends AbstractDaqRestTest { .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.status().isOk()); } - + @Test - public void testDeflateCompression() throws Exception { + public void testGzipFileSuffixHeader() throws Exception { DAQQuery request = new DAQQuery( new RequestRangePulseId( 10, 11), - TEST_CHANNEL_NAMES); - request.setCompression(Compression.DEFLATE); - + TEST_CHANNEL_NAMES); + request.setCompression(Compression.GZIP); + String content = mapper.writeValueAsString(request); - System.out.println(content); - + this.mockMvc - .perform(MockMvcRequestBuilders - .post(QueryRestController.QUERY) - .contentType(MediaType.APPLICATION_JSON) - .content(content)) - + .perform(MockMvcRequestBuilders + .post(QueryRestController.QUERY) + .contentType(MediaType.APPLICATION_JSON) + .content(content)) + .andDo(MockMvcResultHandlers.print()) - .andExpect(MockMvcResultMatchers.status().isOk()); + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.header().string("Content-Disposition", "attachment; filename=data.gz")); + } + + @Test + public void testJsonFileSuffixHeader() throws Exception { + DAQQuery request = new DAQQuery( + new RequestRangePulseId( + 10, + 11), + TEST_CHANNEL_NAMES); + request.setCompression(Compression.NONE); + + String content = mapper.writeValueAsString(request); + + this.mockMvc + .perform(MockMvcRequestBuilders + .post(QueryRestController.QUERY) + .contentType(MediaType.APPLICATION_JSON) + .content(content)) + + .andDo(MockMvcResultHandlers.print()) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.header().string("Content-Disposition", "attachment; filename=data.json")); } }