From 426bdbf179accd8a5bf1f0a1f3668b967e30d9e5 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Thu, 3 Jul 2025 14:41:55 +0300 Subject: [PATCH] Move Query Language (RSQL) in separate package and add Entity Matcher (#2531) * Move Query Language (RSQL) in separate package - hawkbit-repository-ql * Add Entity Matcher which match an entity object agains filter * Spec to string utils now in runtime (as a library) - could be used in tests or to dump something in runtimes * Move eclipselink/hibernate profiles in new QL module, this way provided / set to hawkbit-repository-jpa * Remove unused javax.el imports --- hawkbit-ddi/hawkbit-ddi-resource/pom.xml | 5 - hawkbit-mgmt/hawkbit-mgmt-resource/pom.xml | 5 - .../hawkbit-repository-core/pom.xml | 1 + .../hawkbit-repository-jpa/pom.xml | 79 +---------- .../RepositoryApplicationConfiguration.java | 2 +- .../management/JpaDeploymentManagement.java | 10 +- .../JpaDistributionSetManagement.java | 6 +- .../JpaDistributionSetTagManagement.java | 4 +- .../JpaDistributionSetTypeManagement.java | 4 +- .../management/JpaRolloutGroupManagement.java | 6 +- .../jpa/management/JpaRolloutManagement.java | 6 +- .../JpaSoftwareModuleManagement.java | 4 +- .../JpaSoftwareModuleTypeManagement.java | 4 +- .../JpaTargetFilterQueryManagement.java | 10 +- .../jpa/management/JpaTargetManagement.java | 34 ++--- .../management/JpaTargetTagManagement.java | 4 +- .../management/JpaTargetTypeManagement.java | 4 +- .../jpa/management/TargetManagementTest.java | 4 +- .../hawkbit/repository/jpa/rsql/NodeTest.java | 1 + ...ldsTest.java => RsqlActionFieldsTest.java} | 2 +- ...eldTest.java => RsqlRolloutFieldTest.java} | 2 +- ...st.java => RsqlRolloutGroupFieldTest.java} | 2 +- ....java => RsqlSoftwareModuleFieldTest.java} | 2 +- ... => RsqlSoftwareModuleTypeFieldsTest.java} | 2 +- ...FieldsTest.java => RsqlTagFieldsTest.java} | 2 +- ...ieldTest.java => RsqlTargetFieldTest.java} | 21 ++- ...a => RsqlTargetFilterQueryFieldsTest.java} | 2 +- ...{RSQLToSQLTest.java => RsqlToSqlTest.java} | 13 +- ...LUtilityTest.java => RsqlUtilityTest.java} | 43 +++--- .../hawkbit-repository-ql/README.md | 3 + .../hawkbit-repository-ql/pom.xml | 127 ++++++++++++++++++ .../repository/jpa/ql/EntityMatcher.java} | 41 +++--- .../hawkbit/repository/jpa/ql}/Node.java | 2 +- .../jpa/ql}/SpecificationBuilder.java | 26 ++-- .../jpa/ql/utils/HawkbitQlToSql.java} | 15 ++- .../jpa/ql/utils}/HibernateUtils.java | 2 +- .../jpa}/rsql/RsqlConfigHolder.java | 4 +- .../repository/jpa/rsql/RsqlParser.java | 23 ++-- .../repository/jpa/rsql/RsqlUtility.java} | 10 +- .../jpa/rsql/legacy}/AbstractRSQLVisitor.java | 7 +- .../jpa/rsql/legacy}/JpaQueryRsqlVisitor.java | 2 +- .../rsql/legacy}/JpaQueryRsqlVisitorG2.java | 5 +- .../legacy}/SpecificationBuilderLegacy.java | 13 +- .../hawkbit/repository/jpa/rsql/sa/Root.java | 0 .../jpa/rsql/sa/RootRepository.java | 0 .../sa/SpecificationBuilderLegacyTest.java | 10 +- .../jpa/rsql/sa/SpecificationBuilderTest.java | 20 +-- .../hawkbit/repository/jpa/rsql/sa/Sub.java | 0 .../repository/jpa/rsql/sa/SubRepository.java | 0 .../repository/jpa/rsql/sa/SubSub.java | 0 .../jpa/rsql/sa/SubSubRepository.java | 0 hawkbit-repository/pom.xml | 1 + pom.xml | 6 - 53 files changed, 326 insertions(+), 275 deletions(-) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLActionFieldsTest.java => RsqlActionFieldsTest.java} (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLRolloutFieldTest.java => RsqlRolloutFieldTest.java} (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLRolloutGroupFieldTest.java => RsqlRolloutGroupFieldTest.java} (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLSoftwareModuleFieldTest.java => RsqlSoftwareModuleFieldTest.java} (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLSoftwareModuleTypeFieldsTest.java => RsqlSoftwareModuleTypeFieldsTest.java} (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLTagFieldsTest.java => RsqlTagFieldsTest.java} (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLTargetFieldTest.java => RsqlTargetFieldTest.java} (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLTargetFilterQueryFieldsTest.java => RsqlTargetFilterQueryFieldsTest.java} (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLToSQLTest.java => RsqlToSqlTest.java} (93%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/{RSQLUtilityTest.java => RsqlUtilityTest.java} (94%) create mode 100644 hawkbit-repository/hawkbit-repository-ql/README.md create mode 100644 hawkbit-repository/hawkbit-repository-ql/pom.xml rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/ReferenceMatcher.java => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/EntityMatcher.java} (87%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql}/Node.java (99%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql}/SpecificationBuilder.java (96%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQL.java => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HawkbitQlToSql.java} (86%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils}/HibernateUtils.java (99%) rename hawkbit-repository/{hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa}/rsql/RsqlConfigHolder.java (95%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java (93%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtility.java} (94%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy}/AbstractRSQLVisitor.java (96%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy}/JpaQueryRsqlVisitor.java (99%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy}/JpaQueryRsqlVisitorG2.java (99%) rename hawkbit-repository/{hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy => hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy}/SpecificationBuilderLegacy.java (84%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Root.java (100%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/RootRepository.java (100%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java (89%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java (97%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Sub.java (100%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubRepository.java (100%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSub.java (100%) rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-ql}/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSubRepository.java (100%) diff --git a/hawkbit-ddi/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi/hawkbit-ddi-resource/pom.xml index 306afed65..0d64f73f4 100644 --- a/hawkbit-ddi/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi/hawkbit-ddi-resource/pom.xml @@ -70,11 +70,6 @@ tests test - - javax.el - javax.el-api - test - org.springframework.security spring-security-config diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt/hawkbit-mgmt-resource/pom.xml index 4cfc4d3fe..f5fc614b6 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/pom.xml @@ -78,11 +78,6 @@ tests test - - javax.el - javax.el-api - test - org.springframework.boot spring-boot-starter-json diff --git a/hawkbit-repository/hawkbit-repository-core/pom.xml b/hawkbit-repository/hawkbit-repository-core/pom.xml index bb7163c48..64cc36dce 100644 --- a/hawkbit-repository/hawkbit-repository-core/pom.xml +++ b/hawkbit-repository/hawkbit-repository-core/pom.xml @@ -27,6 +27,7 @@ hawkbit-repository-api ${project.version} + org.apache.commons commons-text diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index 6ca8135c9..be70958c9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -26,78 +26,10 @@ eclipselink - - - eclipselink - - - - jpa.vendor - !hibernate - - - - - - org.eclipse.hawkbit - hawkbit-repository-jpa-eclipselink - ${project.version} - - - - - - - - com.ethlo.persistence.tools - eclipselink-maven-plugin - ${eclipselink.maven.plugin.version} - - - process-classes - - weave - - - - - org.eclipse.hawkbit.repository.jpa.model - - - - org.eclipse.persistence - org.eclipse.persistence.jpa - ${eclipselink.version} - - - - - - - - hibernate - - - jpa.vendor - hibernate - - - - - - org.eclipse.hawkbit - hawkbit-repository-jpa-hibernate - ${project.version} - - - - - - org.eclipse.hawkbit - hawkbit-repository-jpa-api + hawkbit-repository-ql ${project.version} @@ -126,10 +58,6 @@ org.springframework.integration spring-integration-jdbc - - cz.jirutka.rsql - rsql-parser - org.jsoup jsoup @@ -150,11 +78,6 @@ ${project.version} test - - javax.el - javax.el-api - test - diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java index 850342772..edabfec66 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java @@ -154,7 +154,7 @@ import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.security.SecurityTokenGenerator; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java index b4c03a925..9401c119f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java @@ -66,7 +66,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.jpa.repository.ActionRepository; import org.eclipse.hawkbit.repository.jpa.repository.ActionStatusRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.ActionSpecifications; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.jpa.utils.DeploymentHelper; @@ -274,7 +274,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl assertTargetReadAllowed(controllerId); final List> specList = Arrays.asList( - RSQLUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database), ActionSpecifications.byTargetControllerId(controllerId)); return JpaManagementHelper.countBySpec(actionRepository, specList); @@ -288,7 +288,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl @Override public long countActions(final String rsql) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database)); + RsqlUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database)); return JpaManagementHelper.countBySpec(actionRepository, specList); } @@ -313,7 +313,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl @Override public Slice findActions(final String rsql, final Pageable pageable) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database)); + RsqlUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database)); return JpaManagementHelper.findAllWithoutCountBySpec(actionRepository, specList, pageable); } @@ -322,7 +322,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl assertTargetReadAllowed(controllerId); final List> specList = Arrays.asList( - RSQLUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, ActionFields.class, virtualPropertyReplacer, database), ActionSpecifications.byTargetControllerId(controllerId)); return JpaManagementHelper.findAllWithCountBySpec(actionRepository, specList, pageable); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java index 816201648..63ecf112e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java @@ -62,7 +62,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTagRepositor import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetFilterQueryRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; @@ -282,7 +282,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(distributionSetRepository, List.of( - RSQLUtility.buildRsqlSpecification(rsql, DistributionSetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, DistributionSetFields.class, virtualPropertyReplacer, database), DistributionSetSpecification.isNotDeleted()), pageable); } @@ -551,7 +551,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { assertDsTagExists(tagId); return JpaManagementHelper.findAllWithCountBySpec(distributionSetRepository, List.of( - RSQLUtility.buildRsqlSpecification(rsql, DistributionSetFields.class, virtualPropertyReplacer, + RsqlUtility.buildRsqlSpecification(rsql, DistributionSetFields.class, virtualPropertyReplacer, database), DistributionSetSpecification.hasTag(tagId), DistributionSetSpecification.isNotDeleted()), pageable); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTagManagement.java index 5ee47066e..316c5a66d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTagManagement.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.repository.jpa.configuration.Constants; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTagRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTagSpecifications; import org.eclipse.hawkbit.repository.jpa.specifications.TagSpecification; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -155,7 +155,7 @@ public class JpaDistributionSetTagManagement implements DistributionSetTagManage @Override public Page findByRsql(final String rsql, final Pageable pageable) { - final Specification spec = RSQLUtility.buildRsqlSpecification( + final Specification spec = RsqlUtility.buildRsqlSpecification( rsql, DistributionSetTagFields.class, virtualPropertyReplacer, database); return JpaManagementHelper.findAllWithCountBySpec(distributionSetTagRepository, Collections.singletonList(spec), pageable); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java index d9eaab7bc..1274cd16a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetTypeManagement.java @@ -39,7 +39,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTypeRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleTypeRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetTypeRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpecification; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -198,7 +198,7 @@ public class JpaDistributionSetTypeManagement implements DistributionSetTypeMana @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(distributionSetTypeRepository, List.of( - RSQLUtility.buildRsqlSpecification(rsql, DistributionSetTypeFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, DistributionSetTypeFields.class, virtualPropertyReplacer, database), DistributionSetTypeSpecification.isNotDeleted()), pageable); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutGroupManagement.java index d4c63f9ac..36738d8e8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutGroupManagement.java @@ -40,7 +40,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.ActionRepository; import org.eclipse.hawkbit.repository.jpa.repository.RolloutGroupRepository; import org.eclipse.hawkbit.repository.jpa.repository.RolloutRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; @@ -122,7 +122,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { throwEntityNotFoundExceptionIfRolloutDoesNotExist(rolloutId); final List> specList = Arrays.asList( - RSQLUtility.buildRsqlSpecification(rsql, RolloutGroupFields.class, virtualPropertyReplacer, + RsqlUtility.buildRsqlSpecification(rsql, RolloutGroupFields.class, virtualPropertyReplacer, database), (root, query, cb) -> cb.equal(root.get(JpaRolloutGroup_.rollout).get(AbstractJpaBaseEntity_.id), rolloutId)); @@ -189,7 +189,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { throwExceptionIfRolloutGroupDoesNotExist(rolloutGroupId); final List> specList = Arrays.asList( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), (root, query, cb) -> { final ListJoin rolloutTargetJoin = root.join(JpaTarget_.rolloutTargetGroup); return cb.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup).get(AbstractJpaBaseEntity_.id), rolloutGroupId); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java index 8c5dc7809..7bf632abf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java @@ -63,7 +63,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.ActionRepository; import org.eclipse.hawkbit.repository.jpa.repository.RolloutGroupRepository; import org.eclipse.hawkbit.repository.jpa.repository.RolloutRepository; import org.eclipse.hawkbit.repository.jpa.rollout.condition.StartNextGroupRolloutGroupSuccessAction; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.RolloutSpecification; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.jpa.utils.WeightValidationHelper; @@ -273,7 +273,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Override public Page findByRsql(final String rsql, final boolean deleted, final Pageable pageable) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, RolloutFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, RolloutFields.class, virtualPropertyReplacer, database), RolloutSpecification.isDeleted(deleted, pageable.getSort())); return JpaManagementHelper.convertPage(rolloutRepository.findAll(JpaManagementHelper.combineWithAnd(specList), pageable), pageable); } @@ -281,7 +281,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Override public Page findByRsqlWithDetailedStatus(final String rsql, final boolean deleted, final Pageable pageable) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, RolloutFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, RolloutFields.class, virtualPropertyReplacer, database), RolloutSpecification.isDeleted(deleted, pageable.getSort())); return appendStatusDetails(JpaManagementHelper.convertPage( rolloutRepository.findAll(JpaManagementHelper.combineWithAnd(specList), JpaRollout_.GRAPH_ROLLOUT_DS, pageable), pageable)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java index a37b72eef..528438ff5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java @@ -50,7 +50,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleMetadataRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.model.Artifact; @@ -261,7 +261,7 @@ public class JpaSoftwareModuleManagement implements SoftwareModuleManagement { @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(softwareModuleRepository, List.of( - RSQLUtility.buildRsqlSpecification(rsql, SoftwareModuleFields.class, virtualPropertyReplacer, + RsqlUtility.buildRsqlSpecification(rsql, SoftwareModuleFields.class, virtualPropertyReplacer, database), SoftwareModuleSpecification.isNotDeleted()), pageable); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java index 2616920ef..d9feb1dba 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleTypeManagement.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTypeRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.repository.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleTypeSpecification; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; @@ -144,7 +144,7 @@ public class JpaSoftwareModuleTypeManagement implements SoftwareModuleTypeManage @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(softwareModuleTypeRepository, List.of( - RSQLUtility.buildRsqlSpecification(rsql, SoftwareModuleTypeFields.class, + RsqlUtility.buildRsqlSpecification(rsql, SoftwareModuleTypeFields.class, virtualPropertyReplacer, database), SoftwareModuleTypeSpecification.isNotDeleted()), pageable ); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java index 0cf6cb2b6..215c746f1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java @@ -43,7 +43,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.jpa.repository.TargetFilterQueryRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.TargetFilterQuerySpecification; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.jpa.utils.WeightValidationHelper; @@ -119,7 +119,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme create.getQuery().ifPresent(query -> { // validate the RSQL query syntax - RSQLUtility.validateRsqlFor(query, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); + RsqlUtility.validateRsqlFor(query, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); // enforce the 'max targets per auto assign' quota right here even // if the result of the filter query can vary over time @@ -148,7 +148,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme @Override public boolean verifyTargetFilterQuerySyntax(final String query) { try { - RSQLUtility.validateRsqlFor(query, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); + RsqlUtility.validateRsqlFor(query, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); return true; } catch (final RSQLParserException | RSQLParameterUnsupportedFieldException e) { log.debug("The RSQL query '{}}' is invalid.", query, e); @@ -195,7 +195,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme @Override public Page findByRsql(final String rsqlFilter, final Pageable pageable) { final List> specList = !ObjectUtils.isEmpty(rsqlFilter) - ? Collections.singletonList(RSQLUtility.buildRsqlSpecification(rsqlFilter, + ? Collections.singletonList(RsqlUtility.buildRsqlSpecification(rsqlFilter, TargetFilterQueryFields.class, virtualPropertyReplacer, database)) : Collections.emptyList(); @@ -227,7 +227,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme final List> specList = new ArrayList<>(2); specList.add(TargetFilterQuerySpecification.byAutoAssignDS(distributionSet)); if (!ObjectUtils.isEmpty(rsql)) { - specList.add(RSQLUtility.buildRsqlSpecification(rsql, TargetFilterQueryFields.class, + specList.add(RsqlUtility.buildRsqlSpecification(rsql, TargetFilterQueryFields.class, virtualPropertyReplacer, database)); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java index df2921f42..a595984b6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java @@ -61,7 +61,7 @@ import org.eclipse.hawkbit.repository.jpa.repository.TargetFilterQueryRepository import org.eclipse.hawkbit.repository.jpa.repository.TargetRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetTagRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetTypeRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; @@ -157,13 +157,13 @@ public class JpaTargetManagement implements TargetManagement { public long countByRsql(final String rsql) { return JpaManagementHelper.countBySpec( targetRepository, - List.of(RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database))); + List.of(RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database))); } @Override public long countByRsqlAndUpdatable(String rsql) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database)); + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database)); return targetRepository.count( AccessController.Operation.UPDATE, combineWithAnd(specList)); @@ -172,7 +172,7 @@ public class JpaTargetManagement implements TargetManagement { @Override public long countByRsqlAndCompatible(final String rsql, final Long distributionSetIdTypeId) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.isCompatibleWithDistributionSetType(distributionSetIdTypeId)); return JpaManagementHelper.countBySpec(targetRepository, specList); } @@ -180,7 +180,7 @@ public class JpaTargetManagement implements TargetManagement { @Override public long countByRsqlAndCompatibleAndUpdatable(String rsql, Long distributionSetIdTypeId) { final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.isCompatibleWithDistributionSetType(distributionSetIdTypeId)); return targetRepository.count(AccessController.Operation.UPDATE, combineWithAnd(specList)); } @@ -253,7 +253,7 @@ public class JpaTargetManagement implements TargetManagement { .findAllWithoutCount( AccessController.Operation.UPDATE, combineWithAnd(List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasNotDistributionSetInActions(distributionSetId), TargetSpecifications.isCompatibleWithDistributionSetType(distSetTypeId))), pageable) @@ -268,7 +268,7 @@ public class JpaTargetManagement implements TargetManagement { return targetRepository.count( AccessController.Operation.UPDATE, combineWithAnd(List.of( - RSQLUtility.buildRsqlSpecification( + RsqlUtility.buildRsqlSpecification( rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasNotDistributionSetInActions(distributionSetId), TargetSpecifications.isCompatibleWithDistributionSetType(distSetTypeId)))); @@ -280,7 +280,7 @@ public class JpaTargetManagement implements TargetManagement { return targetRepository .findAllWithoutCount(AccessController.Operation.UPDATE, combineWithAnd(List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.isNotInRolloutGroups(groups), TargetSpecifications.isCompatibleWithDistributionSetType(dsType.getId()))), pageable) @@ -292,7 +292,7 @@ public class JpaTargetManagement implements TargetManagement { final String rsql, final Collection groups, final DistributionSetType dsType) { return targetRepository.count(AccessController.Operation.UPDATE, combineWithAnd(List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.isNotInRolloutGroups(groups), TargetSpecifications.isCompatibleWithDistributionSetType(dsType.getId())))); } @@ -319,7 +319,7 @@ public class JpaTargetManagement implements TargetManagement { return targetRepository .findAllWithoutCount(AccessController.Operation.UPDATE, combineWithAnd(List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasNoOverridingActionsAndNotInRollout(rolloutId), TargetSpecifications.isCompatibleWithDistributionSetType(distributionSetType.getId()))), pageable) @@ -355,7 +355,7 @@ public class JpaTargetManagement implements TargetManagement { final DistributionSet validDistSet = distributionSetManagement.getOrElseThrowException(distributionSetId); final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasAssignedDistributionSet(validDistSet.getId())); return JpaManagementHelper.findAllWithCountBySpec(targetRepository, specList, pageable); @@ -395,7 +395,7 @@ public class JpaTargetManagement implements TargetManagement { final DistributionSet validDistSet = distributionSetManagement.getOrElseThrowException(distributionSetId); final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasInstalledDistributionSet(validDistSet.getId())); return JpaManagementHelper.findAllWithCountBySpec(targetRepository, specList, pageable); @@ -416,7 +416,7 @@ public class JpaTargetManagement implements TargetManagement { public Slice findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithoutCountBySpec( targetRepository, - List.of(RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database)), pageable + List.of(RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database)), pageable ); } @@ -426,7 +426,7 @@ public class JpaTargetManagement implements TargetManagement { .orElseThrow(() -> new EntityNotFoundException(TargetFilterQuery.class, targetFilterQueryId)); return JpaManagementHelper.findAllWithoutCountBySpec( - targetRepository, List.of(RSQLUtility.buildRsqlSpecification( + targetRepository, List.of(RsqlUtility.buildRsqlSpecification( targetFilterQuery.getQuery(), TargetFields.class, virtualPropertyReplacer, database)), pageable ); } @@ -442,7 +442,7 @@ public class JpaTargetManagement implements TargetManagement { throwEntityNotFoundExceptionIfTagDoesNotExist(tagId); final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(rsql, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasTag(tagId)); return JpaManagementHelper.findAllWithCountBySpec(targetRepository, specList, pageable); @@ -611,12 +611,12 @@ public class JpaTargetManagement implements TargetManagement { @Override public boolean isTargetMatchingQueryAndDSNotAssignedAndCompatibleAndUpdatable( final String controllerId, final long distributionSetId, final String targetFilterQuery) { - RSQLUtility.validateRsqlFor(targetFilterQuery, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); + RsqlUtility.validateRsqlFor(targetFilterQuery, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); final DistributionSet ds = distributionSetManagement.get(distributionSetId) .orElseThrow(() -> new EntityNotFoundException(DistributionSet.class, distributionSetId)); final Long distSetTypeId = ds.getType().getId(); final List> specList = List.of( - RSQLUtility.buildRsqlSpecification(targetFilterQuery, TargetFields.class, virtualPropertyReplacer, database), + RsqlUtility.buildRsqlSpecification(targetFilterQuery, TargetFields.class, virtualPropertyReplacer, database), TargetSpecifications.hasNotDistributionSetInActions(distributionSetId), TargetSpecifications.isCompatibleWithDistributionSetType(distSetTypeId), TargetSpecifications.hasControllerId(controllerId)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java index db2f157aa..941e67fd6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java @@ -27,7 +27,7 @@ import org.eclipse.hawkbit.repository.jpa.configuration.Constants; import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.jpa.repository.TargetTagRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.springframework.dao.ConcurrencyFailureException; @@ -105,7 +105,7 @@ public class JpaTargetTagManagement implements TargetTagManagement { @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(targetTagRepository, Collections.singletonList( - RSQLUtility.buildRsqlSpecification(rsql, TargetTagFields.class, virtualPropertyReplacer, database)), pageable); + RsqlUtility.buildRsqlSpecification(rsql, TargetTagFields.class, virtualPropertyReplacer, database)), pageable); } @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java index ef49d4535..41f813670 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTypeManagement.java @@ -33,7 +33,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetType; import org.eclipse.hawkbit.repository.jpa.repository.DistributionSetTypeRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetRepository; import org.eclipse.hawkbit.repository.jpa.repository.TargetTypeRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.jpa.specifications.TargetTypeSpecification; import org.eclipse.hawkbit.repository.jpa.utils.QuotaHelper; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -146,7 +146,7 @@ public class JpaTargetTypeManagement implements TargetTypeManagement { @Override public Page findByRsql(final String rsql, final Pageable pageable) { return JpaManagementHelper.findAllWithCountBySpec(targetTypeRepository, List.of( - RSQLUtility.buildRsqlSpecification( + RsqlUtility.buildRsqlSpecification( rsql, TargetTypeFields.class, virtualPropertyReplacer, database)), pageable ); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java index d70dacbaf..3637dbe5f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java @@ -12,7 +12,7 @@ package org.eclipse.hawkbit.repository.jpa.management; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.fail; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; import java.net.URI; import java.util.ArrayList; @@ -69,7 +69,7 @@ import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.model.TargetTypeAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; import org.eclipse.hawkbit.repository.test.matcher.Expect; import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents; import org.eclipse.hawkbit.repository.test.util.SecurityContextSwitch; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/NodeTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/NodeTest.java index bf93312c1..f2fd22a2b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/NodeTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/NodeTest.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.assertj.core.api.Assertions.assertThat; +import org.eclipse.hawkbit.repository.jpa.ql.Node; import org.junit.jupiter.api.Test; class NodeTest { 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 similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlActionFieldsTest.java index 015accc25..4e1d74c1f 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 @@ -31,7 +31,7 @@ import org.springframework.orm.jpa.vendor.Database; * Feature: Component Tests - Repository
* Story: RSQL filter actions */ -class RSQLActionFieldsTest extends AbstractJpaIntegrationTest { +class RsqlActionFieldsTest extends AbstractJpaIntegrationTest { private JpaTarget target; private JpaAction action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutFieldTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutFieldTest.java index edfa9be0f..e15a830d1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutFieldTest.java @@ -26,7 +26,7 @@ import org.springframework.data.domain.PageRequest; * Feature: Component Tests - Repository
* Story: RSQL filter rollout group */ -class RSQLRolloutFieldTest extends AbstractJpaIntegrationTest { +class RsqlRolloutFieldTest extends AbstractJpaIntegrationTest { private Rollout rollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutGroupFieldTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutGroupFieldTest.java index 4c2bc4c92..b5976f56e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlRolloutGroupFieldTest.java @@ -28,7 +28,7 @@ import org.springframework.orm.jpa.vendor.Database; * Feature: Component Tests - Repository
* Story: RSQL filter rollout group */ -class RSQLRolloutGroupFieldTest extends AbstractJpaIntegrationTest { +class RsqlRolloutGroupFieldTest extends AbstractJpaIntegrationTest { private Long rolloutGroupId; private Rollout rollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleFieldTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleFieldTest.java index ceccd1178..6f35136ff 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleFieldTest.java @@ -27,7 +27,7 @@ import org.springframework.orm.jpa.vendor.Database; * Feature: Component Tests - Repository
* Story: RSQL filter software module */ -class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { +class RsqlSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { private SoftwareModule ah; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleTypeFieldsTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleTypeFieldsTest.java index b1cd6542f..d0058e604 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlSoftwareModuleTypeFieldsTest.java @@ -24,7 +24,7 @@ import org.springframework.orm.jpa.vendor.Database; * Feature: Component Tests - Repository
* Story: RSQL filter software module test type */ -class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest { +class RsqlSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest { /** * Test filter software module test type by id diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java index a593d252f..498a70c20 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java @@ -25,7 +25,7 @@ import org.springframework.data.domain.PageRequest; * Feature: Component Tests - Repository
* Story: RSQL filter target and distribution set tags */ -class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { +class RsqlTagFieldsTest extends AbstractJpaIntegrationTest { @BeforeEach void seuptBeforeTest() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java index c69d0c05c..e720145c9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; import java.util.Arrays; import java.util.Map; @@ -28,7 +28,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetType; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.jupiter.api.BeforeEach; @@ -41,7 +40,7 @@ import org.springframework.data.domain.Slice; * Story: RSQL filter target */ @SuppressWarnings("java:S6813") // constructor injects are not possible for test classes -class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { +class RsqlTargetFieldTest extends AbstractJpaIntegrationTest { private static final String OR = ","; private static final String AND = ";"; @@ -387,26 +386,26 @@ class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { */ @Test void rsqlValidTargetFields() { - RSQLUtility.validateRsqlFor( + RsqlUtility.validateRsqlFor( "ID == '0123' and NAME == abcd and DESCRIPTION == absd and CREATEDAT =lt= 0123 and LASTMODIFIEDAT =gt= 0123" + " and CONTROLLERID == 0123 and UPDATESTATUS == PENDING and IPADDRESS == 0123 and LASTCONTROLLERREQUESTAT == 0123" + " and tag == beta", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); - RSQLUtility.validateRsqlFor( + RsqlUtility.validateRsqlFor( "ASSIGNEDDS.name == abcd and ASSIGNEDDS.version == 0123 and INSTALLEDDS.name == abcd and INSTALLEDDS.version == 0123", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); - RSQLUtility.validateRsqlFor( + RsqlUtility.validateRsqlFor( "ATTRIBUTE.subkey1 == test and ATTRIBUTE.subkey2 == test and METADATA.metakey1 == abcd and METADATA.metavalue2 == asdfg", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); - RSQLUtility.validateRsqlFor( + RsqlUtility.validateRsqlFor( "CREATEDAT =lt= ${NOW_TS} and LASTMODIFIEDAT =ge= ${OVERDUE_TS}", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); - RSQLUtility.validateRsqlFor( + RsqlUtility.validateRsqlFor( "ATTRIBUTE.test.dot == test and ATTRIBUTE.subkey2 == test and METADATA.test.dot == abcd and METADATA.metavalue2 == asdfg", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) - .isThrownBy(() -> RSQLUtility.validateRsqlFor( + .isThrownBy(() -> RsqlUtility.validateRsqlFor( "wrongfield == abcd", TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager)); } @@ -453,7 +452,7 @@ class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { private void assertRSQLQueryThrowsException(final String rsql) { assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) - .isThrownBy(() -> RSQLUtility.validateRsqlFor( + .isThrownBy(() -> RsqlUtility.validateRsqlFor( rsql, TargetFields.class, JpaTarget.class, virtualPropertyReplacer, entityManager)); } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFilterQueryFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFilterQueryFieldsTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFilterQueryFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFilterQueryFieldsTest.java index 890e9a3c4..5c142b98d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFilterQueryFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFilterQueryFieldsTest.java @@ -27,7 +27,7 @@ import org.springframework.orm.jpa.vendor.Database; * Feature: Component Tests - Repository
* Story: RSQL filter target filter query */ -class RSQLTargetFilterQueryFieldsTest extends AbstractJpaIntegrationTest { +class RsqlTargetFilterQueryFieldsTest extends AbstractJpaIntegrationTest { private TargetFilterQuery filter1; private TargetFilterQuery filter2; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlToSqlTest.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlToSqlTest.java index 0b3ca0147..566159167 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlToSqlTest.java @@ -9,9 +9,9 @@ */ package org.eclipse.hawkbit.repository.jpa.rsql; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; import jakarta.persistence.EntityManager; @@ -21,6 +21,7 @@ import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.jpa.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.ql.utils.HawkbitQlToSql; import org.eclipse.hawkbit.repository.test.TestConfiguration; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -37,10 +38,10 @@ import org.springframework.test.context.ContextConfiguration; @ContextConfiguration(classes = { RepositoryApplicationConfiguration.class, TestConfiguration.class }) @Disabled("For manual run only, while playing around with RSQL to SQL") @SuppressWarnings("java:S2699") // java:S2699 - manual test, don't actually does assertions -class RSQLToSQLTest { +class RsqlToSqlTest { private static final boolean FULL = Boolean.getBoolean("full"); - private RSQLToSQL rsqlToSQL; + private HawkbitQlToSql rsqlToSQL; @Test void printPG() { @@ -107,7 +108,7 @@ class RSQLToSQLTest { @PersistenceContext private void setEntityManager(final EntityManager entityManager) { - rsqlToSQL = new RSQLToSQL(entityManager); + rsqlToSQL = new HawkbitQlToSql(entityManager); } private & RsqlQueryField> void print(final Class domainClass, final Class fieldsClass, final String rsql) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtilityTest.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtilityTest.java index 7b95d8c8d..3a02de822 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtilityTest.java @@ -46,7 +46,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyResolver; import org.eclipse.hawkbit.security.SystemSecurityContext; @@ -73,7 +72,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @Disabled // TODO: fully document tests -> description for long text and reasonable // method name as short text -class RSQLUtilityTest { +class RsqlUtilityTest { private static final TenantConfigurationValue TEST_POLLING_TIME_INTERVAL = TenantConfigurationValue. builder().value("00:05:00").build(); @@ -109,7 +108,7 @@ class RSQLUtilityTest { @Test void wrongFieldThrowUnsupportedFieldException() { when(baseSoftwareModuleRootMock.getJavaType()).thenReturn((Class) SoftwareModule.class); - final Specification rsqlSpecification = RSQLUtility.buildRsqlSpecification("unknownField==abc", SoftwareModuleFields.class, null, testDb); + final Specification rsqlSpecification = RsqlUtility.buildRsqlSpecification("unknownField==abc", SoftwareModuleFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterUnsupportedFieldException because of unknown RSQL field") .isThrownBy(() -> rsqlSpecification.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); @@ -118,25 +117,25 @@ class RSQLUtilityTest { @Test void wrongRsqlMapSyntaxThrowSyntaxException() { final Specification rsqlSpecification = - RSQLUtility.buildRsqlSpecification(TargetFields.ATTRIBUTE + "==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.ATTRIBUTE + "==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException for target attributes map, caused by wrong RSQL syntax (key was not present)") .isThrownBy(() -> rsqlSpecification.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); final Specification rsqlSpecification2 = - RSQLUtility.buildRsqlSpecification(TargetFields.ATTRIBUTE + ".unknown.wrong==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.ATTRIBUTE + ".unknown.wrong==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException for target attributes map, caused by wrong RSQL syntax (key includes dots)") .isThrownBy(() -> rsqlSpecification2.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); final Specification rsqlSpecification3 = - RSQLUtility.buildRsqlSpecification(TargetFields.METADATA + ".unknown.wrong==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.METADATA + ".unknown.wrong==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException for target metadata map, caused by wrong RSQL syntax (key includes dots)") .isThrownBy(() -> rsqlSpecification3.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); final Specification rsqlSpecification4 = - RSQLUtility.buildRsqlSpecification(DistributionSetFields.METADATA + "==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(DistributionSetFields.METADATA + "==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException for distribution set metadata map, caused by wrong RSQL syntax (key was not present)\"") .isThrownBy(() -> rsqlSpecification4.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); @@ -145,19 +144,19 @@ class RSQLUtilityTest { @Test void wrongRsqlSubEntitySyntaxThrowSyntaxException() { final Specification rsqlSpecification = - RSQLUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + "==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + "==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException because of wrong RSQL syntax") .isThrownBy(() -> rsqlSpecification.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); final Specification rsqlSpecification2 = - RSQLUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + ".unknownField==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + ".unknownField==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException because of wrong RSQL syntax") .isThrownBy(() -> rsqlSpecification2.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); final Specification rsqlSpecification3 = - RSQLUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + ".unknownField.ToMuch==abc", TargetFields.class, null, testDb); + RsqlUtility.buildRsqlSpecification(TargetFields.ASSIGNEDDS + ".unknownField.ToMuch==abc", TargetFields.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterSyntaxException because of wrong RSQL syntax") .isThrownBy(() -> rsqlSpecification3.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); @@ -176,7 +175,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.and(any(Predicate[].class))).thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -195,7 +194,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.upper(pathOfString(baseSoftwareModuleRootMock))).thenReturn(pathOfString(baseSoftwareModuleRootMock)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -217,7 +216,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.upper(pathOfString(baseSoftwareModuleRootMock))).thenReturn(pathOfString(baseSoftwareModuleRootMock)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -247,7 +246,7 @@ class RSQLUtilityTest { when(subqueryMock.where(any(Expression.class))).thenReturn(subqueryMock); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -264,7 +263,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.greaterThanOrEqualTo(any(Expression.class), any(String.class))).thenReturn(mock(Predicate.class)); when(criteriaBuilderMock.upper(pathOfString(baseSoftwareModuleRootMock))).thenReturn(pathOfString(baseSoftwareModuleRootMock)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.H2) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.H2) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -282,7 +281,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.greaterThanOrEqualTo(any(Expression.class), any(String.class))).thenReturn(mock(Predicate.class)); when(criteriaBuilderMock.upper(pathOfString(baseSoftwareModuleRootMock))).thenReturn(pathOfString(baseSoftwareModuleRootMock)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.H2) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.H2) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -304,7 +303,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock. greaterThanOrEqualTo(any(Expression.class), any(String.class))).thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.SQL_SERVER) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, Database.SQL_SERVER) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -322,7 +321,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock. greaterThanOrEqualTo(any(Expression.class), any(String.class))) .thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, SoftwareModuleFields.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -339,7 +338,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.equal(any(Root.class), any(TestValueEnum.class))).thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, null, testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, null, testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -355,7 +354,7 @@ class RSQLUtilityTest { when(baseSoftwareModuleRootMock.getJavaType()).thenReturn((Class) TestValueEnum.class); when(criteriaBuilderMock.equal(any(Root.class), anyString())).thenReturn(mock(Predicate.class)); - final Specification rsqlSpecification = RSQLUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, null, testDb); + final Specification rsqlSpecification = RsqlUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, null, testDb); assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .as("RSQLParameterUnsupportedFieldException for wrong enum value") .isThrownBy(() -> rsqlSpecification.toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock)); @@ -377,7 +376,7 @@ class RSQLUtilityTest { when(criteriaBuilderMock.lessThanOrEqualTo(any(Expression.class), eq(overduePropPlaceholder))).thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, setupMacroLookup(), testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, setupMacroLookup(), testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification @@ -401,7 +400,7 @@ class RSQLUtilityTest { .thenReturn(mock(Predicate.class)); // test - RSQLUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, setupMacroLookup(), testDb) + RsqlUtility.buildRsqlSpecification(correctRsql, TestFieldEnum.class, setupMacroLookup(), testDb) .toPredicate(baseSoftwareModuleRootMock, criteriaQueryMock, criteriaBuilderMock); // verification diff --git a/hawkbit-repository/hawkbit-repository-ql/README.md b/hawkbit-repository/hawkbit-repository-ql/README.md new file mode 100644 index 000000000..2b56554b5 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-ql/README.md @@ -0,0 +1,3 @@ +# hawkBit QL + +hawkBit Query Language Support (based on RSQL) \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-ql/pom.xml b/hawkbit-repository/hawkbit-repository-ql/pom.xml new file mode 100644 index 000000000..064c0db49 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-ql/pom.xml @@ -0,0 +1,127 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-repository + ${revision} + + + hawkbit-repository-ql + hawkBit :: Query Language + + + + eclipselink + + + + jpa.vendor + !hibernate + + + + + + org.eclipse.hawkbit + hawkbit-repository-jpa-eclipselink + ${project.version} + + + + + + + + com.ethlo.persistence.tools + eclipselink-maven-plugin + ${eclipselink.maven.plugin.version} + + + process-classes + + weave + + + + + org.eclipse.hawkbit.repository.jpa.model + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + ${eclipselink.version} + + + + + + + + hibernate + + + jpa.vendor + hibernate + + + + + + org.eclipse.hawkbit + hawkbit-repository-jpa-hibernate + ${project.version} + + + + + + + + org.hibernate.orm + hibernate-core + true + + + + jakarta.persistence + jakarta.persistence-api + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.hibernate.orm + hibernate-core + + + true + + + + cz.jirutka.rsql + rsql-parser + + + + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + + + \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/ReferenceMatcher.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/EntityMatcher.java similarity index 87% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/ReferenceMatcher.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/EntityMatcher.java index bc4c412b3..66c14b7d0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/ReferenceMatcher.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/EntityMatcher.java @@ -7,18 +7,18 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsql.sa; +package org.eclipse.hawkbit.repository.jpa.ql; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.EQ; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LIKE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.EQ; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_LIKE; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -29,30 +29,29 @@ import java.util.Map; import java.util.Objects; import java.util.function.BiFunction; -import org.eclipse.hawkbit.repository.jpa.rsql.Node; -import org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator; +import org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator; import org.eclipse.hawkbit.repository.jpa.rsql.RsqlParser; /** - * Provides matching reference for if an object matches a {@link Node}. + * Provides entity matcher that matches an entity object against a filter (a {@link Node} or an RSQL string). */ -class ReferenceMatcher { +public class EntityMatcher { private final Node root; - private ReferenceMatcher(final Node root) { + private EntityMatcher(final Node root) { this.root = root; } - static ReferenceMatcher of(final Node root) { - return new ReferenceMatcher(root); + public static EntityMatcher forNode(final Node root) { + return new EntityMatcher(root); } - static ReferenceMatcher ofRsql(final String rsql) { - return of(RsqlParser.parse(rsql)); + public static EntityMatcher forRsql(final String rsql) { + return forNode(RsqlParser.parse(rsql)); } - boolean match(final T t) { + public boolean match(final T t) { return match(t, root); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/Node.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/Node.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/Node.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/Node.java index cc532749e..eaf20f992 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/Node.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/Node.java @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsql; +package org.eclipse.hawkbit.repository.jpa.ql; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/SpecificationBuilder.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/SpecificationBuilder.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/SpecificationBuilder.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/SpecificationBuilder.java index 5e8d2604c..bc471e3ca 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/SpecificationBuilder.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/SpecificationBuilder.java @@ -7,17 +7,17 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsql; +package org.eclipse.hawkbit.repository.jpa.ql; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LIKE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_LIKE; import java.util.ArrayList; import java.util.Arrays; @@ -47,9 +47,9 @@ import jakarta.persistence.metamodel.SetAttribute; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison; -import org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator; -import org.eclipse.hawkbit.repository.jpa.rsql.Node.Logical; +import org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison; +import org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator; +import org.eclipse.hawkbit.repository.jpa.ql.Node.Logical; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.springframework.data.jpa.domain.Specification; import org.springframework.orm.jpa.vendor.Database; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQL.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HawkbitQlToSql.java similarity index 86% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQL.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HawkbitQlToSql.java index c077e6c78..6e2a785cc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQL.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HawkbitQlToSql.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2024 Contributors to the Eclipse Foundation + * Copyright (c) 2025 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsql; +package org.eclipse.hawkbit.repository.jpa.ql.utils; import java.lang.reflect.InvocationTargetException; @@ -18,17 +18,18 @@ import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import org.eclipse.hawkbit.repository.RsqlQueryField; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder; import org.springframework.orm.jpa.vendor.Database; -public class RSQLToSQL { +public class HawkbitQlToSql { private static final Database DATABASE = Database.H2; private final EntityManager entityManager; private final boolean isEclipselink; - public RSQLToSQL(final EntityManager entityManager) { + public HawkbitQlToSql(final EntityManager entityManager) { this.entityManager = entityManager; isEclipselink = entityManager.getProperties().keySet().stream().anyMatch(key -> key.startsWith("eclipselink.")); } @@ -65,7 +66,7 @@ public class RSQLToSQL { RsqlConfigHolder.getInstance().setRsqlToSpecBuilder(rsqlToSpecBuilder); } try { - return query.where(RSQLUtility. buildRsqlSpecification(rsql, fieldsClass, null, DATABASE) + return query.where(RsqlUtility. buildRsqlSpecification(rsql, fieldsClass, null, DATABASE) .toPredicate(query.from(domainClass), cb.createQuery(domainClass), cb)); } finally { if (defaultRsqlToSpecBuilder != rsqlToSpecBuilder) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/HibernateUtils.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HibernateUtils.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/HibernateUtils.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HibernateUtils.java index 810989d76..476e7f882 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/HibernateUtils.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/ql/utils/HibernateUtils.java @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsql; +package org.eclipse.hawkbit.repository.jpa.ql.utils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/rsql/RsqlConfigHolder.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlConfigHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/rsql/RsqlConfigHolder.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlConfigHolder.java index 0b9c5fd13..fdceaf77b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/rsql/RsqlConfigHolder.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlConfigHolder.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Bosch.IO GmbH and others + * Copyright (c) 2025 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java index 89854a05a..7a1a03803 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParser.java @@ -11,16 +11,16 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.eclipse.hawkbit.repository.RsqlQueryField.SUB_ATTRIBUTE_SEPARATOR; import static org.eclipse.hawkbit.repository.RsqlQueryField.SUB_ATTRIBUTE_SPLIT_REGEX; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.EQ; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.GTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LIKE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LT; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.LTE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NE; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_IN; -import static org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison.Operator.NOT_LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.EQ; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.GTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LIKE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LT; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.LTE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NE; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_IN; +import static org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison.Operator.NOT_LIKE; import java.util.HashSet; import java.util.List; @@ -45,7 +45,8 @@ import org.eclipse.hawkbit.repository.FieldValueConverter; import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.rsql.Node.Comparison; +import org.eclipse.hawkbit.repository.jpa.ql.Node; +import org.eclipse.hawkbit.repository.jpa.ql.Node.Comparison; /** * {@link RsqlParser} parses RSQL query stings to {@link Node} objects. Doing that it does the following: diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtility.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtility.java index 6ed4d937d..7d926d06d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlUtility.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others + * Copyright (c) 2025 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -9,7 +9,7 @@ */ package org.eclipse.hawkbit.repository.jpa.rsql; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; import jakarta.persistence.EntityManager; import jakarta.persistence.criteria.CriteriaBuilder; @@ -23,8 +23,8 @@ import org.apache.commons.lang3.text.StrLookup; import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.rsqllegacy.SpecificationBuilderLegacy; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.ql.SpecificationBuilder; +import org.eclipse.hawkbit.repository.jpa.rsql.legacy.SpecificationBuilderLegacy; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyResolver; import org.springframework.data.jpa.domain.Specification; @@ -65,7 +65,7 @@ import org.springframework.orm.jpa.vendor.Database; */ @Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class RSQLUtility { +public final class RsqlUtility { /** * Builds a JPA {@link Specification} which corresponds with the given RSQL query. The specification can be used to filter for JPA entities diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/AbstractRSQLVisitor.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/AbstractRSQLVisitor.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/AbstractRSQLVisitor.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/AbstractRSQLVisitor.java index 354c55659..fb0278762 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/AbstractRSQLVisitor.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/AbstractRSQLVisitor.java @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsqllegacy; +package org.eclipse.hawkbit.repository.jpa.rsql.legacy; import java.util.Arrays; import java.util.Collections; @@ -25,8 +25,13 @@ import lombok.Value; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.jpa.ql.SpecificationBuilder; import org.springframework.util.ObjectUtils; +/** + * @deprecated Old implementation of RSQL Visitor (G2). Deprecated in favour of next gen implementation - {@link SpecificationBuilder}. + */ +@Deprecated(forRemoval = true, since = "0.9.0") @Slf4j public abstract class AbstractRSQLVisitor & RsqlQueryField> { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitor.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitor.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java index ca5ba276c..7b270febe 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitor.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitor.java @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsqllegacy; +package org.eclipse.hawkbit.repository.jpa.rsql.legacy; import java.util.ArrayList; import java.util.Arrays; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitorG2.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitorG2.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java index b46f98851..f261feac9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/JpaQueryRsqlVisitorG2.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/JpaQueryRsqlVisitorG2.java @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsqllegacy; +package org.eclipse.hawkbit.repository.jpa.rsql.legacy; import java.util.ArrayList; import java.util.Arrays; @@ -44,6 +44,7 @@ import org.eclipse.hawkbit.repository.FieldValueConverter; import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.jpa.ql.SpecificationBuilder; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.springframework.orm.jpa.vendor.Database; import org.springframework.util.CollectionUtils; @@ -55,7 +56,7 @@ import org.springframework.util.ObjectUtils; * @param the enum for providing the field name of the entity field to filter on. * @param the entity type referenced by the root * @deprecated Old implementation of RSQL Visitor (G2). Deprecated in favour of next gen implementation - - * {@link org.eclipse.hawkbit.repository.jpa.rsql.SpecificationBuilder}. + * {@link SpecificationBuilder}. * It will be kept for some time in order to keep backward compatibility and to allow for a smooth transition. Also, in case of * problems with the new implementation, this one can be used as a fallback. */ diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/SpecificationBuilderLegacy.java b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/SpecificationBuilderLegacy.java similarity index 84% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/SpecificationBuilderLegacy.java rename to hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/SpecificationBuilderLegacy.java index 47a57f6eb..911116da2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsqllegacy/SpecificationBuilderLegacy.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/legacy/SpecificationBuilderLegacy.java @@ -7,10 +7,10 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.eclipse.hawkbit.repository.jpa.rsqllegacy; +package org.eclipse.hawkbit.repository.jpa.rsql.legacy; -import static org.eclipse.hawkbit.repository.jpa.rsqllegacy.AbstractRSQLVisitor.OPERATORS; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.legacy.AbstractRSQLVisitor.OPERATORS; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; import java.util.List; @@ -23,12 +23,17 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.repository.RsqlQueryField; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.ql.SpecificationBuilder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.springframework.data.jpa.domain.Specification; import org.springframework.orm.jpa.vendor.Database; import org.springframework.util.CollectionUtils; +/** + * @deprecated Old implementation of RSQL Visitor (G2). Deprecated in favour of next gen implementation - {@link SpecificationBuilder}. + */ +@Deprecated(forRemoval = true, since = "0.9.0") @Slf4j public class SpecificationBuilderLegacy & RsqlQueryField, T> { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Root.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Root.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Root.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Root.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/RootRepository.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/RootRepository.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/RootRepository.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/RootRepository.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java similarity index 89% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java index c746bc18d..6e50a4d9a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderLegacyTest.java @@ -9,8 +9,8 @@ */ package org.eclipse.hawkbit.repository.jpa.rsql.sa; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; import java.util.Arrays; import java.util.List; @@ -18,9 +18,9 @@ import java.util.List; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.repository.RsqlQueryField; -import org.eclipse.hawkbit.repository.jpa.rsqllegacy.SpecificationBuilderLegacy; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder; +import org.eclipse.hawkbit.repository.jpa.rsql.legacy.SpecificationBuilderLegacy; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder; import org.junit.jupiter.api.Test; import org.springframework.data.jpa.domain.Specification; import org.springframework.orm.jpa.vendor.Database; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java index 61c00af60..9dec4a9ff 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java +++ b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SpecificationBuilderTest.java @@ -10,9 +10,9 @@ package org.eclipse.hawkbit.repository.jpa.rsql.sa; import static org.assertj.core.api.Assertions.assertThat; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; -import static org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.G3; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G1; +import static org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder.RsqlToSpecBuilder.LEGACY_G2; import java.util.List; import java.util.Map; @@ -22,10 +22,11 @@ import java.util.stream.StreamSupport; import jakarta.persistence.EntityManager; import lombok.extern.slf4j.Slf4j; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLToSQL; +import org.eclipse.hawkbit.repository.jpa.ql.EntityMatcher; +import org.eclipse.hawkbit.repository.jpa.ql.utils.HawkbitQlToSql; import org.eclipse.hawkbit.repository.jpa.rsql.RsqlParser; -import org.eclipse.hawkbit.repository.jpa.rsql.SpecificationBuilder; -import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder; +import org.eclipse.hawkbit.repository.jpa.ql.SpecificationBuilder; +import org.eclipse.hawkbit.repository.jpa.rsql.RsqlConfigHolder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; @@ -37,8 +38,7 @@ import org.springframework.orm.jpa.vendor.Database; @SuppressWarnings("java:S5961") // complex check because the matter is very complex @DataJpaTest(properties = { - "spring.jpa.database=H2", - "logging.level.org.eclipse.hawkbit.repository.jpa.rsql=DEBUG" + "spring.jpa.database=H2" }, excludeAutoConfiguration = { FlywayAutoConfiguration.class }) @EnableAutoConfiguration @Slf4j @@ -471,7 +471,7 @@ class SpecificationBuilderTest { private List filter(final String rsql) { // reference / auto filter (using elements and reflection) - final ReferenceMatcher matcher = ReferenceMatcher.ofRsql(rsql); + final EntityMatcher matcher = EntityMatcher.forRsql(rsql); final List refResult = StreamSupport.stream(rootRepository.findAll().spliterator(), false).filter(matcher::match).toList(); final List result = rootRepository.findAll(getSpecification(rsql)); // auto check with reference result @@ -480,7 +480,7 @@ class SpecificationBuilderTest { } catch (final AssertionError e) { log.error( "Fail to get expected result for RSQL: {} with SQL query: {}", - rsql, new RSQLToSQL(entityManager).toSQL(Root.class, null, rsql, G3), + rsql, new HawkbitQlToSql(entityManager).toSQL(Root.class, null, rsql, G3), e); throw e; } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Sub.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Sub.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Sub.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/Sub.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubRepository.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubRepository.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubRepository.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubRepository.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSub.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSub.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSub.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSub.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSubRepository.java b/hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSubRepository.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSubRepository.java rename to hawkbit-repository/hawkbit-repository-ql/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/sa/SubSubRepository.java diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index e10d83525..f3133ec69 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -25,6 +25,7 @@ hawkbit-repository-api hawkbit-repository-core + hawkbit-repository-ql hawkbit-repository-jpa-api hawkbit-repository-jpa-eclipselink hawkbit-repository-jpa-hibernate diff --git a/pom.xml b/pom.xml index 9e039f8e0..79f74d2c0 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,6 @@ 9.2.1 1.21.1 - 3.0.0 2.1.0 2.19.0 4.5.0 @@ -233,11 +232,6 @@ jsoup ${jsoup.version} - - javax.el - javax.el-api - ${javax.el-api.version} -