Injectable UI target data suppliers (#1123)

* initial proposal for injectible target data provider

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* improved selection of first entity in grid

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* introduced constructor to explicitely set DataCommunicator for a Grid

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* made data communicator for target grid injectable

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* adapted size page request to load only one entity for getting total elements, fixed grid duplicates in case lastModified property is the same for targets and rollouts

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* DeleteSupport rethrows the exception to be intercepted by error handlers

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* minor grid refactoring

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* adapted docu for base data providers

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* added custom filter data provider, made filter effectively immutable by cloning before data refresh

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* grid returns size directly from data provider instead of data communicator

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* restructured data provider/communicator dependency injection, added injectable data supplier for target filter view grid

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* do not remove confirmation dialog window from UI explicitely

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>

* fixed sonar, added docs

Signed-off-by: Bogdan Bondar <Bogdan.Bondar@bosch.io>
This commit is contained in:
Bondar Bogdan
2021-06-02 16:58:35 +02:00
committed by GitHub
parent df7b0701d7
commit 40b28e212d
50 changed files with 736 additions and 200 deletions

View File

@@ -8,8 +8,6 @@
*/
package org.eclipse.hawkbit.repository.jpa;
import static org.springframework.data.domain.Sort.Direction;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -21,8 +19,8 @@ import javax.persistence.EntityManager;
import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.QuotaManagement;
import org.eclipse.hawkbit.repository.RolloutApprovalStrategy;
import org.eclipse.hawkbit.repository.RolloutGroupManagement;
import org.eclipse.hawkbit.repository.RolloutExecutor;
import org.eclipse.hawkbit.repository.RolloutGroupManagement;
import org.eclipse.hawkbit.repository.RolloutHelper;
import org.eclipse.hawkbit.repository.RolloutManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
@@ -60,6 +58,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionException;
import org.springframework.util.StringUtils;
@@ -297,8 +296,7 @@ public class JpaRolloutExecutor implements RolloutExecutor {
if (hasScheduledActions) {
try {
final Iterable<JpaAction> iterable = scheduledActions::iterator;
final List<Long> actionIds = StreamSupport.stream(iterable.spliterator(), false)
.map(Action::getId)
final List<Long> actionIds = StreamSupport.stream(iterable.spliterator(), false).map(Action::getId)
.collect(Collectors.toList());
actionRepository.deleteByIdIn(actionIds);
afterCommit.afterCommit(() -> eventPublisherHolder.getEventPublisher()
@@ -369,8 +367,8 @@ public class JpaRolloutExecutor implements RolloutExecutor {
private void updateTotalTargetCount(final JpaRolloutGroup rolloutGroup, final long countTargetsOfRolloutGroup) {
final JpaRollout jpaRollout = (JpaRollout) rolloutGroup.getRollout();
final long updatedTargetCount =
jpaRollout.getTotalTargets() - (rolloutGroup.getTotalTargets() - countTargetsOfRolloutGroup);
final long updatedTargetCount = jpaRollout.getTotalTargets()
- (rolloutGroup.getTotalTargets() - countTargetsOfRolloutGroup);
jpaRollout.setTotalTargets(updatedTargetCount);
rolloutGroup.setTotalTargets((int) countTargetsOfRolloutGroup);
rolloutRepository.save(jpaRollout);
@@ -394,9 +392,9 @@ public class JpaRolloutExecutor implements RolloutExecutor {
private boolean isRolloutGroupComplete(final JpaRollout rollout, final JpaRolloutGroup rolloutGroup) {
final Long actionsLeftForRollout = ActionType.DOWNLOAD_ONLY == rollout.getActionType()
? actionRepository.countByRolloutAndRolloutGroupAndStatusNotIn(rollout, rolloutGroup,
DOWNLOAD_ONLY_ACTION_TERMINATION_STATUSES)
DOWNLOAD_ONLY_ACTION_TERMINATION_STATUSES)
: actionRepository.countByRolloutAndRolloutGroupAndStatusNotIn(rollout, rolloutGroup,
DEFAULT_ACTION_TERMINATION_STATUSES);
DEFAULT_ACTION_TERMINATION_STATUSES);
return actionsLeftForRollout == 0;
}
@@ -440,8 +438,8 @@ public class JpaRolloutExecutor implements RolloutExecutor {
}
private void executeRolloutGroupSuccessAction(final Rollout rollout, final RolloutGroup rolloutGroup) {
context.getBean(rolloutGroup.getSuccessAction().getBeanName(), RolloutGroupActionEvaluator.class)
.eval(rollout, rolloutGroup, rolloutGroup.getSuccessActionExp());
context.getBean(rolloutGroup.getSuccessAction().getBeanName(), RolloutGroupActionEvaluator.class).eval(rollout,
rolloutGroup, rolloutGroup.getSuccessActionExp());
}
private void startFirstRolloutGroup(final Rollout rollout) {
@@ -496,7 +494,8 @@ public class JpaRolloutExecutor implements RolloutExecutor {
final long targetsInGroupFilter = DeploymentHelper.runInNewTransaction(txManager,
"countAllTargetsByTargetFilterQueryAndNotInRolloutGroups",
count -> targetManagement.countByRsqlAndNotInRolloutGroups(readyGroups, groupTargetFilter));
final long expectedInGroup = Math.round(group.getTargetPercentage() / 100 * (double) targetsInGroupFilter);
final long expectedInGroup = Math
.round((double) (group.getTargetPercentage() / 100) * (double) targetsInGroupFilter);
final long currentlyInGroup = DeploymentHelper.runInNewTransaction(txManager,
"countRolloutTargetGroupByRolloutGroup",
count -> rolloutTargetGroupRepository.countByRolloutGroup(group));
@@ -573,7 +572,8 @@ public class JpaRolloutExecutor implements RolloutExecutor {
try {
long actionsCreated;
do {
actionsCreated = createActionsForTargetsInNewTransaction(rollout.getId(), group.getId(), TRANSACTION_TARGETS);
actionsCreated = createActionsForTargetsInNewTransaction(rollout.getId(), group.getId(),
TRANSACTION_TARGETS);
totalActionsCreated += actionsCreated;
} while (actionsCreated > 0);
@@ -584,8 +584,7 @@ public class JpaRolloutExecutor implements RolloutExecutor {
return totalActionsCreated;
}
private Long createActionsForTargetsInNewTransaction(final long rolloutId, final long groupId,
final int limit) {
private Long createActionsForTargetsInNewTransaction(final long rolloutId, final long groupId, final int limit) {
return DeploymentHelper.runInNewTransaction(txManager, "createActionsForTargets", status -> {
final PageRequest pageRequest = PageRequest.of(0, limit);
final Rollout rollout = rolloutRepository.findById(rolloutId)