From 81f161a02e6551c3a82c98489ba9cedb53b05596 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 24 Jan 2025 11:30:40 +0200 Subject: [PATCH] Sonar Fixes Signed-off-by: Avgustin Marinov --- .../RepositoryApplicationConfiguration.java | 22 +++- .../jpa/management/JpaActionManagement.java | 11 +- .../jpa/management/JpaArtifactManagement.java | 1 + .../management/JpaControllerManagement.java | 109 ++++++++++-------- .../management/JpaDeploymentManagement.java | 5 +- ...DistributionSetInvalidationManagement.java | 1 + .../JpaDistributionSetManagement.java | 5 +- .../JpaDistributionSetTagManagement.java | 1 - .../repository/jpa/model/JpaAction.java | 9 +- .../repository/jpa/model/JpaActionStatus.java | 3 +- .../jpa/model/JpaDistributionSetTag.java | 2 + .../jpa/repository/HawkbitBaseRepository.java | 4 + .../DistributionSetTypeSpecification.java | 6 +- .../ui/simple/view/DistributionSetView.java | 1 + .../hawkbit/ui/simple/view/RolloutView.java | 31 ++--- .../hawkbit/ui/simple/view/TargetView.java | 1 + 16 files changed, 126 insertions(+), 86 deletions(-) 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 f86a4cdbeb..08e17075ec 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 @@ -783,11 +783,23 @@ ConfirmationManagement confirmationManagement(final TargetRepository targetRepos */ @Bean @ConditionalOnMissingBean - ControllerManagement controllerManagement(final ScheduledExecutorService executorService, - final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, - final QuotaManagement quotaManagement, final RepositoryProperties repositoryProperties) { - return new JpaControllerManagement(executorService, actionRepository, actionStatusRepository, quotaManagement, - repositoryProperties); + ControllerManagement controllerManagement( + final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, final QuotaManagement quotaManagement, + final RepositoryProperties repositoryProperties, + final TargetRepository targetRepository, final TargetTypeManagement targetTypeManagement, + final DeploymentManagement deploymentManagement, final ConfirmationManagement confirmationManagement, + final SoftwareModuleRepository softwareModuleRepository, final SoftwareModuleMetadataRepository softwareModuleMetadataRepository, + final DistributionSetManagement distributionSetManagement, + final TenantConfigurationManagement tenantConfigurationManagement, + final PlatformTransactionManager txManager, final EntityFactory entityFactory, final EntityManager entityManager, + final AfterTransactionCommitExecutor afterCommit, final EventPublisherHolder eventPublisherHolder, + final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware, + final ScheduledExecutorService executorService) { + return new JpaControllerManagement(actionRepository, actionStatusRepository, quotaManagement, repositoryProperties, + targetRepository, targetTypeManagement, deploymentManagement, confirmationManagement, softwareModuleRepository, + softwareModuleMetadataRepository, distributionSetManagement, tenantConfigurationManagement, txManager, + entityFactory, entityManager, afterCommit, eventPublisherHolder, systemSecurityContext, tenantAware, + executorService); } @Bean diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java index 89838bea1b..dc23125ce8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaActionManagement.java @@ -22,6 +22,8 @@ import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.builder.JpaActionStatusCreate; +import org.eclipse.hawkbit.repository.jpa.model.AbstractBaseEntity; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; @@ -47,8 +49,7 @@ public class JpaActionManagement { protected final RepositoryProperties repositoryProperties; public JpaActionManagement( - final ActionRepository actionRepository, - final ActionStatusRepository actionStatusRepository, final QuotaManagement quotaManagement, + final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, final QuotaManagement quotaManagement, final RepositoryProperties repositoryProperties) { this.actionRepository = actionRepository; this.actionStatusRepository = actionStatusRepository; @@ -109,12 +110,14 @@ protected List findActiveActionsWithHighestWeightConsideringDefault(fina actionRepository.findAll( ActionSpecifications.byTargetControllerIdAndActiveAndWeightIsNull(controllerId, false), JpaAction_.GRAPH_ACTION_DS, - PageRequest.of(0, maxActionCount, Sort.by(Sort.Order.desc(JpaAction_.WEIGHT), Sort.Order.asc(JpaAction_.ID)))).stream(), + PageRequest.of( + 0, maxActionCount, + Sort.by(Sort.Order.desc(JpaAction_.WEIGHT), Sort.Order.asc(AbstractJpaBaseEntity_.ID)))).stream(), // get the oldest actions without weight actionRepository.findAll( ActionSpecifications.byTargetControllerIdAndActiveAndWeightIsNull(controllerId, true), JpaAction_.GRAPH_ACTION_DS, - PageRequest.of(0, maxActionCount, Sort.by(Sort.Order.asc(JpaAction_.ID)))).stream()) + PageRequest.of(0, maxActionCount, Sort.by(Sort.Order.asc(AbstractJpaBaseEntity_.ID)))).stream()) .sorted(Comparator.comparingInt(this::getWeightConsideringDefault).reversed().thenComparing(Action::getId)) .limit(maxActionCount) .map(Action.class::cast) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaArtifactManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaArtifactManagement.java index ba8fd54942..2e02f90788 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaArtifactManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaArtifactManagement.java @@ -193,6 +193,7 @@ public long countBySoftwareModule(final long softwareModuleId) { return localArtifactRepository.count(ArtifactSpecifications.bySoftwareModuleId(softwareModuleId)); } + @SuppressWarnings("java:S2201") // java:S2201 - the idea is to just check if the artifact exists @Override public Optional loadArtifactBinary(final String sha1Hash, final long softwareModuleId, final boolean isEncrypted) { assertArtifactRepositoryAvailable(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java index 0b4433de05..fbf2d6b224 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java @@ -69,6 +69,7 @@ import org.eclipse.hawkbit.repository.jpa.builder.JpaActionStatusCreate; import org.eclipse.hawkbit.repository.jpa.configuration.Constants; import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus_; @@ -128,42 +129,54 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont private final BlockingDeque queue; - @Autowired - private EntityManager entityManager; - @Autowired + // TODO - make it final private TargetRepository targetRepository; - @Autowired - private SoftwareModuleRepository softwareModuleRepository; - @Autowired - private TenantConfigurationManagement tenantConfigurationManagement; - @Autowired - private SystemSecurityContext systemSecurityContext; - @Autowired - private EntityFactory entityFactory; - @Autowired - private EventPublisherHolder eventPublisherHolder; - @Autowired - private AfterTransactionCommitExecutor afterCommit; - @Autowired - private SoftwareModuleMetadataRepository softwareModuleMetadataRepository; - @Autowired - private PlatformTransactionManager txManager; - @Autowired - private TenantAware tenantAware; - @Autowired - private ConfirmationManagement confirmationManagement; - @Autowired - private TargetTypeManagement targetTypeManagement; - @Autowired - private DeploymentManagement deploymentManagement; - @Autowired - private DistributionSetManagement distributionSetManagement; - - public JpaControllerManagement(final ScheduledExecutorService executorService, - final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, - final QuotaManagement quotaManagement, final RepositoryProperties repositoryProperties) { + private final TargetTypeManagement targetTypeManagement; + private final DeploymentManagement deploymentManagement; + private final ConfirmationManagement confirmationManagement; + private final SoftwareModuleRepository softwareModuleRepository; + private final SoftwareModuleMetadataRepository softwareModuleMetadataRepository; + private final DistributionSetManagement distributionSetManagement; + private final TenantConfigurationManagement tenantConfigurationManagement; + private final PlatformTransactionManager txManager; + private final EntityFactory entityFactory; + private final EntityManager entityManager; + private final AfterTransactionCommitExecutor afterCommit; + private final EventPublisherHolder eventPublisherHolder; + private final SystemSecurityContext systemSecurityContext; + private final TenantAware tenantAware; + + @SuppressWarnings("squid:S00107") + public JpaControllerManagement( + final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, final QuotaManagement quotaManagement, + final RepositoryProperties repositoryProperties, + final TargetRepository targetRepository, final TargetTypeManagement targetTypeManagement, + final DeploymentManagement deploymentManagement, final ConfirmationManagement confirmationManagement, + final SoftwareModuleRepository softwareModuleRepository, final SoftwareModuleMetadataRepository softwareModuleMetadataRepository, + final DistributionSetManagement distributionSetManagement, + final TenantConfigurationManagement tenantConfigurationManagement, + final PlatformTransactionManager txManager, final EntityFactory entityFactory, final EntityManager entityManager, + final AfterTransactionCommitExecutor afterCommit, final EventPublisherHolder eventPublisherHolder, + final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware, + final ScheduledExecutorService executorService) { super(actionRepository, actionStatusRepository, quotaManagement, repositoryProperties); + this.targetRepository = targetRepository; + this.targetTypeManagement = targetTypeManagement; + this.deploymentManagement = deploymentManagement; + this.confirmationManagement = confirmationManagement; + this.softwareModuleRepository = softwareModuleRepository; + this.softwareModuleMetadataRepository = softwareModuleMetadataRepository; + this.distributionSetManagement = distributionSetManagement; + this.tenantConfigurationManagement = tenantConfigurationManagement; + this.txManager = txManager; + this.entityFactory = entityFactory; + this.entityManager = entityManager; + this.afterCommit = afterCommit; + this.eventPublisherHolder = eventPublisherHolder; + this.systemSecurityContext = systemSecurityContext; + this.tenantAware = tenantAware; + if (!repositoryProperties.isEagerPollPersistence()) { executorService.scheduleWithFixedDelay(this::flushUpdateQueue, repositoryProperties.getPollPersistenceFlushTime(), @@ -289,11 +302,13 @@ public Optional findActiveActionWithHighestWeight(final String controlle // get the highest action with weight actionRepository.findAll( ActionSpecifications.byTargetControllerIdAndActiveAndWeightIsNull(controllerId, false), - PageRequest.of(0, 1, Sort.by(Sort.Order.desc(JpaAction_.WEIGHT), Sort.Order.asc(JpaAction_.ID)))).stream(), + PageRequest.of( + 0, 1, + Sort.by(Sort.Order.desc(JpaAction_.WEIGHT), Sort.Order.asc(AbstractJpaBaseEntity_.ID)))).stream(), // get the oldest action without weight actionRepository.findAll( ActionSpecifications.byTargetControllerIdAndActiveAndWeightIsNull(controllerId, false), - PageRequest.of(0, 1, Sort.by(Sort.Order.asc(JpaAction_.ID)))).stream()) + PageRequest.of(0, 1, Sort.by(Sort.Order.asc(AbstractJpaBaseEntity_.ID)))).stream()) .min(Comparator.comparingInt(this::getWeightConsideringDefault).reversed().thenComparing(Action::getId)) .map(Action.class::cast); } @@ -911,28 +926,22 @@ private void assertTargetAttributesQuota(final JpaTarget target) { */ private Action handleRegisterRetrieved(final Long actionId, final String message) { final JpaAction action = getActionAndThrowExceptionIfNotFound(actionId); - // do a manual query with CriteriaBuilder to avoid unnecessary field - // queries and an extra - // count query made by spring-data when using pageable requests, we - // don't need an extra count - // query, we just want to check if the last action status is a retrieved - // or not. + // do a manual query with CriteriaBuilder to avoid unnecessary field queries and an extra + // count query made by spring-data when using pageable requests, we don't need an extra count + // query, we just want to check if the last action status is a retrieved or not. final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery queryActionStatus = cb.createQuery(Object[].class); final Root actionStatusRoot = queryActionStatus.from(JpaActionStatus.class); final CriteriaQuery query = queryActionStatus - .multiselect(actionStatusRoot.get(JpaActionStatus_.id), actionStatusRoot.get(JpaActionStatus_.status)) - .where(cb.equal(actionStatusRoot.get(JpaActionStatus_.action).get(JpaAction_.id), actionId)) - .orderBy(cb.desc(actionStatusRoot.get(JpaActionStatus_.id))); + .multiselect(actionStatusRoot.get(AbstractJpaBaseEntity_.id), actionStatusRoot.get(JpaActionStatus_.status)) + .where(cb.equal(actionStatusRoot.get(JpaActionStatus_.action).get(AbstractJpaBaseEntity_.id), actionId)) + .orderBy(cb.desc(actionStatusRoot.get(AbstractJpaBaseEntity_.id))); final List resultList = entityManager.createQuery(query).setFirstResult(0).setMaxResults(1) .getResultList(); - // if the latest status is not in retrieve state then we add a retrieved - // state again, we want - // to document a deployment retrieved status and a cancel retrieved - // status, but multiple - // retrieves after the other we don't want to store to protect to - // overflood action status in + // if the latest status is not in retrieve state then we add a retrieved state again, we want + // to document a deployment retrieved status and a cancel retrieved status, but multiple + // retrieves after the other we don't want to store to protect to overflood action status in // case controller retrieves a action multiple times. if (resultList.isEmpty() || (Status.RETRIEVED != resultList.get(0)[1])) { // document that the status has been retrieved 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 cbb621c797..b3bd9926ca 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 @@ -57,9 +57,9 @@ import org.eclipse.hawkbit.repository.jpa.acm.AccessController; import org.eclipse.hawkbit.repository.jpa.configuration.Constants; import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; @@ -162,6 +162,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl private final Database database; private final RetryTemplate retryTemplate; + @SuppressWarnings("java:S107") public JpaDeploymentManagement( final EntityManager entityManager, final ActionRepository actionRepository, final DistributionSetManagement distributionSetManagement, final TargetRepository targetRepository, @@ -361,7 +362,7 @@ public Page findMessagesByActionStatusId(final Pageable pageable, final final Root as = msgQuery.from(JpaActionStatus.class); final ListJoin join = as.joinList("messages", JoinType.LEFT); final CriteriaQuery selMsgQuery = msgQuery.select(join); - selMsgQuery.where(cb.equal(as.get(JpaActionStatus_.id), actionStatusId)); + selMsgQuery.where(cb.equal(as.get(AbstractJpaBaseEntity_.id), actionStatusId)); final List result = new ArrayList<>(entityManager.createQuery(selMsgQuery) .setFirstResult((int) pageable.getOffset()).setMaxResults(pageable.getPageSize()).getResultList()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetInvalidationManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetInvalidationManagement.java index 7cd89bb82d..5b92da01c1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetInvalidationManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetInvalidationManagement.java @@ -51,6 +51,7 @@ public class JpaDistributionSetInvalidationManagement implements DistributionSet private final LockRegistry lockRegistry; private final SystemSecurityContext systemSecurityContext; + @SuppressWarnings("java:S107") public JpaDistributionSetInvalidationManagement(final DistributionSetManagement distributionSetManagement, final RolloutManagement rolloutManagement, final DeploymentManagement deploymentManagement, final TargetFilterQueryManagement targetFilterQueryManagement, final ActionRepository actionRepository, 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 b1712fc9a0..dd2023587f 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 @@ -49,6 +49,7 @@ import org.eclipse.hawkbit.repository.jpa.acm.AccessController; import org.eclipse.hawkbit.repository.jpa.builder.JpaDistributionSetCreate; import org.eclipse.hawkbit.repository.jpa.configuration.Constants; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; @@ -115,6 +116,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { private final Database database; private final RepositoryProperties repositoryProperties; + @SuppressWarnings("java:S107") public JpaDistributionSetManagement( final EntityManager entityManager, final DistributionSetRepository distributionSetRepository, @@ -175,6 +177,7 @@ public DistributionSet create(final DistributionSetCreate c) { @Retryable(retryFor = { ConcurrencyFailureException.class }, maxAttempts = Constants.TX_RT_MAX, backoff = @Backoff(delay = Constants.TX_RT_DELAY)) @PreAuthorize(SpPermission.SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + @SuppressWarnings("java:S1066") // javaS1066 - better readable that way public DistributionSet update(final DistributionSetUpdate u) { final GenericDistributionSetUpdate update = (GenericDistributionSetUpdate) u; @@ -767,7 +770,7 @@ private void assertSoftwareModuleQuota(final Long id, final int requested) { private Specification byDsIdSpec(final long dsId) { return (root, query, cb) -> cb - .equal(root.get(JpaDistributionSetMetadata_.distributionSet).get(JpaDistributionSet_.id), dsId); + .equal(root.get(JpaDistributionSetMetadata_.distributionSet).get(AbstractJpaBaseEntity_.id), dsId); } private void assertDistributionSetIsNotAssignedToTargets(final Long distributionSet) { 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 95a12b6679..3258f2d2e4 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 @@ -13,7 +13,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.DistributionSetTagFields; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 69b74c75b2..18f801c541 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -14,7 +14,7 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -74,8 +74,9 @@ @NamedEntityGraph(name = "Action.ds", attributeNodes = { @NamedAttributeNode("distributionSet") }) }) @Entity -// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for sub entities -@SuppressWarnings("squid:S2160") +// squid:S2160 - BaseEntity equals/hashcode is handling correctly for sub entities +// java:S1710 - not possible to use without group annotation +@SuppressWarnings({ "squid:S2160", "java:S1710", "java:S1171", "java:S3599" }) public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Action, EventAwareEntity { @Serial @@ -375,7 +376,7 @@ public ActionTypeConverter() { public static class StatusConverter extends MapAttributeConverter { public StatusConverter() { - super(new HashMap<>() {{ + super(new EnumMap<>(Status.class) {{ put(Status.FINISHED, 0); put(Status.ERROR, 1); put(Status.WARNING, 2); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index d52d8177c7..bb4d46e467 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -151,14 +151,13 @@ public final void addMessage(final String message) { } if (message.length() > MESSAGE_ENTRY_LENGTH) { // split - for (int off = 0; off < message.length(); ) { + for (int off = 0; off < message.length(); off += MESSAGE_ENTRY_LENGTH) { final int end = off + MESSAGE_ENTRY_LENGTH; if (end < message.length()) { messages.add(message.substring(off, end)); } else { messages.add(message.substring(off)); } - off = end; } } else { messages.add(message); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java index 4852589fac..bb86fa371a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java @@ -37,6 +37,8 @@ @Index(name = "sp_idx_distribution_set_tag_prim", columnList = "tenant,id"), @Index(name = "sp_idx_distribution_set_tag_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_ds_tag")) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for sub entities +@SuppressWarnings("squid:S2160") public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag, EventAwareEntity { @Serial diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/HawkbitBaseRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/HawkbitBaseRepository.java index 0e1523e8ca..33c38b37c6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/HawkbitBaseRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/HawkbitBaseRepository.java @@ -41,6 +41,7 @@ * @param the domain type the repository manages * @param the type of the id of the entity the repository manages */ +@SuppressWarnings("java:S119") // inherited from SimpleJpaRepository public class HawkbitBaseRepository extends SimpleJpaRepository implements JpaSpecificationEntityGraphExecutor, NoCountSliceRepository, ACMRepository { @@ -73,12 +74,14 @@ public Slice findAllWithoutCount(@Nullable final Specification spec, final @Override @Transactional @NonNull + @SuppressWarnings("java:S6809") // this method already has a transactional annotation witch shall be applied public S save(@Nullable AccessController.Operation operation, @NonNull final S entity) { return save(entity); } @Override @Transactional + @SuppressWarnings("java:S6809") // this method already has a transactional annotation witch shall be applied public List saveAll(@Nullable AccessController.Operation operation, final Iterable entities) { return saveAll(entities); } @@ -90,6 +93,7 @@ public Optional findOne(@Nullable AccessController.Operation operation, @NonN @Override @NonNull + @SuppressWarnings("java:S4449") // find all accepts null public List findAll(@Nullable final AccessController.Operation operation, @Nullable final Specification spec) { return findAll(spec); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java index b0e2664e06..e473656ccf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java @@ -9,6 +9,8 @@ */ package org.eclipse.hawkbit.repository.jpa.specifications; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedEntity_; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaTypeEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType_; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -44,7 +46,7 @@ public static Specification isNotDeleted() { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byName(final String name) { - return (targetRoot, query, cb) -> cb.equal(targetRoot.get(JpaDistributionSetType_.name), name); + return (targetRoot, query, cb) -> cb.equal(targetRoot.get(AbstractJpaNamedEntity_.name), name); } /** @@ -56,6 +58,6 @@ public static Specification byName(final String name) { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byKey(final String key) { - return (targetRoot, query, cb) -> cb.equal(targetRoot.get(JpaDistributionSetType_.key), key); + return (targetRoot, query, cb) -> cb.equal(targetRoot.get(AbstractJpaTypeEntity_.key), key); } } diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/DistributionSetView.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/DistributionSetView.java index cdede99d5c..e5c6a8ae59 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/DistributionSetView.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/DistributionSetView.java @@ -281,6 +281,7 @@ private void addCreateClickListener() { } } + @SuppressWarnings({"java:S1171", "java:S3599"}) private static class AddSoftwareModulesDialog extends Utils.BaseDialog { private final transient Set softwareModules = Collections.synchronizedSet(new HashSet<>()); diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/RolloutView.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/RolloutView.java index c296919464..8c91ef3fd6 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/RolloutView.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/RolloutView.java @@ -61,6 +61,7 @@ @Route(value = "rollouts", layout = MainLayout.class) @RolesAllowed({ "ROLLOUT_READ" }) @Uses(Icon.class) +@SuppressWarnings({"java:S1171", "java:S3599"}) public class RolloutView extends TableView { public RolloutView(final HawkbitMgmtClient hawkbitClient) { @@ -101,21 +102,6 @@ protected void addColumns(final Grid grid) { }); } - private static SelectionGrid createGroupGrid() { - return new SelectionGrid<>( - new SelectionGrid.EntityRepresentation<>(MgmtRolloutGroupResponseBody.class, MgmtRolloutGroupResponseBody::getRolloutGroupId) { - - @Override - protected void addColumns(final Grid grid) { - grid.addColumn(MgmtRolloutGroupResponseBody::getRolloutGroupId).setHeader(Constants.ID).setAutoWidth(true); - grid.addColumn(MgmtRolloutGroupResponseBody::getName).setHeader(Constants.NAME).setAutoWidth(true); - grid.addColumn(MgmtRolloutGroupResponseBody::getTotalTargets).setHeader(Constants.TARGET_COUNT).setAutoWidth(true); - grid.addColumn(MgmtRolloutGroupResponseBody::getTotalTargetsPerStatus).setHeader(Constants.STATS).setAutoWidth(true); - grid.addColumn(MgmtRolloutGroupResponseBody::getStatus).setHeader(Constants.STATUS).setAutoWidth(true); - } - }); - } - private static class Actions extends HorizontalLayout { private final long rolloutId; @@ -265,6 +251,21 @@ private void setItem(final MgmtRolloutResponseBody rollout) { .limit(query.getPageSize())); groupGrid.setSelectionMode(Grid.SelectionMode.NONE); } + + private static SelectionGrid createGroupGrid() { + return new SelectionGrid<>( + new SelectionGrid.EntityRepresentation<>(MgmtRolloutGroupResponseBody.class, MgmtRolloutGroupResponseBody::getRolloutGroupId) { + + @Override + protected void addColumns(final Grid grid) { + grid.addColumn(MgmtRolloutGroupResponseBody::getRolloutGroupId).setHeader(Constants.ID).setAutoWidth(true); + grid.addColumn(MgmtRolloutGroupResponseBody::getName).setHeader(Constants.NAME).setAutoWidth(true); + grid.addColumn(MgmtRolloutGroupResponseBody::getTotalTargets).setHeader(Constants.TARGET_COUNT).setAutoWidth(true); + grid.addColumn(MgmtRolloutGroupResponseBody::getTotalTargetsPerStatus).setHeader(Constants.STATS).setAutoWidth(true); + grid.addColumn(MgmtRolloutGroupResponseBody::getStatus).setHeader(Constants.STATUS).setAutoWidth(true); + } + }); + } } private static class CreateDialog extends Utils.BaseDialog { diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java index a796a1014b..fccf81de36 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java @@ -136,6 +136,7 @@ public String filter() { } } + @SuppressWarnings({"java:S1171", "java:S3599"}) private static class RawFilter implements Filter.Rsql { private final TextField textFilter = new TextField("Raw Filter");