Skip to content

Commit

Permalink
Let the QueryCriteriaValidator actually just validate a command inste…
Browse files Browse the repository at this point in the history
…ad of also parsing it

Signed-off-by: Florian Fendt <Florian.Fendt@bosch.io>
  • Loading branch information
ffendt committed Dec 10, 2020
1 parent 5024a29 commit 4e9db4f
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 24 deletions.
Expand Up @@ -33,12 +33,12 @@ public interface SearchConfig extends ServiceSpecificConfig, WithHealthCheckConf
Optional<String> getMongoHintsByNamespace();

/**
* Returns the {@code QueryCriteriaValidator} to be used for validation and decoding
* Returns the {@code QueryCriteriaValidator} to be used for validating and decoding
* {@link org.eclipse.ditto.model.query.criteria.Criteria} of a
* {@link org.eclipse.ditto.signals.commands.thingsearch.query.ThingSearchQueryCommand}.
*
* @return the config.
* @since 1.5.0
* @since 1.6.0
*/
String getQueryValidator();

Expand Down Expand Up @@ -85,7 +85,7 @@ enum SearchConfigValue implements KnownConfigValue {
* The {@code QueryCriteriaValidator} used for decoding and validating {@link org.eclipse.ditto.model.query.criteria.Criteria}
* of a {@link org.eclipse.ditto.signals.commands.thingsearch.query.ThingSearchQueryCommand}.
*
* @since 1.5.0
* @since 1.6.0
*/
QUERY_CRITERIA_VALIDATOR("query-criteria-validator",
"org.eclipse.ditto.services.thingsearch.persistence.query.validation.DefaultQueryCriteriaValidator");
Expand Down
Expand Up @@ -61,6 +61,7 @@ private QueryParser(final CriteriaFactory criteriaFactory,
* @param criteriaFactory a factory to create criteria.
* @param fieldExpressionFactory a factory to retrieve things field expressions.
* @param queryBuilderFactory a factory to create a query builder.
* @param queryCriteriaValidator a validator for queries.
* @return the query factory.
*/
public static QueryParser of(final CriteriaFactory criteriaFactory,
Expand All @@ -78,7 +79,8 @@ public static QueryParser of(final CriteriaFactory criteriaFactory,
* @return the query.
*/
public Query parse(final ThingSearchQueryCommand<?> command) {
final Criteria criteria = queryCriteriaValidator.parseCriteria(command, queryFilterCriteriaFactory);
queryCriteriaValidator.validateCommand(command);
final Criteria criteria = parseCriteria(command);
if (command instanceof QueryThings) {
final QueryThings queryThings = (QueryThings) command;
final QueryBuilder queryBuilder = queryBuilderFactory.newBuilder(criteria);
Expand All @@ -96,6 +98,17 @@ public Query parse(final ThingSearchQueryCommand<?> command) {
}
}

private Criteria parseCriteria(final ThingSearchQueryCommand<?> command) {
final DittoHeaders headers = command.getDittoHeaders();
final Set<String> namespaces = command.getNamespaces().orElse(null);
final String filter = command.getFilter().orElse(null);
if (namespaces == null) {
return queryFilterCriteriaFactory.filterCriteria(filter, command.getDittoHeaders());
} else {
return queryFilterCriteriaFactory.filterCriteriaRestrictedByNamespaces(filter, headers, namespaces);
}
}

/**
* Parses a SudoCountThings command into a query.
*
Expand Down
Expand Up @@ -12,11 +12,6 @@
*/
package org.eclipse.ditto.services.thingsearch.persistence.query.validation;

import java.util.Set;

import org.eclipse.ditto.model.base.headers.DittoHeaders;
import org.eclipse.ditto.model.query.criteria.Criteria;
import org.eclipse.ditto.model.query.filter.QueryFilterCriteriaFactory;
import org.eclipse.ditto.signals.commands.thingsearch.query.ThingSearchQueryCommand;

import akka.actor.ActorRef;
Expand All @@ -36,15 +31,7 @@ public DefaultQueryCriteriaValidator(final ActorSystem actorSystem, final ActorR
}

@Override
public Criteria parseCriteria(final ThingSearchQueryCommand<?> command, final QueryFilterCriteriaFactory factory) {

final DittoHeaders headers = command.getDittoHeaders();
final Set<String> namespaces = command.getNamespaces().orElse(null);
final String filter = command.getFilter().orElse(null);
if (namespaces == null) {
return factory.filterCriteria(filter, command.getDittoHeaders());
} else {
return factory.filterCriteriaRestrictedByNamespaces(filter, headers, namespaces);
}
public void validateCommand(final ThingSearchQueryCommand<?> command) {
// do nothing
}
}
Expand Up @@ -14,8 +14,6 @@

import java.util.Arrays;

import org.eclipse.ditto.model.query.criteria.Criteria;
import org.eclipse.ditto.model.query.filter.QueryFilterCriteriaFactory;
import org.eclipse.ditto.services.thingsearch.common.config.DittoSearchConfig;
import org.eclipse.ditto.services.thingsearch.common.config.SearchConfig;
import org.eclipse.ditto.services.utils.akka.AkkaClassLoader;
Expand Down Expand Up @@ -45,10 +43,8 @@ public abstract class QueryCriteriaValidator implements Extension {
*
* May throw an exception depending on the implementation in the used QueryCriteriaValidator.
*
* @return the criteria of the query command.
*/
public abstract Criteria parseCriteria(final ThingSearchQueryCommand<?> command,
final QueryFilterCriteriaFactory factory);
public abstract void validateCommand(final ThingSearchQueryCommand<?> command);

/**
* Load a {@code QueryCriteriaValidator} dynamically according to the search configuration.
Expand Down

0 comments on commit 4e9db4f

Please sign in to comment.