Add missing option searching for empty field (e.g. description=='') (#650)

* Fix missing option searching for empty field.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* search for empty strings as well.

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>
This commit is contained in:
Kai Zimmermann
2018-03-05 11:05:14 +01:00
committed by GitHub
parent ce53c10c9c
commit aa39675f4b
12 changed files with 80 additions and 25 deletions

View File

@@ -28,6 +28,7 @@ import org.eclipse.hawkbit.repository.jpa.builder.JpaTargetBuilder;
import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
/**
@@ -57,7 +58,7 @@ public class JpaEntityFactory implements EntityFactory {
@Override
public MetaData generateMetadata(final String key, final String value) {
return new JpaDistributionSetMetadata(key, value);
return new JpaDistributionSetMetadata(key, StringUtils.trimWhitespace(value));
}
@Override

View File

@@ -44,6 +44,7 @@ import org.springframework.beans.SimpleTypeConverter;
import org.springframework.beans.TypeMismatchException;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import cz.jirutka.rsql.parser.RSQLParser;
import cz.jirutka.rsql.parser.RSQLParserException;
@@ -626,17 +627,35 @@ public final class RSQLUtility {
private Predicate getEqualToPredicate(final Object transformedValue, final Path<Object> fieldPath) {
if (transformedValue instanceof String) {
if (StringUtils.isEmpty(transformedValue)) {
return cb.or(cb.isNull(pathOfString(fieldPath)), cb.equal(pathOfString(fieldPath), ""));
}
final String preFormattedValue = escapeValueToSQL((String) transformedValue);
return cb.like(cb.upper(pathOfString(fieldPath)), preFormattedValue.toUpperCase());
}
if (transformedValue == null) {
return cb.isNull(pathOfString(fieldPath));
}
return cb.equal(fieldPath, transformedValue);
}
private Predicate getNotEqualToPredicate(final Object transformedValue, final Path<Object> fieldPath) {
if (transformedValue instanceof String) {
if (StringUtils.isEmpty(transformedValue)) {
return cb.and(cb.isNotNull(pathOfString(fieldPath)), cb.notEqual(pathOfString(fieldPath), ""));
}
final String preFormattedValue = escapeValueToSQL((String) transformedValue);
return cb.notLike(cb.upper(pathOfString(fieldPath)), preFormattedValue.toUpperCase());
}
if (transformedValue == null) {
return cb.isNotNull(pathOfString(fieldPath));
}
return cb.notEqual(fieldPath, transformedValue);
}