From a6867219b1b85a27023820ca4382ff1017506049 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 26 Sep 2025 16:57:10 +0300 Subject: [PATCH] Remove FieldValueConverter (#2699) * (because) used only for ActionFields.STATUS * could be part of new Node mapping mechanism * simplify * Deprecate ActionFields.STATUS, add / replace it with ActionFields.ACTIVE. In future STATUS will become the real action status (and DETAILSTATUS will be removed) * Deprecate MgmtAction.getStatus add / replace it with MgmtAction.isActive. In future status will become the real action status (and detailStatus will be removed) Signed-off-by: Avgustin Marinov --- .../hawkbit/repository/ActionFields.java | 23 +++---- .../repository/FieldValueConverter.java | 32 --------- .../mgmt/json/model/action/MgmtAction.java | 12 +++- .../resource/mapper/MgmtTargetMapper.java | 7 +- .../hawkbit/repository/jpa/ql/QLSupport.java | 44 ++++++++---- .../repository/jpa/rsql/RsqlParser.java | 69 ++++++------------- .../jpa/rsql/legacy/JpaQueryRsqlVisitor.java | 15 +--- .../rsql/legacy/JpaQueryRsqlVisitorG2.java | 10 +-- .../jpa/JpaRepositoryConfiguration.java | 10 +-- .../jpa/rsql/RsqlActionFieldsTest.java | 5 +- .../component/TargetActionsHistory.java | 2 +- 11 files changed, 88 insertions(+), 141 deletions(-) delete mode 100644 hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/FieldValueConverter.java diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java index a3b0de73c..305bbe339 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/ActionFields.java @@ -17,10 +17,12 @@ import lombok.Getter; * Sort and search fields for actions. */ @Getter -public enum ActionFields implements QueryField, FieldValueConverter { +public enum ActionFields implements QueryField { ID("id"), - STATUS("active"), // true if status is "pending", false if "finished" + @Deprecated(since = "0.10.0", forRemoval = true) // use ACTIVE + STATUS("active"), // true if status is "pending", false if "finished", after removal, will deprecate DETAILSTATUS too and replace with STATUS + ACTIVE("active"), // true if st DETAILSTATUS("status"), // real status LASTSTATUSCODE("lastActionStatusCode"), CREATEDAT("createdAt"), @@ -39,9 +41,6 @@ public enum ActionFields implements QueryField, FieldValueConverter subEntityAttributes; @@ -50,19 +49,15 @@ public enum ActionFields implements QueryField, FieldValueConverter the enum parameter - */ -public interface FieldValueConverter> { - - /** - * Converts the given {@code value} into the representation to build a generic query. - * - * @param enumValue the enum value to build the value for - * @param value the value in string representation - * @return the converted object if conversion is applicable, or if the given enum value does not need to be converted the - * unmodified {@code value} is returned. - * @throws IllegalArgumentException if the value is not supported - */ - Object convertValue(final T enumValue, final String value); -} \ No newline at end of file diff --git a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java index 860d69aae..71e6202b8 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java +++ b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java @@ -76,20 +76,28 @@ public class MgmtAction extends MgmtBaseEntity { public static final String ACTION_CANCEL = "cancel"; /** * API definition for action completed. + * + * @deprecated since 0.10.0 will be removed together with status field */ + @Deprecated(since = "0.10.0", forRemoval = true) public static final String ACTION_FINISHED = "finished"; /** * API definition for action still active. + * + * @deprecated since 0.10.0 will be removed together with status field */ + @Deprecated(since = "0.10.0", forRemoval = true) public static final String ACTION_PENDING = "pending"; @Schema(description = "ID of the action", example = "7") private Long id; @Schema(description = "Type of action", example = "update") private String type; - @Schema(description = "Status of action", example = "finished") + @Deprecated(since = "0.10.0") + @Schema(description = "Status of action, use active", example = "finished", deprecated = true) private String status; - + @Schema(description = "Status of action") + private boolean active; @Schema(description = "Detailed status of action", example = "finished") private String detailStatus; @Schema(example = "1691065903238") diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTargetMapper.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTargetMapper.java index 5894cde84..d697450d2 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTargetMapper.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTargetMapper.java @@ -239,12 +239,9 @@ public final class MgmtTargetMapper { action.getWeight().ifPresent(result::setWeight); result.setForceType(MgmtRestModelMapper.convertActionType(action.getActionType())); - if (action.isActive()) { - result.setStatus(MgmtAction.ACTION_PENDING); - } else { - result.setStatus(MgmtAction.ACTION_FINISHED); - } + result.setStatus(action.isActive() ? MgmtAction.ACTION_PENDING : MgmtAction.ACTION_FINISHED); + result.setActive(action.isActive()); result.setDetailStatus(action.getStatus().toString().toLowerCase()); action.getLastActionStatusCode().ifPresent(result::setLastStatusCode); diff --git a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/QLSupport.java b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/QLSupport.java index 8b82e346c..b871981d9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/QLSupport.java +++ b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/QLSupport.java @@ -9,6 +9,8 @@ */ package org.eclipse.hawkbit.repository.jpa.ql; +import java.util.List; +import java.util.Map; import java.util.Objects; import jakarta.persistence.EntityManager; @@ -21,6 +23,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.text.StrLookup; +import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.QueryField; import org.eclipse.hawkbit.repository.exception.QueryException; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; @@ -186,32 +189,45 @@ public class QLSupport { @Override public & QueryField> Node parse(final String query, final Class queryFieldType) throws QueryException { - return RsqlParser.parse(query, queryFieldType); - } - } - - public static class MappingQueryParser extends DefaultQueryParser { - - @Override - public & QueryField> Node parse(final String query, final Class queryFieldType) throws QueryException { - return RsqlParser.parse(query, queryFieldType).map(this::map); + return RsqlParser.parse(query, queryFieldType).map(comparison -> map(comparison, queryFieldType)); } - protected Comparison map(final Comparison comparison) { - final String key = mapKey(comparison.getKey(), comparison).toString(); - final Object value = mapValue(comparison.getValue(), comparison); + protected & QueryField> Comparison map(final Comparison comparison, final Class queryFieldType) { + final String key = mapKey(comparison.getKey(), comparison, queryFieldType).toString(); + final Object value = mapValue(comparison.getValue(), comparison, queryFieldType); return key.equals(comparison.getKey()) && Objects.equals(value, comparison.getValue()) ? comparison : Comparison.builder().key(key).op(comparison.getOp()).value(value).build(); } // just extension points for subclasses - protected Object mapKey(final String key, final Comparison comparison) { + protected & QueryField>Object mapKey(final String key, final Comparison comparison, final Class queryFieldType) { return key; } // just extension points for subclasses - protected Object mapValue(final Object value, final Comparison comparison) { + protected & QueryField> Object mapValue(final Object value, final Comparison comparison, final Class queryFieldType) { + if (queryFieldType == (Class)ActionFields.class && "active".equalsIgnoreCase(comparison.getKey())) { + if (value instanceof List) { + return ((List)value).stream().map(DefaultQueryParser::mapActionStatus).toList(); + } else { + return mapActionStatus(value); + } + } return value; } + + private static Object mapActionStatus(final Object value){ + final String strValue = String.valueOf(value); + if ("true".equalsIgnoreCase(strValue) || "false".equalsIgnoreCase(strValue)) { + return value; + } else { + // handle custom action fields status + try { + return ActionFields.convertStatusValue(strValue); + } catch (final IllegalArgumentException e) { + throw new RSQLParameterUnsupportedFieldException(e.getMessage()); + } + } + } } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java index ffe7799f2..c386609e4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java +++ b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java @@ -28,8 +28,6 @@ import java.util.Set; import java.util.function.Function; import java.util.function.UnaryOperator; -import jakarta.annotation.Nullable; - import cz.jirutka.rsql.parser.RSQLParser; import cz.jirutka.rsql.parser.RSQLParserException; import cz.jirutka.rsql.parser.ast.AndNode; @@ -41,7 +39,6 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.eclipse.hawkbit.repository.FieldValueConverter; import org.eclipse.hawkbit.repository.QueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; @@ -79,14 +76,14 @@ public class RsqlParser { } public static Node parse(final String rsql) { - return parse(rsql, (Function) null); + return parse(rsql, (UnaryOperator) null); } public static & QueryField> Node parse(final String rsql, final Class queryFieldType) { return parse(rsql, queryFieldType == null ? null : key -> resolveKey(key, queryFieldType)); } - private static Node parse(final String rsql, final Function keyResolver) { + private static Node parse(final String rsql, final UnaryOperator keyResolver) { try { return RSQL_PARSER .parse(rsql) @@ -97,7 +94,7 @@ public class RsqlParser { } @SuppressWarnings("java:S3776") // java:S3776 - group in single method for easier read of whole logic - private static & QueryField> Key resolveKey(final String key, final Class rsqlQueryFieldType) { + private static & QueryField> String resolveKey(final String key, final Class rsqlQueryFieldType) { final int firstSeparatorIndex = key.indexOf(SUB_ATTRIBUTE_SEPARATOR); final String enumName = (firstSeparatorIndex == -1 ? key : key.substring(0, firstSeparatorIndex)).toUpperCase(); log.debug("Get field identifier by name {} of enum type {}", enumName, rsqlQueryFieldType); @@ -151,17 +148,15 @@ public class RsqlParser { } } - return new Key(attribute, RsqlVisitor.valueConverter(enumValue)); + return attribute; } - private record Key(String path, UnaryOperator converter) {} - private static class RsqlVisitor implements RSQLVisitor { - private final Function keyResolver; + private final Function keyResolver; - private RsqlVisitor(final Function keyResolver) { - this.keyResolver = keyResolver == null ? str -> new Key(str, UnaryOperator.identity()) : keyResolver; + private RsqlVisitor(final UnaryOperator keyResolver) { + this.keyResolver = keyResolver == null ? UnaryOperator.identity() : keyResolver; } @Override @@ -184,40 +179,39 @@ public class RsqlParser { @Override public Node visit(final ComparisonNode node, final String param) { final String nodeSelector = node.getSelector(); - final Key key = keyResolver.apply(nodeSelector); - final String path = key.path(); - final Object value = toValue(node, key); + final String key = keyResolver.apply(nodeSelector); + final Object value = toValue(node); final ComparisonOperator op = node.getOperator(); if (op == IS || op == RSQLOperators.EQUAL) { if ("".equals(value)) { // keep special backward compatible behaviour tags == '' means "null / has not or '' - return new Comparison(path, EQ, null, nodeSelector).or(new Comparison(path, EQ, "", nodeSelector)); + return new Comparison(key, EQ, null, nodeSelector).or(new Comparison(key, EQ, "", nodeSelector)); } - return new Comparison(path, isLike(value) ? LIKE : EQ, value, nodeSelector); + return new Comparison(key, isLike(value) ? LIKE : EQ, value, nodeSelector); } else if (op == NOT || op == RSQLOperators.NOT_EQUAL) { if ("".equals(value)) { // keep special backward compatible behaviour. != '' means "not null / has and not '' - return new Comparison(path, LIKE, "*", nodeSelector).and(new Comparison(path, NE, "", nodeSelector)); + return new Comparison(key, LIKE, "*", nodeSelector).and(new Comparison(key, NE, "", nodeSelector)); } - return new Comparison(path, isLike(value) ? NOT_LIKE : NE, value, nodeSelector); + return new Comparison(key, isLike(value) ? NOT_LIKE : NE, value, nodeSelector); } else if (op == RSQLOperators.GREATER_THAN) { - return new Comparison(path, GT, value, nodeSelector); + return new Comparison(key, GT, value, nodeSelector); } else if (op == RSQLOperators.GREATER_THAN_OR_EQUAL) { - return new Comparison(path, GTE, value, nodeSelector); + return new Comparison(key, GTE, value, nodeSelector); } else if (op == RSQLOperators.LESS_THAN) { - return new Comparison(path, LT, value, nodeSelector); + return new Comparison(key, LT, value, nodeSelector); } else if (op == RSQLOperators.LESS_THAN_OR_EQUAL) { - return new Comparison(path, LTE, value, nodeSelector); + return new Comparison(key, LTE, value, nodeSelector); } else if (op == RSQLOperators.IN) { - return new Comparison(path, IN, value, nodeSelector); + return new Comparison(key, IN, value, nodeSelector); } else if (op == RSQLOperators.NOT_IN) { - return new Comparison(path, NOT_IN, value, nodeSelector); + return new Comparison(key, NOT_IN, value, nodeSelector); } else { throw new IllegalArgumentException("Unsupported operator: " + node.getOperator()); } } - private Object toValue(final ComparisonNode node, final Key key) { + private Object toValue(final ComparisonNode node) { final List arguments = node.getArguments(); final ComparisonOperator operator = node.getOperator(); if (arguments.isEmpty()) { @@ -228,35 +222,16 @@ public class RsqlParser { return null; } else { if (operator == RSQLOperators.IN || operator == RSQLOperators.NOT_IN) { - return arguments.stream().map(key.converter()).toList(); + return arguments.stream().toList(); } else if (arguments.size() > 1) { throw new IllegalArgumentException( "Operator " + operator + " requires exactly one argument, but got: " + arguments.size()); } else { - return key.converter().apply(arguments.get(0)); + return arguments.get(0); } } } - @SuppressWarnings({ "rawtypes", "unchecked" }) - private static > UnaryOperator valueConverter(@Nullable final T enumValue) { - if (enumValue instanceof FieldValueConverter fieldValueConverter) { - return value -> { - if (value instanceof String strValue) { - try { - return fieldValueConverter.convertValue(enumValue, strValue); - } catch (final Exception e) { - throw new RSQLParameterUnsupportedFieldException(e.getMessage(), null); - } - } else { - return value; - } - }; - } else { - return UnaryOperator.identity(); - } - } - private static final String ESCAPE_CHAR_WITH_ASTERISK = "\\" + LIKE_WILDCARD; private static boolean isLike(final Object value) { diff --git a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java index efc2ed7f5..29e985b09 100644 --- a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java +++ b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java @@ -42,7 +42,7 @@ import cz.jirutka.rsql.parser.ast.OrNode; import cz.jirutka.rsql.parser.ast.RSQLVisitor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.math.NumberUtils; -import org.eclipse.hawkbit.repository.FieldValueConverter; +import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.QueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; @@ -301,8 +301,8 @@ public class JpaQueryRsqlVisitor & QueryField, T> extends Abst if (javaType != null && javaType.isEnum()) { return transformEnumValue(node, value, javaType); } - if (fieldName instanceof FieldValueConverter) { - return convertFieldConverterValue(fieldName, value); + if (fieldName == ActionFields.STATUS) { + return ActionFields.convertStatusValue(value); } if (Boolean.TYPE.equals(javaType)) { @@ -323,15 +323,6 @@ public class JpaQueryRsqlVisitor & QueryField, T> extends Abst } } - @SuppressWarnings({ "rawtypes", "unchecked" }) - private Object convertFieldConverterValue(final A fieldName, final String value) { - try { - return ((FieldValueConverter) fieldName).convertValue(fieldName, value); - } catch (final Exception e) { - throw new RSQLParameterSyntaxException(e.getMessage(), null); - } - } - private List mapToPredicate(final ComparisonNode node, final Path fieldPath, final List values, final List transformedValues, final QueryPath queryPath) { diff --git a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java index d3fd03f06..7acf6c5ed 100644 --- a/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java +++ b/hawkbit-repository/hawkbit-repository-jpa-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java @@ -40,7 +40,7 @@ import cz.jirutka.rsql.parser.ast.RSQLOperators; import cz.jirutka.rsql.parser.ast.RSQLVisitor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.math.NumberUtils; -import org.eclipse.hawkbit.repository.FieldValueConverter; +import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.QueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; @@ -367,12 +367,8 @@ public class JpaQueryRsqlVisitorG2 & QueryField, T> return toEnumValue(node, javaType, value); } - if (enumValue instanceof FieldValueConverter fieldValueConverter) { - try { - return fieldValueConverter.convertValue(enumValue, value); - } catch (final Exception e) { - throw new RSQLParameterUnsupportedFieldException(e.getMessage(), null); - } + if (enumValue == ActionFields.STATUS) { + return ActionFields.convertStatusValue(value); } if (boolean.class.equals(javaType) || Boolean.class.equals(javaType)) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java index a6828382b..5ec08a484 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java @@ -25,6 +25,7 @@ import org.eclipse.hawkbit.artifact.encryption.ArtifactEncryptionSecretsStorage; import org.eclipse.hawkbit.artifact.encryption.ArtifactEncryptionService; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.PropertiesQuotaManagement; +import org.eclipse.hawkbit.repository.QueryField; import org.eclipse.hawkbit.repository.QuotaManagement; import org.eclipse.hawkbit.repository.RepositoryConfiguration; import org.eclipse.hawkbit.repository.RepositoryProperties; @@ -67,10 +68,8 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetType; import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.EntityInterceptorHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.TenantAwareHolder; -import org.eclipse.hawkbit.repository.jpa.ql.Node; import org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison; import org.eclipse.hawkbit.repository.jpa.ql.QLSupport.DefaultQueryParser; -import org.eclipse.hawkbit.repository.jpa.ql.QLSupport.MappingQueryParser; import org.eclipse.hawkbit.repository.jpa.ql.QLSupport.QueryParser; import org.eclipse.hawkbit.repository.jpa.repository.ActionRepository; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetRepository; @@ -529,11 +528,12 @@ public class JpaRepositoryConfiguration { @Bean @ConditionalOnMissingBean QueryParser queryParser(final Optional virtualPropertyResolver) { - return virtualPropertyResolver.map(resolver -> new MappingQueryParser() { + return virtualPropertyResolver.map(resolver -> new DefaultQueryParser() { @Override - protected Object mapValue(final Object value, final Comparison comparison) { - return value instanceof String strValue ? resolver.replace(strValue) : value; + protected & QueryField> Object mapValue( + final Object value, final Comparison comparison, final Class queryFieldType) { + return super.mapValue(value instanceof String strValue ? resolver.replace(strValue) : value, comparison, queryFieldType); } }).orElseGet(DefaultQueryParser::new); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlActionFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlActionFieldsTest.java index 8dabdf222..c096911e8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlActionFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlActionFieldsTest.java @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.TargetManagement.Create; +import org.eclipse.hawkbit.repository.exception.QueryException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; @@ -77,8 +78,8 @@ class RsqlActionFieldsTest extends AbstractJpaIntegrationTest { assertRSQLQuery(ActionFields.STATUS.name() + "=in=(pending)", 5); assertRSQLQuery(ActionFields.STATUS.name() + "=out=(pending)", 6); - final String rsql = ActionFields.STATUS.name() + "==true"; - assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) + final String rsql = ActionFields.STATUS.name() + "==true2"; + assertThatExceptionOfType(QueryException.class) .as("RSQLParameterUnsupportedFieldException because status cannot be compared with 'true'") .isThrownBy(() -> assertRSQLQuery(rsql, 5)); } diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/component/TargetActionsHistory.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/component/TargetActionsHistory.java index 9db88d091..b40fa5e69 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/component/TargetActionsHistory.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/component/TargetActionsHistory.java @@ -114,7 +114,7 @@ public class TargetActionsHistory extends Grid