ATEST-371
This commit is contained in:
@@ -14,6 +14,7 @@ import ch.psi.daq.domain.query.DAQQuery;
|
||||
import ch.psi.daq.domain.query.DAQQueryElement;
|
||||
import ch.psi.daq.domain.query.operation.Aggregation;
|
||||
import ch.psi.daq.domain.query.operation.QueryField;
|
||||
import ch.psi.daq.domain.request.Request;
|
||||
import ch.psi.daq.queryrest.config.QueryRestConfig;
|
||||
|
||||
public class QueryValidator implements Validator {
|
||||
@@ -38,23 +39,46 @@ public class QueryValidator implements Validator {
|
||||
@Override
|
||||
public void validate(Object target, Errors errors) {
|
||||
if (target instanceof DAQQuery) {
|
||||
this.checkElement((DAQQuery) target);
|
||||
}else if(target instanceof DAQQueries){
|
||||
this.checkElement((DAQQuery) target, errors);
|
||||
} else if (target instanceof DAQQueries) {
|
||||
DAQQueries queries = (DAQQueries) target;
|
||||
for (DAQQueryElement daqQueryElement : queries) {
|
||||
this.checkElement(daqQueryElement);
|
||||
this.checkElement(daqQueryElement, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkElement(DAQQueryElement query) {
|
||||
private void checkElement(DAQQueryElement query, Errors errors) {
|
||||
// set default values (if not set)
|
||||
if (query.getFields() == null || query.getFields().isEmpty()) {
|
||||
query.setFields(new LinkedHashSet<>(defaultResponseFields));
|
||||
}
|
||||
|
||||
if (query.getAggregations() == null || query.getAggregations().isEmpty()) {
|
||||
query.setAggregations(new ArrayList<>(defaultResponseAggregations));
|
||||
if (query.getAggregation() != null) {
|
||||
// check if only one binning element is defined
|
||||
long msPerBin = query.getAggregation().getMsPerBin();
|
||||
long pulsesPerBin = query.getAggregation().getPulsesPerBin();
|
||||
int nrOfBins = query.getAggregation().getNrOfBins();
|
||||
if ((msPerBin != Request.NOT_SET && (pulsesPerBin != Request.NOT_SET || nrOfBins != Request.NOT_SET))
|
||||
|| (pulsesPerBin != Request.NOT_SET && (msPerBin != Request.NOT_SET || nrOfBins != Request.NOT_SET))
|
||||
|| (nrOfBins != Request.NOT_SET && (msPerBin != Request.NOT_SET || pulsesPerBin != Request.NOT_SET))) {
|
||||
errors.reject("msPerBin", "Only one binning element must be defined.");
|
||||
errors.reject("pulsesPerBin", "Only one binning element must be defined.");
|
||||
errors.reject("nrOfBins", "Only one binning element must be defined.");
|
||||
}
|
||||
|
||||
if (query.getRange().isPulseIdRangeDefined() && msPerBin != Request.NOT_SET) {
|
||||
errors.reject("msPerBin", "Pulse range queries only support pulse based binning.");
|
||||
}
|
||||
if (query.getRange().isTimeRangeDefined() && pulsesPerBin != Request.NOT_SET) {
|
||||
errors.reject("pulsesPerBin", "Time range queries only support time based binning.");
|
||||
}
|
||||
|
||||
|
||||
// set default values (if not set)
|
||||
if (query.getAggregation().getAggregations() == null || query.getAggregation().getAggregations().isEmpty()) {
|
||||
query.getAggregation().setAggregations(new ArrayList<>(defaultResponseAggregations));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,11 +67,11 @@ public class CSVHTTPResponse extends AbstractHTTPResponse {
|
||||
|
||||
protected void validateQueries(DAQQueries queries) {
|
||||
for (DAQQueryElement query : queries) {
|
||||
if (!(query.getAggregationType() == null || AggregationType.value.equals(query.getAggregationType()))) {
|
||||
if (!(query.getAggregation() == null || AggregationType.value.equals(query.getAggregation().getAggregationType()))) {
|
||||
// We allow only no aggregation or value aggregation as
|
||||
// extrema: nested structure and not clear how to map it to one line
|
||||
// index: value is an array of Statistics whose size is not clear at initialization time
|
||||
String message = "CSV export does not support '" + query.getAggregationType() + "'";
|
||||
String message = "CSV export does not support '" + query.getAggregation().getAggregationType() + "'";
|
||||
LOGGER.warn(message);
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ public class CSVResponseStreamWriter implements ResponseStreamWriter {
|
||||
private void setupChannelColumns(DAQQueryElement daqQuery, BackendQuery backendQuery, ChannelName channelName,
|
||||
Collection<String> header, Collection<Pair<ChannelName, Function<DataEvent, String>>> accessors) {
|
||||
Set<QueryField> queryFields = daqQuery.getFields();
|
||||
List<Aggregation> aggregations = daqQuery.getAggregations();
|
||||
List<Aggregation> aggregations = daqQuery.getAggregation() != null ? daqQuery.getAggregation().getAggregations() : null;
|
||||
|
||||
QueryAnalyzer queryAnalyzer = queryAnalizerFactory.apply(backendQuery);
|
||||
|
||||
@@ -165,7 +165,7 @@ public class CSVResponseStreamWriter implements ResponseStreamWriter {
|
||||
}
|
||||
|
||||
if (aggregations != null && queryAnalyzer.isAggregationEnabled()) {
|
||||
for (Aggregation aggregation : daqQuery.getAggregations()) {
|
||||
for (Aggregation aggregation : aggregations) {
|
||||
header.add(channelName.getName() + DELIMITER_CHANNELNAME_FIELDNAME + QueryField.value.name()
|
||||
+ DELIMITER_CHANNELNAME_FIELDNAME + aggregation.name());
|
||||
accessors.add(Pair.of(channelName, new AggregationStringifyer(aggregation.getAccessor(), EMPTY_VALUE)));
|
||||
|
||||
@@ -105,7 +105,7 @@ public class JSONResponseStreamWriter implements ResponseStreamWriter {
|
||||
|
||||
protected Set<String> getFields(DAQQueryElement query) {
|
||||
Set<QueryField> queryFields = query.getFields();
|
||||
List<Aggregation> aggregations = query.getAggregations();
|
||||
List<Aggregation> aggregations = query.getAggregation() != null ? query.getAggregation().getAggregations() : null;
|
||||
|
||||
Set<String> includedFields =
|
||||
new LinkedHashSet<String>(queryFields.size() + (aggregations != null ? aggregations.size() : 0));
|
||||
@@ -114,7 +114,7 @@ public class JSONResponseStreamWriter implements ResponseStreamWriter {
|
||||
includedFields.add(field.name());
|
||||
}
|
||||
if (aggregations != null) {
|
||||
for (Aggregation aggregation : query.getAggregations()) {
|
||||
for (Aggregation aggregation : aggregations) {
|
||||
includedFields.add(aggregation.name());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user