diff --git a/src/main/java/ch/psi/daq/queryrest/controller/QueryRestController.java b/src/main/java/ch/psi/daq/queryrest/controller/QueryRestController.java index 3cde28d..4dfc83a 100644 --- a/src/main/java/ch/psi/daq/queryrest/controller/QueryRestController.java +++ b/src/main/java/ch/psi/daq/queryrest/controller/QueryRestController.java @@ -102,7 +102,6 @@ public class QueryRestController { LOGGER.debug("Executing query '{}'", query.getClass().getSimpleName()); QueryAnalyzer queryAnalizer = queryAnalizerFactory.apply(query); - queryAnalizer.validate(); // all the magic happens here Stream>> channelToDataEvents = getQueryProcessor(query.getDBMode()).process(queryAnalizer); diff --git a/src/main/java/ch/psi/daq/queryrest/controller/QueryValidator.java b/src/main/java/ch/psi/daq/queryrest/controller/QueryValidator.java index 8bc1705..b7d4422 100644 --- a/src/main/java/ch/psi/daq/queryrest/controller/QueryValidator.java +++ b/src/main/java/ch/psi/daq/queryrest/controller/QueryValidator.java @@ -13,8 +13,11 @@ import org.springframework.validation.Errors; import org.springframework.validation.Validator; import ch.psi.daq.query.model.AbstractQuery; +import ch.psi.daq.query.model.AbstractTimeRangeQuery; import ch.psi.daq.query.model.Aggregation; +import ch.psi.daq.query.model.DBMode; import ch.psi.daq.query.model.QueryField; +import ch.psi.daq.query.range.QueryRange; import ch.psi.daq.queryrest.config.QueryRestConfig; /** @@ -45,6 +48,31 @@ public class QueryValidator implements Validator { AbstractQuery query = (AbstractQuery) target; + QueryRange queryRange = query.getQueryRange(); + + if (!queryRange.isPulseIdRangeDefined() && !queryRange.isTimeRangeDefined()) { + errors.reject("", "Either time or pulseId range must be defined by the query!"); + } + + if (queryRange.isPulseIdRangeDefined()) { + if (queryRange.getStartPulseId() > queryRange.getEndPulseId()) { + errors.rejectValue("pulseId", "pulseId", "Start pulse-id must be smaller or equals end pulse-id!"); + } + } else if (queryRange.isTimeRangeDefined()) { + if (queryRange.getStartMillis() > queryRange.getEndMillis()) { + errors.rejectValue("millis", "millis", "Start millis must be smaller or equals to end millis!"); + } else if (queryRange.getStartMillis() == queryRange.getEndMillis() + && queryRange.getStartNanos() > queryRange.getEndNanos()) { + errors.rejectValue("nanos", "nanos", "Start nanos must be smaller or equals to end nanos!"); + } + } + + if (DBMode.archiverappliance.equals(query.getDBMode())) { + if (!(query instanceof AbstractTimeRangeQuery)) { + errors.reject("", "ArchiverAppliance supports time range queries only!"); + } + } + if (query.getFields() == null || query.getFields().isEmpty()) { query.setFields(new LinkedHashSet<>(defaultResponseFields)); }