From 1f86168ae831adcc17dd33b7c6490b9cc9d7a7b5 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 27 Oct 2016 14:09:48 +0200 Subject: [PATCH] Added a new query for the target rollout group count Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/repository/RolloutGroupManagement.java | 10 ++++++++++ .../repository/jpa/JpaRolloutGroupManagement.java | 14 +++++++++++++- .../repository/jpa/JpaRolloutManagement.java | 4 +--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index 2ae0f113c..3c87a6fbd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -150,4 +150,14 @@ public interface RolloutGroupManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); + + /** + * Count targets of rollout group. + * + * @param rolloutGroup + * the rollout group for the count + * @return the target rollout group count + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Long countTargetsOfRolloutsGroup(@NotNull RolloutGroup rolloutGroup); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index 382b8fab4..6a447c5fe 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -20,6 +20,7 @@ import javax.persistence.criteria.Join; import javax.persistence.criteria.JoinType; import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.Root; +import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.RolloutGroupFields; import org.eclipse.hawkbit.repository.RolloutGroupManagement; @@ -33,7 +34,6 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_; import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; -import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; @@ -42,6 +42,7 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -204,4 +205,15 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); } + @Override + public Long countTargetsOfRolloutsGroup(@NotNull final RolloutGroup rolloutGroup) { + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final CriteriaQuery countQuery = cb.createQuery(Long.class); + final Root countQueryFrom = countQuery.from(RolloutTargetGroup.class); + countQuery.select(cb.count(countQueryFrom)) + .where(cb.equal(countQueryFrom.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); + return entityManager.createQuery(countQuery).getSingleResult(); + + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index c18cb5865..8d53f4679 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -488,9 +488,7 @@ public class JpaRolloutManagement implements RolloutManagement { private void checkIfTargetsOfRolloutGroupDeleted(final JpaRolloutGroup rolloutGroup) { - final long countTargetsOfRolloutGroup = rolloutGroupManagement - .findRolloutGroupTargets(rolloutGroup, new OffsetBasedPageRequest(0, 1, null)).getTotalElements(); - + final long countTargetsOfRolloutGroup = rolloutGroupManagement.countTargetsOfRolloutsGroup(rolloutGroup); if (rolloutGroup.getTotalTargets() != countTargetsOfRolloutGroup) { // targets have been deleted and we have to update the // total target count in the rollout and the rollout group