Remove some of the field injections (Sonar recomendtion) (#2218)

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
Avgustin Marinov
2025-01-23 09:52:29 +02:00
committed by GitHub
parent 4909a65d8c
commit bb9c9bfad8
26 changed files with 294 additions and 297 deletions

View File

@@ -31,6 +31,7 @@ public abstract class AbstractRSQLVisitor<A extends Enum<A> & RsqlQueryField> {
this.rsqlQueryFieldType = rsqlQueryFieldType;
}
@SuppressWarnings("java:S1066") // java:S1066 - more readable with separate "if" statements
protected QuertPath getQuertPath(final ComparisonNode node) {
final int firstSeparatorIndex = node.getSelector().indexOf(RsqlQueryField.SUB_ATTRIBUTE_SEPARATOR);
final String enumName = (firstSeparatorIndex == -1

View File

@@ -9,12 +9,13 @@
*/
package org.eclipse.hawkbit.repository.jpa.specifications;
import java.util.List;
import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.ListJoin;
import jakarta.persistence.criteria.SetJoin;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_;
import org.eclipse.hawkbit.repository.jpa.model.JpaAction;
import org.eclipse.hawkbit.repository.jpa.model.JpaAction_;
import org.eclipse.hawkbit.repository.jpa.model.JpaArtifact;
@@ -28,18 +29,14 @@ import org.eclipse.hawkbit.repository.model.Action;
import org.springframework.data.jpa.domain.Specification;
/**
* Utility class for {@link Action}s {@link Specification}s. The class provides
* Spring Data JPQL Specifications.
* Utility class for {@link Action}s {@link Specification}s. The class provides Spring Data JPQL Specifications.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ActionSpecifications {
private ActionSpecifications() {
// utility class
}
public static Specification<JpaAction> byTargetIdAndIsActive(final Long targetId) {
return (root, query, cb) -> cb.and(
cb.equal(root.get(JpaAction_.target).get(JpaTarget_.id), targetId),
cb.equal(root.get(JpaAction_.target).get(AbstractJpaBaseEntity_.id), targetId),
cb.equal(root.get(JpaAction_.active), true));
}
@@ -49,7 +46,7 @@ public final class ActionSpecifications {
public static Specification<JpaAction> byTargetIdAndIsActiveAndStatus(final Long targetId, final Action.Status status) {
return (root, query, cb) -> cb.and(
cb.equal(root.get(JpaAction_.target).get(JpaTarget_.id), targetId),
cb.equal(root.get(JpaAction_.target).get(AbstractJpaBaseEntity_.id), targetId),
cb.equal(root.get(JpaAction_.active), true),
cb.equal(root.get(JpaAction_.status), status));
}
@@ -67,15 +64,6 @@ public final class ActionSpecifications {
cb.equal(root.get(JpaAction_.status), status));
}
public static Specification<JpaAction> byTargetIdsAndActiveAndStatusAndDSNotRequiredMigrationStep(
final List<Long> targetIds, final boolean active, final Action.Status status) {
return (root, query, cb) -> cb.and(
root.get(JpaAction_.target).in(targetIds),
cb.equal(root.get(JpaAction_.active), active),
cb.equal(root.get(JpaAction_.status), status),
cb.equal(root.get(JpaAction_.distributionSet).get(JpaDistributionSet_.requiredMigrationStep), false));
}
/**
* Returns active actions by target controller that has null or non-null depending on <code>isNull</code> value.
*
@@ -84,73 +72,64 @@ public final class ActionSpecifications {
* @return the matching action s.
*/
public static Specification<JpaAction> byTargetControllerIdAndActiveAndWeightIsNull(final String controllerId, final boolean isNull) {
return (root, query, cb) ->
cb.and(
cb.equal(root.get(JpaAction_.target).get(JpaTarget_.controllerId), controllerId),
cb.equal(root.get(JpaAction_.active), true),
isNull ? cb.isNull(root.get(JpaAction_.weight)) : cb.isNotNull(root.get(JpaAction_.weight)));
return (root, query, cb) -> cb.and(
cb.equal(root.get(JpaAction_.target).get(JpaTarget_.controllerId), controllerId),
cb.equal(root.get(JpaAction_.active), true),
isNull ? cb.isNull(root.get(JpaAction_.weight)) : cb.isNotNull(root.get(JpaAction_.weight)));
}
public static Specification<JpaAction> byDistributionSetId(final Long distributionSetId) {
return (root, query, cb) -> cb.equal(root.get(JpaAction_.distributionSet).get(JpaTarget_.id), distributionSetId);
return (root, query, cb) -> cb.equal(root.get(JpaAction_.distributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId);
}
public static Specification<JpaAction> byDistributionSetIdAndActive(final Long distributionSetId) {
return (root, query, cb) -> cb.and(
cb.equal(root.get(JpaAction_.distributionSet).get(JpaTarget_.id), distributionSetId),
cb.equal(root.get(JpaAction_.distributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId),
cb.equal(root.get(JpaAction_.active), true));
}
public static Specification<JpaAction> byDistributionSetIdAndActiveAndStatusIsNot(
final Long distributionSetId, final Action.Status status) {
public static Specification<JpaAction> byDistributionSetIdAndActiveAndStatusIsNot(final Long distributionSetId, final Action.Status status) {
return (root, query, cb) -> cb.and(
cb.equal(root.get(JpaAction_.distributionSet).get(JpaTarget_.id), distributionSetId),
cb.equal(root.get(JpaAction_.distributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId),
cb.equal(root.get(JpaAction_.active), true),
cb.notEqual(root.get(JpaAction_.status), status));
}
/**
* Specification which joins all necessary tables to retrieve the dependency
* between a target and a local file assignment through the assigned action
* of the target. All actions are included, not only active actions.
* Specification which joins all necessary tables to retrieve the dependency between a target and a local file assignment through the
* assigned action of the target. All actions are included, not only active actions.
*
* @param controllerId the target to verify if the given artifact is currently
* assigned or had been assigned
* @param sha1Hash of the local artifact to check wherever the target had ever
* been assigned
* @param controllerId the target to verify if the given artifact is currently assigned or had been assigned
* @param sha1Hash of the local artifact to check wherever the target had ever been assigned
* @return a specification to use with spring JPA
*/
public static Specification<JpaAction> hasTargetAssignedArtifact(final String controllerId, final String sha1Hash) {
return (actionRoot, query, criteriaBuilder) -> {
final Join<JpaAction, JpaDistributionSet> dsJoin = actionRoot.join(JpaAction_.distributionSet);
final SetJoin<JpaDistributionSet, JpaSoftwareModule> modulesJoin = dsJoin.join(JpaDistributionSet_.modules);
final ListJoin<JpaSoftwareModule, JpaArtifact> artifactsJoin = modulesJoin
.join(JpaSoftwareModule_.artifacts);
return criteriaBuilder.and(criteriaBuilder.equal(artifactsJoin.get(JpaArtifact_.sha1Hash), sha1Hash),
criteriaBuilder.equal(actionRoot.get(JpaAction_.target).get(JpaTarget_.controllerId),
controllerId));
final ListJoin<JpaSoftwareModule, JpaArtifact> artifactsJoin = modulesJoin.join(JpaSoftwareModule_.artifacts);
return criteriaBuilder.and(
criteriaBuilder.equal(artifactsJoin.get(JpaArtifact_.sha1Hash), sha1Hash),
criteriaBuilder.equal(actionRoot.get(JpaAction_.target).get(JpaTarget_.controllerId), controllerId));
};
}
/**
* Specification which joins all necessary tables to retrieve the dependency
* between a target and a local file assignment through the assigned action
* of the target. All actions are included, not only active actions.
* Specification which joins all necessary tables to retrieve the dependency between a target and a local file assignment through the
* assigned action of the target. All actions are included, not only active actions.
*
* @param targetId the target to verify if the given artifact is currently
* assigned or had been assigned
* @param sha1Hash of the local artifact to check wherever the target had ever
* been assigned
* @param targetId the target to verify if the given artifact is currently assigned or had been assigned
* @param sha1Hash of the local artifact to check wherever the target had ever been assigned
* @return a specification to use with spring JPA
*/
public static Specification<JpaAction> hasTargetAssignedArtifact(final Long targetId, final String sha1Hash) {
return (actionRoot, query, criteriaBuilder) -> {
final Join<JpaAction, JpaDistributionSet> dsJoin = actionRoot.join(JpaAction_.distributionSet);
final SetJoin<JpaDistributionSet, JpaSoftwareModule> modulesJoin = dsJoin.join(JpaDistributionSet_.modules);
final ListJoin<JpaSoftwareModule, JpaArtifact> artifactsJoin = modulesJoin
.join(JpaSoftwareModule_.artifacts);
return criteriaBuilder.and(criteriaBuilder.equal(artifactsJoin.get(JpaArtifact_.sha1Hash), sha1Hash),
criteriaBuilder.equal(actionRoot.get(JpaAction_.target).get(JpaTarget_.id), targetId));
final ListJoin<JpaSoftwareModule, JpaArtifact> artifactsJoin = modulesJoin.join(JpaSoftwareModule_.artifacts);
return criteriaBuilder.and(
criteriaBuilder.equal(artifactsJoin.get(JpaArtifact_.sha1Hash), sha1Hash),
criteriaBuilder.equal(actionRoot.get(JpaAction_.target).get(AbstractJpaBaseEntity_.id), targetId));
};
}
}

View File

@@ -9,23 +9,21 @@
*/
package org.eclipse.hawkbit.repository.jpa.specifications;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_;
import org.eclipse.hawkbit.repository.jpa.model.JpaArtifact;
import org.eclipse.hawkbit.repository.jpa.model.JpaArtifact_;
import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_;
import org.springframework.data.jpa.domain.Specification;
/**
* Utility class for {@link JpaArtifact}s {@link Specification}s. The class provides
* Spring Data JPQL Specifications.
* Utility class for {@link JpaArtifact}s {@link Specification}s. The class provides Spring Data JPQL Specifications.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ArtifactSpecifications {
private ArtifactSpecifications() {
// utility class
}
public static Specification<JpaArtifact> bySoftwareModuleId(final Long softwareModuleId) {
return (targetRoot, query, cb) -> cb.equal(
targetRoot.get(JpaArtifact_.softwareModule).get(JpaSoftwareModule_.id), softwareModuleId);
targetRoot.get(JpaArtifact_.softwareModule).get(AbstractJpaBaseEntity_.id), softwareModuleId);
}
}
}