From 95ef7867761f09caeee3276f8a10009531400e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20M=C3=A4rki?= Date: Thu, 12 Oct 2017 08:40:27 +0200 Subject: [PATCH] Intermediate commit. --- .../daq/queryrest/config/QueryRestConfig.java | 5 ++ .../model/ChannelRenameFilterMixin.java | 15 +++++ .../queryrest/model/PropertyFilterMixin.java | 1 + .../json/JSONResponseStreamWriter.java | 3 +- .../JsonQueryRestControllerTest.java | 57 ++++++++++++++++++- 5 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ch/psi/daq/queryrest/model/ChannelRenameFilterMixin.java 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 d3a911e..f33da16 100644 --- a/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java +++ b/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java @@ -33,6 +33,7 @@ import ch.psi.daq.domain.DataEvent; import ch.psi.daq.domain.backend.Backend; import ch.psi.daq.domain.config.DomainConfig; import ch.psi.daq.domain.config.DomainConfigCORS; +import ch.psi.daq.domain.events.ChannelConfiguration; import ch.psi.daq.domain.query.backend.BackendQuery; import ch.psi.daq.domain.query.backend.analyzer.BackendQueryAnalyzer; import ch.psi.daq.domain.query.operation.Aggregation; @@ -43,6 +44,7 @@ import ch.psi.daq.domain.request.validate.RequestProviderValidator; import ch.psi.daq.query.analyzer.BackendQueryAnalyzerImpl; import ch.psi.daq.query.config.QueryConfig; import ch.psi.daq.queryrest.controller.validator.QueryValidator; +import ch.psi.daq.queryrest.model.ChannelRenameFilterMixin; import ch.psi.daq.queryrest.model.PropertyFilterMixin; import ch.psi.daq.queryrest.query.QueryManager; import ch.psi.daq.queryrest.query.QueryManagerImpl; @@ -125,6 +127,9 @@ public class QueryRestConfig { // extends WebMvcConfigurerAdapter { objectMapper.addMixIn(AbstractExtremaMeta.class, PropertyFilterMixin.class); objectMapper.addMixIn(EnumMap.class, PropertyFilterMixin.class); + objectMapper.addMixIn(ChannelConfiguration.class, PropertyFilterMixin.class); + objectMapper.addMixIn(ChannelConfiguration.class, ChannelRenameFilterMixin.class); + objectMapper.addMixIn(Response.class, PolymorphicResponseMixIn.class); } diff --git a/src/main/java/ch/psi/daq/queryrest/model/ChannelRenameFilterMixin.java b/src/main/java/ch/psi/daq/queryrest/model/ChannelRenameFilterMixin.java new file mode 100644 index 0000000..90cdd3d --- /dev/null +++ b/src/main/java/ch/psi/daq/queryrest/model/ChannelRenameFilterMixin.java @@ -0,0 +1,15 @@ +package ch.psi.daq.queryrest.model; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Kind of marker for ObjectMapper MixIn + */ +@JsonFilter("channelRenameFilter") +public interface ChannelRenameFilterMixin { + public static final String FILTER_NAME = "channelRenameFilter"; + + @JsonProperty("name") + String getChannel(); +} diff --git a/src/main/java/ch/psi/daq/queryrest/model/PropertyFilterMixin.java b/src/main/java/ch/psi/daq/queryrest/model/PropertyFilterMixin.java index 5779cfd..767846e 100644 --- a/src/main/java/ch/psi/daq/queryrest/model/PropertyFilterMixin.java +++ b/src/main/java/ch/psi/daq/queryrest/model/PropertyFilterMixin.java @@ -7,4 +7,5 @@ import com.fasterxml.jackson.annotation.JsonFilter; */ @JsonFilter("namedPropertyFilter") public class PropertyFilterMixin { + public static final String FILTER_NAME = "namedPropertyFilter"; } diff --git a/src/main/java/ch/psi/daq/queryrest/response/json/JSONResponseStreamWriter.java b/src/main/java/ch/psi/daq/queryrest/response/json/JSONResponseStreamWriter.java index fe25dca..1104fef 100644 --- a/src/main/java/ch/psi/daq/queryrest/response/json/JSONResponseStreamWriter.java +++ b/src/main/java/ch/psi/daq/queryrest/response/json/JSONResponseStreamWriter.java @@ -35,6 +35,7 @@ import ch.psi.daq.domain.query.operation.Extrema; import ch.psi.daq.domain.query.operation.QueryField; import ch.psi.daq.domain.query.response.Response; import ch.psi.daq.queryrest.config.QueryRestConfig; +import ch.psi.daq.queryrest.model.PropertyFilterMixin; import ch.psi.daq.queryrest.response.ResponseStreamWriter; /** @@ -172,7 +173,7 @@ public class JSONResponseStreamWriter implements ResponseStreamWriter, Applicati */ public static ObjectWriter configureWriter(final Set includedFields, final ObjectMapper mapper) { final SimpleFilterProvider propertyFilter = new SimpleFilterProvider(); - propertyFilter.addFilter("namedPropertyFilter", SimpleBeanPropertyFilter.filterOutAllExcept(includedFields)); + propertyFilter.addFilter(PropertyFilterMixin.FILTER_NAME, SimpleBeanPropertyFilter.filterOutAllExcept(includedFields)); // only write the properties not excluded in the filter final ObjectWriter writer = mapper.writer(propertyFilter); return writer; diff --git a/src/test/java/ch/psi/daq/test/queryrest/controller/JsonQueryRestControllerTest.java b/src/test/java/ch/psi/daq/test/queryrest/controller/JsonQueryRestControllerTest.java index d5500ff..57bc6a3 100644 --- a/src/test/java/ch/psi/daq/test/queryrest/controller/JsonQueryRestControllerTest.java +++ b/src/test/java/ch/psi/daq/test/queryrest/controller/JsonQueryRestControllerTest.java @@ -22,6 +22,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; +import ch.psi.bsread.message.Type; import ch.psi.daq.common.ordering.Ordering; import ch.psi.daq.common.time.TimeUtils; import ch.psi.daq.domain.backend.Backend; @@ -38,8 +39,8 @@ import ch.psi.daq.domain.query.operation.Compression; import ch.psi.daq.domain.query.operation.Extrema; import ch.psi.daq.domain.query.operation.QueryField; import ch.psi.daq.domain.query.transform.ValueTransformationSequence; -import ch.psi.daq.domain.query.transform.image.ImageEncodingValueTransformation; import ch.psi.daq.domain.query.transform.image.ImageDownScaleValueTransformation; +import ch.psi.daq.domain.query.transform.image.ImageEncodingValueTransformation; import ch.psi.daq.domain.query.transform.image.ImageFormat; import ch.psi.daq.domain.query.transform.image.color.ColorModelType; import ch.psi.daq.domain.query.transform.image.color.TypedColorModel; @@ -155,7 +156,7 @@ public class JsonQueryRestControllerTest extends AbstractDaqRestTest implements @Test public void testChannelNameQueryBackendOrder() throws Exception { ChannelsRequest request = new ChannelsRequest("int64", Ordering.desc, backend); - + String content = mapper.writeValueAsString(request); System.out.println(content); @@ -187,7 +188,7 @@ public class JsonQueryRestControllerTest extends AbstractDaqRestTest implements String content = mapper.writeValueAsString(request); System.out.println(content); - + this.mockMvc .perform(MockMvcRequestBuilders .post(DomainConfig.PATH_CHANNELS) @@ -698,6 +699,56 @@ public class JsonQueryRestControllerTest extends AbstractDaqRestTest implements .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].value.max").value(109.0)); } + @Test + public void testDateRangeQueryNrOfBinsAggregate_Bool() throws Exception { + String channelName = Type.Bool.getKey() + TEST_CHANNEL_01; + long startTime = 1000; + long endTime = 1099; + String startDate = TimeUtils.format(startTime); + String endDate = TimeUtils.format(endTime); + DAQQuery request = + new DAQQuery( + new RequestRangeDate( + startDate, + endDate), + new AggregationDescriptor().setNrOfBins(2).setAggregations( + Arrays.asList(Aggregation.min, Aggregation.mean, Aggregation.max)), + channelName); + + String content = mapper.writeValueAsString(request); + System.out.println(content); + + this.mockMvc + .perform( + MockMvcRequestBuilders + .post(DomainConfig.PATH_QUERY) + .contentType(MediaType.APPLICATION_JSON) + .content(content)) + .andDo(MockMvcResultHandlers.print()) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$").isArray()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(channelName)) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.backend").value(backend.getName())) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(100)) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value( + TestTimeUtils.getTimeStr(1, 0))) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].eventCount").value(5)) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].value.min").isNumber()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].value.mean").isNumber()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].value.max").isNumber()) + + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(105)) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value( + TestTimeUtils.getTimeStr(1, 50000000))) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].eventCount").value(5)) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].value.min").isNumber()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].value.mean").isNumber()) + .andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].value.max").isNumber()); + } + @Test public void testDateRangeQueryNrOfBinsAggregateExtrema() throws Exception { long startTime = 1000;