From e7b553cd5d407b45f44687baa47aa72e8655d3e6 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Mon, 4 Aug 2025 09:35:43 +0300 Subject: [PATCH] Fix Sonar Findings (#2584) Signed-off-by: Avgustin Marinov --- .../repository/TargetTypeManagement.java | 1 + .../jpa/JpaRepositoryConfiguration.java | 4 +-- .../jpa/builder/JpaTargetBuilder.java | 5 ++-- .../management/JpaControllerManagement.java | 17 ++++++------ .../JpaDistributionSetManagement.java | 26 ------------------- 5 files changed, 14 insertions(+), 39 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTypeManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTypeManagement.java index 4ead0c7e6..4ba138972 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTypeManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTypeManagement.java @@ -121,6 +121,7 @@ public interface TargetTypeManagement private Set distributionSetTypes; + @SuppressWarnings("java:S1144") // java:S1144 - constructor is actually used by SuperBuilder's build() method private Create(final CreateBuilder builder) { super(builder); if (builder.key == null && builder.name == null) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java index 34b15cd61..7a0aca811 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java @@ -22,7 +22,6 @@ import org.aopalliance.intercept.MethodInvocation; import org.eclipse.hawkbit.ContextAware; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.DistributionSetTypeManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.PropertiesQuotaManagement; import org.eclipse.hawkbit.repository.QuotaManagement; @@ -99,7 +98,6 @@ import org.eclipse.hawkbit.repository.jpa.rollout.condition.ThresholdRolloutGrou import org.eclipse.hawkbit.repository.jpa.rollout.condition.ThresholdRolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -305,7 +303,7 @@ public class JpaRepositoryConfiguration { } @Bean - TargetBuilder targetBuilder(final TargetTypeManagement targetTypeManagement) { + TargetBuilder targetBuilder(final TargetTypeManagement targetTypeManagement) { return new JpaTargetBuilder(targetTypeManagement); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTargetBuilder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTargetBuilder.java index ef16f9b28..c94f2dcde 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTargetBuilder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTargetBuilder.java @@ -14,15 +14,16 @@ import org.eclipse.hawkbit.repository.builder.TargetBuilder; import org.eclipse.hawkbit.repository.builder.TargetCreate; import org.eclipse.hawkbit.repository.builder.TargetUpdate; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetType; /** * Builder implementation for {@link Target}. */ public class JpaTargetBuilder implements TargetBuilder { - private final TargetTypeManagement targetTypeManagement; + private final TargetTypeManagement targetTypeManagement; - public JpaTargetBuilder(TargetTypeManagement targetTypeManagement) { + public JpaTargetBuilder(final TargetTypeManagement targetTypeManagement) { this.targetTypeManagement = targetTypeManagement; } 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 2e790cef8..ea988367c 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 @@ -138,7 +138,7 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont // TODO - make it final private TargetRepository targetRepository; - private final TargetTypeManagement targetTypeManagement; + private final TargetTypeManagement targetTypeManagement; private final DeploymentManagement deploymentManagement; private final ConfirmationManagement confirmationManagement; private final SoftwareModuleRepository softwareModuleRepository; @@ -159,7 +159,7 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont protected JpaControllerManagement( final ActionRepository actionRepository, final ActionStatusRepository actionStatusRepository, final QuotaManagement quotaManagement, final RepositoryProperties repositoryProperties, - final TargetRepository targetRepository, final TargetTypeManagement targetTypeManagement, + final TargetRepository targetRepository, final TargetTypeManagement targetTypeManagement, final DeploymentManagement deploymentManagement, final ConfirmationManagement confirmationManagement, final SoftwareModuleRepository softwareModuleRepository, final SoftwareModuleManagement softwareModuleManagement, @@ -764,10 +764,10 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont } /** - * Stores target directly to DB in case either {@link Target#getAddress()} - * or {@link Target#getUpdateStatus()} or {@link Target#getName()} changes - * or the buffer queue is full. + * Stores target directly to DB in case either {@link Target#getAddress()} or {@link Target#getUpdateStatus()} or {@link Target#getName()} + * changes or the buffer queue is full. */ + @SuppressWarnings("java:S3776") // it's just complex private Target updateTarget(final JpaTarget toUpdate, final URI address, final String name, final String type) { if (isStoreEager(toUpdate, address, name, type) || !queue.offer(new TargetPoll(toUpdate))) { if (isAddressChanged(toUpdate.getAddress(), address)) { @@ -779,13 +779,14 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont if (isTypeChanged(toUpdate.getTargetType(), type)) { if (StringUtils.hasText(type)) { - var targetTypeOptional = getTargetType(type); + final Optional targetTypeOptional = getTargetType(type); if (targetTypeOptional.isPresent()) { log.debug("Updating target type for thing ID \"{}\" to \"{}\".", toUpdate.getControllerId(), type); toUpdate.setTargetType(targetTypeOptional.get()); } else { - log.error("Target type with the provided name \"{}\" was not found. Target type for thing ID" + - " \"{}\" will not be updated", type, toUpdate.getControllerId()); + log.error( + "Target type with the provided name \"{}\" was not found. Target type for thing ID \"{}\" will not be updated", + type, toUpdate.getControllerId()); } } else { log.debug("Removing target type assignment for thing ID \"{}\".", toUpdate.getControllerId()); 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 22c98379e..42c925819 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 @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -27,11 +26,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.MapJoin; -import jakarta.persistence.criteria.Root; -import jakarta.persistence.metamodel.MapAttribute; import jakarta.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.DistributionSetFields; @@ -42,14 +36,12 @@ import org.eclipse.hawkbit.repository.QuotaManagement; import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.exception.DeletedException; -import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; import org.eclipse.hawkbit.repository.exception.InvalidDistributionSetException; import org.eclipse.hawkbit.repository.jpa.JpaManagementHelper; -import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; @@ -506,24 +498,6 @@ public class JpaDistributionSetManagement } } - private Map getMap(final long id, final MapAttribute mapAttribute) { - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(Object[].class); - - final Root targetRoot = query.from(JpaDistributionSet.class); - query.where(cb.equal(targetRoot.get(AbstractJpaBaseEntity_.ID), id)); - - final MapJoin mapJoin = targetRoot.join(mapAttribute); - query.multiselect(mapJoin.key(), mapJoin.value()); - query.orderBy(cb.asc(mapJoin.key())); - - return entityManager - .createQuery(query) - .getResultList() - .stream() - .collect(Collectors.toMap(entry -> (String) entry[0], entry -> (String) entry[1], (v1, v2) -> v1, LinkedHashMap::new)); - } - private JpaSoftwareModule findSoftwareModuleAndThrowExceptionIfNotFound(final Long softwareModuleId) { return softwareModuleRepository.findById(softwareModuleId) .orElseThrow(() -> new EntityNotFoundException(SoftwareModule.class, softwareModuleId));