Intermediate commit.

This commit is contained in:
Fabian Märki
2017-10-12 08:40:27 +02:00
parent 203260dbec
commit 95ef786776
5 changed files with 77 additions and 4 deletions

View File

@ -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);
}

View File

@ -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();
}

View File

@ -7,4 +7,5 @@ import com.fasterxml.jackson.annotation.JsonFilter;
*/
@JsonFilter("namedPropertyFilter")
public class PropertyFilterMixin {
public static final String FILTER_NAME = "namedPropertyFilter";
}

View File

@ -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<String> 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;

View File

@ -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;
@ -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;