diff --git a/.gitignore b/.gitignore index dad7bec10..ba9cf4617 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,11 @@ *.jar *.war +###################### +# Sonar +###################### +.sonar_lock + # Eclipse IDE *.pydevproject diff --git a/3rd-dependencies/README.md b/3rd-dependencies/README.md new file mode 100644 index 000000000..357ca54c2 --- /dev/null +++ b/3rd-dependencies/README.md @@ -0,0 +1,3 @@ +# 3rd Party Dependencies + +Contains listing of all maven (transient) licenses of the project. Is primary used to identify all changes between eclipse releases. diff --git a/examples/hawkbit-example-app/src/main/resources/application.properties b/examples/hawkbit-example-app/src/main/resources/application.properties index 7149dbb9c..13ceca40a 100644 --- a/examples/hawkbit-example-app/src/main/resources/application.properties +++ b/examples/hawkbit-example-app/src/main/resources/application.properties @@ -15,8 +15,8 @@ hawkbit.server.controller.security.authentication.gatewaytoken.enabled=false spring.profiles.active=amqp -vaadin.servlet.params.productionMode=false -vaadin.static.servlet.params.productionMode=false +vaadin.servlet.productionMode=false +vaadin.static.servlet.productionMode=false ## Configuration for RabbitMQ integration hawkbit.server.amqp.username=guest diff --git a/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/MongoDBTestRule.java b/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/MongoDBTestRule.java index d8485787e..f5d88ceaa 100644 --- a/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/MongoDBTestRule.java +++ b/hawkbit-artifact-repository-mongo/src/test/java/org/eclipse/hawkbit/artifact/MongoDBTestRule.java @@ -88,7 +88,7 @@ public class MongoDBTestRule implements TestRule { System.setProperty("spring.data.mongodb.port", String.valueOf(port)); } - Version version = Version.V3_1_0; + Version version = Version.V3_0_8; if (System.getProperty("inf.mongodb.version") != null) { version = Version.valueOf("V" + System.getProperty("inf.mongodb.version").trim().replaceAll("\\.", "_")); } diff --git a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties index 4020d0cdd..98749a384 100644 --- a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties +++ b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties @@ -29,10 +29,8 @@ flyway.initOnMigrate=true flyway.sqlMigrationSuffix=${spring.jpa.database}.sql # Vaadin Servlet -vaadin.static.servlet.params.resourceCacheTime=${spring.resources.cache-period} -vaadin.static.servlet.params.productionMode=true -vaadin.servlet.params.productionMode=true -vaadin.servlet.params.resourceCacheTime=${spring.resources.cache-period} +vaadin.static.servlet.productionMode=true +vaadin.servlet.productionMode=true vaadin.servlet.urlMapping=/UI/* vaadin.servlet.params.heartbeatInterval=60 vaadin.servlet.params.closeIdleSessions=false diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java index 331fdad5b..8221fa0ca 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java @@ -37,19 +37,9 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true) public interface ActionRepository extends BaseEntityRepository, JpaSpecificationExecutor { - - /* - * (non-Javadoc) - * - * @see org.springframework.data.repository.CrudRepository#findAll() - */ - @Override - @EntityGraph(value = "Action.all", type = EntityGraphType.LOAD) - Iterable findAll(); - /** * Retrieves an Action with all lazy attributes. - * + * * @param actionId * the ID of the action * @return the found {@link Action} @@ -67,13 +57,12 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the {@link DistributionSet} on which will be filtered * @return the found {@link Action}s */ - @EntityGraph(value = "Action.all", type = EntityGraphType.LOAD) Page findByDistributionSet(final Pageable pageable, final DistributionSet ds); /** * Retrieves all {@link Action}s which are referring the given * {@link Target}. - * + * * @param pageable * page parameters * @param target @@ -84,8 +73,9 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Retrieves all {@link Action}s which are active and referring the given - * {@link Target} in a specified order. - * + * {@link Target} in a specified order. Loads also the lazy + * {@link Action#getDistributionSet()} field. + * * @param pageable * page parameters * @param target @@ -125,14 +115,13 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return the found {@link UpdateAction}s */ @Query("Select a from Action a where a.target = :target and a.distributionSet = :ds order by a.id") - @EntityGraph(value = "Action.all", type = EntityGraphType.LOAD) Page findByTargetAndDistributionSet(final Pageable pageable, @Param("target") final Target target, @Param("ds") DistributionSet ds); /** * Retrieves all {@link Action}s of a specific target, without pagination * ordered by action ID. - * + * * @param target * to search for * @return a list of actions according to the searched target @@ -143,7 +132,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Retrieves all {@link Action}s of a specific target and given active flag * ordered by action ID. - * + * * @param pageable * the pagination parameter * @param target @@ -159,8 +148,9 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Retrieves all {@link Action}s of a specific target and given active flag - * ordered by action ID. - * + * ordered by action ID. Loads also the lazy + * {@link Action#getDistributionSet()} field. + * * @param target * to search for * @param active @@ -174,7 +164,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Updates all {@link Action} to inactive for all targets with given ID. - * + * * @param keySet * the list of actions to set inactive * @param targetsIds @@ -190,7 +180,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * Switches the status of actions from one specific status into another, * only if the actions are in a specific status. This should be a atomar * operation. - * + * * @param statusToSet * the new status the actions should get * @param targetIds @@ -210,7 +200,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * Switches the status of actions from one specific status into another, * only if the actions are in a specific status. This should be a atomar * operation. - * + * * @param statusToSet * the new status the actions should get * @param rollout @@ -227,7 +217,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp @Param("active") boolean active, @Param("currentStatus") Action.Status currentStatus); /** - * + * * Retrieves all {@link Action}s which are active and referring to the given * target Ids and distribution set required migration step. * @@ -243,36 +233,24 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Counts all {@link Action}s referring to the given target. - * + * * @param target * the target to count the {@link Action}s * @return the count of actions referring to the given target */ Long countByTarget(Target target); - /* - * (non-Javadoc) - * - * @see org.springframework.data.repository.CrudRepository#save(java.lang. - * Iterable) - */ @Override @CacheEvict(value = "feedbackReceivedOverTime", allEntries = true) List save(Iterable entities); - /* - * (non-Javadoc) - * - * @see - * org.springframework.data.repository.CrudRepository#save(java.lang.Object) - */ @Override @CacheEvict(value = "feedbackReceivedOverTime", allEntries = true) S save(S entity); /** * Counts all {@link Action}s referring to the given DistributionSet. - * + * * @param distributionSet * DistributionSet to count the {@link Action}s from * @return the count of actions referring to the given distributionSet @@ -281,7 +259,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Counts all {@link Action}s referring to the given rollout. - * + * * @param rollout * the rollout to count the {@link Action}s from * @return the count of actions referring to the given rollout @@ -293,7 +271,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * are currently not in the given status. An in-clause statement does not * work with the spring-data, so this is specific usecase regarding to the * rollout-management to find out actions which are not in specific states. - * + * * @param rollout * the rollout the actions are belong to * @param rolloutGroup @@ -312,7 +290,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Counts all actions referring to a given rollout and rolloutgroup. - * + * * @param rollout * the rollout the actions belong to * @param rolloutGroup @@ -323,7 +301,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Counts all actions referring to a given rollout, rolloutgroup and status. - * + * * @param rolloutId * the ID of rollout the actions belong to * @param rolloutGroupId @@ -338,7 +316,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Retrieving all actions referring to a given rollout with a specific * action as parent reference and a specific status. - * + * * Finding all actions of a specific rolloutgroup parent relation. * * @param rollout @@ -355,7 +333,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Retrieves all actions for a specific rollout and in a specific status. - * + * * @param rollout * the rollout the actions beglong to * @param actionStatus @@ -367,7 +345,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Get list of objects which has details of status and count of targets in * each status in specified rollout. - * + * * @param rolloutId * id of {@link Rollout} * @return list of objects with status and target count @@ -378,7 +356,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Get list of objects which has details of status and count of targets in * each status in specified rollout. - * + * * @param rolloutId * id of {@link Rollout} * @return list of objects with status and target count @@ -389,7 +367,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Get list of objects which has details of status and count of targets in * each status in specified rollout group. - * + * * @param rolloutGroupId * id of {@link RolloutGroup} * @return list of objects with status and target count @@ -400,7 +378,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp /** * Get list of objects which has details of status and count of targets in * each status in specified rollout group. - * + * * @param rolloutGroupId * list of id of {@link RolloutGroup} * @return list of objects with status and target count diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 172f1c3e1..560549e7e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -378,11 +378,13 @@ public class DeploymentManagement { actionStatusRepository.save(actionStatus); }); - // select updated targets in order to return them + // flush to get action IDs + entityManager.flush(); + // collect updated target and actions IDs in order to return them final DistributionSetAssignmentResult result = new DistributionSetAssignmentResult( targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), targets.size(), - controllerIDs.size() - targets.size(), Lists.newArrayList(targetIdsToActions.values()), - targetManagement); + controllerIDs.size() - targets.size(), + targetIdsToActions.values().stream().map(Action::getId).collect(Collectors.toList()), targetManagement); LOG.debug("assignDistribution({}) finished {}", set, result); @@ -391,13 +393,16 @@ public class DeploymentManagement { // detaching as it is not necessary to persist the set itself entityManager.detach(set); - // send distribution set assignment event + sendDistributionSetAssignmentEvent(targets, targetIdsCancellList, targetIdsToActions, softwareModules); + return result; + } + + private void sendDistributionSetAssignmentEvent(final List targets, final Set targetIdsCancellList, + final Map targetIdsToActions, final List softwareModules) { targets.stream().filter(t -> !!!targetIdsCancellList.contains(t.getId())) .forEach(t -> assignDistributionSetEvent(t, targetIdsToActions.get(t.getControllerId()).getId(), softwareModules)); - - return result; } /** @@ -709,8 +714,8 @@ public class DeploymentManagement { } /** - * Get the {@link Action} entity for given actionId with all lazy - * attributes. + * Get the {@link Action} entity for given actionId with all lazy attributes + * (i.e. distributionSet, target, target.assignedDs). * * @param actionId * to be id of the action diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index ac562131d..3e61e4499 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.repository; import java.util.List; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.Target; @@ -19,14 +18,11 @@ import org.eclipse.hawkbit.repository.model.Target; * information of an assignment and how much of the assignment has been done and * how much of the assignments had already been existed. * - * - * - * */ public class DistributionSetAssignmentResult extends AssignmentResult { private final List assignedTargets; - private final List actions; + private final List actions; private final TargetManagement targetManagement; @@ -48,7 +44,7 @@ public class DistributionSetAssignmentResult extends AssignmentResult { * */ public DistributionSetAssignmentResult(final List assignedTargets, final int assigned, - final int alreadyAssigned, final List actions, final TargetManagement targetManagement) { + final int alreadyAssigned, final List actions, final TargetManagement targetManagement) { super(assigned, alreadyAssigned); this.assignedTargets = assignedTargets; this.actions = actions; @@ -63,9 +59,9 @@ public class DistributionSetAssignmentResult extends AssignmentResult { } /** - * @return the actionId + * @return the actionIds */ - public List getActions() { + public List getActions() { return actions; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index 0554e6c58..c19b947de 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -24,6 +24,7 @@ import javax.persistence.ManyToOne; import javax.persistence.NamedAttributeNode; import javax.persistence.NamedEntityGraph; import javax.persistence.NamedEntityGraphs; +import javax.persistence.NamedSubgraph; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; @@ -34,28 +35,22 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; /** *

- * Applicable transition changes of the software {@link SoftwareModule} state of - * a {@link Target}, e.g. install, uninstall, update, start, stop, and - * preparations for the transition change, i.e. download. + * Applicable transition changes of the {@link SoftwareModule}s state of a + * {@link Target}, e.g. install, uninstall, update and preparations for the + * transition change, i.e. download. *

* *

- * Actions are managed by the SP server (SPS) and applied to the edge controller - * by the SP controller (SPC). Actions may also be value added commands that are - * nor directly related to SP, e.g. factory reset. + * Actions are managed by the SP server and applied to the targets by the + * client. *

- * - * - * - * - * */ @Table(name = "sp_action", indexes = { @Index(name = "sp_idx_action_01", columnList = "tenant,distribution_set"), @Index(name = "sp_idx_action_02", columnList = "tenant,target,active"), @Index(name = "sp_idx_action_prim", columnList = "tenant,id") }) @NamedEntityGraphs({ @NamedEntityGraph(name = "Action.ds", attributeNodes = { @NamedAttributeNode("distributionSet") }), @NamedEntityGraph(name = "Action.all", attributeNodes = { @NamedAttributeNode("distributionSet"), - @NamedAttributeNode("target") }) }) + @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet") ) ) }) @Entity public class Action extends BaseEntity implements Comparable { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java index eb2174a57..6d116c5f0 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java @@ -55,7 +55,7 @@ public abstract class AbstractIntegrationTestWithMongoDB extends AbstractIntegra System.setProperty("spring.data.mongodb.port", String.valueOf(port)); } - Version version = Version.V3_0_5; + Version version = Version.V3_0_8; if (System.getProperty("inf.mongodb.version") != null) { version = Version .valueOf("V" + System.getProperty("inf.mongodb.version").trim().replaceAll("\\.", "_")); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java index 46747cd9c..693a67082 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java @@ -66,6 +66,22 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Autowired private EventBus eventBus; + @Test + @Description("Test verifies that the repistory retrieves the action including all defined (lazy) details.") + public void findActionWithLazyDetails() { + final DistributionSet testDs = TestDataUtil.generateDistributionSet("TestDs", "1.0", softwareManagement, + distributionSetManagement, new ArrayList()); + final List testTarget = targetManagement.createTargets(TestDataUtil.generateTargets(1)); + // one action with one action status is generated + final Long actionId = deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails(actionId); + + assertThat(action.getDistributionSet()).as("DistributionSet in action").isNotNull(); + assertThat(action.getTarget()).as("Target in action").isNotNull(); + assertThat(action.getTarget().getAssignedDistributionSet()).as("AssignedDistributionSet of target in action") + .isNotNull(); + } + @Test @Description("Test verifies that the custom query to find all actions include the count of action status is working correctly") public void findActionsWithStatusCountByTarget() { @@ -73,7 +89,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { distributionSetManagement, new ArrayList()); final List testTarget = targetManagement.createTargets(TestDataUtil.generateTargets(1)); // one action with one action status is generated - final Action action = deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0)); // save 2 action status actionStatusRepository.save(new ActionStatus(action, Status.RETRIEVED, System.currentTimeMillis())); actionStatusRepository.save(new ActionStatus(action, Status.RUNNING, System.currentTimeMillis())); @@ -349,7 +366,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { * test a simple deployment by calling the * {@link TargetRepository#assignDistributionSet(DistributionSet, Iterable)} * and checking the active action and the action history of the targets. - * + * * @throws InterruptedException */ @Test @@ -805,7 +822,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement .assignDistributionSet(ds.getId(), ActionType.SOFT, Action.NO_FORCE_TIME, target.getControllerId()); - final Action action = assignDistributionSet.getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify preparation Action findAction = deploymentManagement.findAction(action.getId()); assertThat(findAction.getActionType()).isEqualTo(ActionType.SOFT); @@ -828,7 +845,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement .assignDistributionSet(ds.getId(), ActionType.FORCED, Action.NO_FORCE_TIME, target.getControllerId()); - final Action action = assignDistributionSet.getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify perparation Action findAction = deploymentManagement.findAction(action.getId()); assertThat(findAction.getActionType()).isEqualTo(ActionType.FORCED); @@ -848,7 +865,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { *

* All created distribution sets are assigned to all targets of the * target list deployedTargets. - * + * * @param undeployedTargetPrefix * prefix to be used as target controller prefix * @param noOfUndeployedTargets diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java index bb5450083..0f91fb521 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java @@ -138,7 +138,8 @@ public class ReportManagementTest extends AbstractIntegrationTest { final Target createTarget = targetManagement.createTarget(new Target("t" + month)); final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(distributionSet, Lists.newArrayList(createTarget)); - controllerManagament.registerRetrieved(result.getActions().get(0), + controllerManagament.registerRetrieved( + deploymentManagement.findActionWithDetails(result.getActions().get(0)), "Controller retrieved update action and should start now the download."); } DataReportSeries feedbackReceivedOverTime = reportManagement @@ -158,7 +159,8 @@ public class ReportManagementTest extends AbstractIntegrationTest { final Target createTarget = targetManagement.createTarget(new Target("t2" + month)); final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(distributionSet, Lists.newArrayList(createTarget)); - controllerManagament.registerRetrieved(result.getActions().get(0), + controllerManagament.registerRetrieved( + deploymentManagement.findActionWithDetails(result.getActions().get(0)), "Controller retrieved update action and should start now the download."); } feedbackReceivedOverTime = reportManagement.feedbackReceivedOverTime(DateTypes.perMonth(), from, to); @@ -572,7 +574,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { /* * (non-Javadoc) - * + * * @see org.springframework.data.auditing.DateTimeProvider#getNow() */ @Override diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java index 3a70441ca..cdcaff25e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java @@ -174,7 +174,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(set.getId(), "4711"); - final Action action = result.getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails(result.getActions().get(0)); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); @@ -221,7 +221,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { * verifies, that all {@link TargetTag} of parameter. NOTE: it's accepted * that the target have additional tags assigned to them which are not * contained within parameter tags. - * + * * @param strict * if true, the given targets MUST contain EXACTLY ALL given * tags, AND NO OTHERS. If false, the given targets MUST contain diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java index dffec4df1..d7efa50d5 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java @@ -199,13 +199,14 @@ public final class RepositoryDataGenerator { } - private void createActionStatusHistory(final List actions, final int sizeMultiplikator) { + private void createActionStatusHistory(final List actions, final int sizeMultiplikator) { final AtomicInteger counter = new AtomicInteger(); int index = 0; - for (final Action actionGiven : actions) { + for (final Long actionGiven : actions) { // retrieved - Action action = controllerManagement.registerRetrieved(actionGiven, + Action action = controllerManagement.registerRetrieved( + deploymentManagement.findActionWithDetails(actionGiven), "Controller retrieved update action and should start now the download."); // download @@ -260,10 +261,11 @@ public final class RepositoryDataGenerator { } } - private void createSimpleActionStatusHistory(final List actions) { - for (final Action actionGiven : actions) { + private void createSimpleActionStatusHistory(final List actions) { + for (final Long actionGiven : actions) { // retrieved - Action action = controllerManagement.registerRetrieved(actionGiven, + Action action = controllerManagement.registerRetrieved( + deploymentManagement.findActionWithDetails(actionGiven), "Controller retrieved update action and should start now the download."); // close diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java index 267b95408..e7b94cb30 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java @@ -56,7 +56,8 @@ public class CancelActionTest extends AbstractIntegrationTest { final List toAssign = new ArrayList(); toAssign.add(savedTarget); - final Action updateAction = deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0); + final Action updateAction = deploymentManagement + .findActionWithDetails(deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0)); final Action cancelAction = deploymentManagement.cancelAction(updateAction, targetManagement.findTargetByControllerID(savedTarget.getControllerId())); @@ -112,7 +113,8 @@ public class CancelActionTest extends AbstractIntegrationTest { final List toAssign = new ArrayList(); toAssign.add(savedTarget); - final Action updateAction = deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0); + final Action updateAction = deploymentManagement + .findActionWithDetails(deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0)); long current = System.currentTimeMillis(); mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) @@ -227,7 +229,8 @@ public class CancelActionTest extends AbstractIntegrationTest { final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList(); toAssign.add(savedTarget); - final Action updateAction = deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0); + final Action updateAction = deploymentManagement + .findActionWithDetails(deploymentManagement.assignDistributionSet(ds, toAssign).getActions().get(0)); return deploymentManagement.cancelAction(updateAction, targetManagement.findTargetByControllerID(savedTarget.getControllerId())); @@ -243,8 +246,8 @@ public class CancelActionTest extends AbstractIntegrationTest { final Target savedTarget = targetManagement.createTarget(target); - final Action updateAction = deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }) - .getActions().get(0); + final Action updateAction = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }).getActions().get(0)); // cancel action manually final Action cancelAction = deploymentManagement.cancelAction(updateAction, @@ -340,12 +343,12 @@ public class CancelActionTest extends AbstractIntegrationTest { final Target savedTarget = targetManagement.createTarget(target); - final Action updateAction = deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }) - .getActions().get(0); - final Action updateAction2 = deploymentManagement.assignDistributionSet(ds2.getId(), new String[] { "4712" }) - .getActions().get(0); - final Action updateAction3 = deploymentManagement.assignDistributionSet(ds3.getId(), new String[] { "4712" }) - .getActions().get(0); + final Action updateAction = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }).getActions().get(0)); + final Action updateAction2 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds2.getId(), new String[] { "4712" }).getActions().get(0)); + final Action updateAction3 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds3.getId(), new String[] { "4712" }).getActions().get(0)); assertThat(actionStatusRepository.findAll()).hasSize(3); @@ -456,8 +459,8 @@ public class CancelActionTest extends AbstractIntegrationTest { final List toAssign = new ArrayList(); toAssign.add(target); - final Action action = deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }) - .getActions().get(0); + final Action action = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }).getActions().get(0)); final Action cancelAction = deploymentManagement.cancelAction(action, targetManagement.findTargetByControllerID(target.getControllerId())); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java index e0a4b8e5c..2aabb0cba 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java @@ -484,7 +484,8 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { final DistributionSet savedSet = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); - final Action action1 = deploymentManagement.assignDistributionSet(savedSet, toAssign).getActions().get(0); + final Action action1 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(savedSet, toAssign).getActions().get(0)); mvc.perform( get("/{tenant}/controller/v1/4712/deploymentBase/" + action1.getId(), tenantAware.getCurrentTenant())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -544,12 +545,12 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { final List toAssign = new ArrayList(); toAssign.add(savedTarget1); - final Action action1 = deploymentManagement.assignDistributionSet(ds1.getId(), new String[] { "4712" }) - .getActions().get(0); - final Action action2 = deploymentManagement.assignDistributionSet(ds2.getId(), new String[] { "4712" }) - .getActions().get(0); - final Action action3 = deploymentManagement.assignDistributionSet(ds3.getId(), new String[] { "4712" }) - .getActions().get(0); + final Action action1 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds1.getId(), new String[] { "4712" }).getActions().get(0)); + final Action action2 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds2.getId(), new String[] { "4712" }).getActions().get(0)); + final Action action3 = deploymentManagement.findActionWithDetails( + deploymentManagement.assignDistributionSet(ds3.getId(), new String[] { "4712" }).getActions().get(0)); Target myT = targetManagement.findTargetByControllerID("4712"); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index a4f8a8f70..f1e302fdc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -78,7 +78,8 @@ public class SoftwareModuleTable extends AbstractTable { @Autowired private UploadViewAcceptCriteria uploadViewAcceptCriteria; - + + /** * Initialize the filter layout. */ @@ -127,12 +128,7 @@ public class SoftwareModuleTable extends AbstractTable { */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); - artifactUploadState.getSoftwareModuleFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); - - artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType() - .ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); + final Map queryConfiguration = prepareQueryConfigFilters(); final BeanQueryFactory swQF = new BeanQueryFactory( BaseSwModuleBeanQuery.class); @@ -142,6 +138,19 @@ public class SoftwareModuleTable extends AbstractTable { new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); return container; } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap(); + artifactUploadState.getSoftwareModuleFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType() + .ifPresent(type -> queryConfig.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); + + return queryConfig; + } + + @Override protected void addContainerProperties(final Container container) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java index b08c4defb..b7db0096a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java @@ -219,8 +219,10 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { */ @Override protected void resetSearchText() { - artifactUploadState.getSoftwareModuleFilters().setSearchText(null); - eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + if(artifactUploadState.getSoftwareModuleFilters().getSearchText().isPresent()){ + artifactUploadState.getSoftwareModuleFilters().setSearchText(null); + eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + } } /* diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 265b1db83..5b2e4ed9a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.components; import java.util.Arrays; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; @@ -23,7 +24,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.vaadin.sass.internal.util.StringUtil; import com.vaadin.server.ExternalResource; import com.vaadin.server.FontAwesome; import com.vaadin.server.Resource; @@ -108,16 +108,16 @@ public final class SPUIComponentProvider { final Class tableHeaderLayoutDecorator) { // Do we really need this??? HorizontalLayout hLayout = getHorizontalLayout(new SPUIHorizontalLayout().getUiHorizontalLayout().getClass()); + + if (tableHeaderLayoutDecorator == null) { + return hLayout; + } + try { - SPUIHeaderLayoutDecorator layoutDecorator = null; - if (tableHeaderLayoutDecorator != null) { - layoutDecorator = tableHeaderLayoutDecorator.newInstance(); - hLayout = layoutDecorator.decorate(hLayout); - } - } catch (final InstantiationException exception) { - LOG.error("Error occured while creating horizontal decorator " + SPUIHeaderLayoutDecorator.class, - exception); - } catch (final IllegalAccessException exception) { + final SPUIHeaderLayoutDecorator layoutDecorator = tableHeaderLayoutDecorator.newInstance(); + hLayout = layoutDecorator.decorate(hLayout); + + } catch (final InstantiationException | IllegalAccessException exception) { LOG.error("Error occured while creating horizontal decorator " + SPUIHeaderLayoutDecorator.class, exception); } @@ -324,7 +324,7 @@ public final class SPUIComponentProvider { * @return Label */ public static Label createNameValueLabel(final String label, final String... values) { - final String valueStr = StringUtil.collectionToDelimitedString(Arrays.asList(values), " "); + final String valueStr = StringUtils.join(Arrays.asList(values), " "); final Label nameValueLabel = new Label(getBoldHTMLText(label) + valueStr, ContentMode.HTML); nameValueLabel.setSizeFull(); nameValueLabel.addStyleName(SPUIDefinitions.TEXT_STYLE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index b8e0d286a..32223e995 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -114,7 +114,7 @@ public class DistributionSetTable extends AbstractTable { @Autowired private transient TargetManagement targetManagement; - + /** * Initialize the component. */ @@ -157,21 +157,28 @@ public class DistributionSetTable extends AbstractTable { @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap<>(); - manageDistUIState.getManageDistFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); - - if (null != manageDistUIState.getManageDistFilters().getClickedDistSetType()) { - queryConfiguration.put(SPUIDefinitions.FILTER_BY_DISTRIBUTION_SET_TYPE, - manageDistUIState.getManageDistFilters().getClickedDistSetType()); - } - + final Map queryConfiguration = prepareQueryConfigFilters(); final BeanQueryFactory distributionQF = new BeanQueryFactory<>(ManageDistBeanQuery.class); + distributionQF.setQueryConfiguration(queryConfiguration); return new LazyQueryContainer( new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), distributionQF); } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap(); + manageDistUIState.getManageDistFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + if (null != manageDistUIState.getManageDistFilters().getClickedDistSetType()) { + queryConfig.put(SPUIDefinitions.FILTER_BY_DISTRIBUTION_SET_TYPE, + manageDistUIState.getManageDistFilters().getClickedDistSetType()); + } + + return queryConfig; + } + /* * (non-Javadoc) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java index d64f07ca0..a39f32f6e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java @@ -170,9 +170,10 @@ public class DistributionSetTableHeader extends AbstractTableHeader { @Override protected void resetSearchText() { - manageDistUIstate.getManageDistFilters().setSearchText(null); - eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); - + if(manageDistUIstate.getManageDistFilters().getSearchText().isPresent()){ + manageDistUIstate.getManageDistFilters().setSearchText(null); + eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + } } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java index 17ee9b8af..90d6a74df 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java @@ -94,8 +94,8 @@ public class SwModuleTable extends AbstractTable { @Autowired private ArtifactDetailsLayout artifactDetailsLayout; - - /** + + /** * Initialize the filter layout. */ @PostConstruct @@ -177,15 +177,7 @@ public class SwModuleTable extends AbstractTable { */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); - manageDistUIState.getSoftwareModuleFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); - - manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType() - .ifPresent(type -> queryConfiguration.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); - - manageDistUIState.getLastSelectedDistribution().ifPresent( - distIdName -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_DISTRIBUTION, distIdName.getId())); + final Map queryConfiguration = prepareQueryConfigFilters(); final BeanQueryFactory swQF = new BeanQueryFactory( SwModuleBeanQuery.class); @@ -195,6 +187,20 @@ public class SwModuleTable extends AbstractTable { new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, "swId"), swQF); return container; } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap(); + manageDistUIState.getSoftwareModuleFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + + manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType() + .ifPresent(type -> queryConfig.put(SPUIDefinitions.BY_SOFTWARE_MODULE_TYPE, type)); + + manageDistUIState.getLastSelectedDistribution().ifPresent( + distIdName -> queryConfig.put(SPUIDefinitions.ORDER_BY_DISTRIBUTION, distIdName.getId())); + + return queryConfig; + } /* * (non-Javadoc) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java index 1eae1297b..d8d018e27 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java @@ -203,8 +203,10 @@ public class SwModuleTableHeader extends AbstractTableHeader { */ @Override protected void resetSearchText() { - manageDistUIState.getSoftwareModuleFilters().setSearchText(null); - eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + if(manageDistUIState.getSoftwareModuleFilters().getSearchText().isPresent()){ + manageDistUIState.getSoftwareModuleFilters().setSearchText(null); + eventbus.publish(this, SMFilterEvent.REMOVER_FILTER_BY_TEXT); + } } /* diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java index 225407b84..53e723c7d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java @@ -112,7 +112,8 @@ public class DistributionTable extends AbstractTable { private Boolean isDistPinned = false; private Button distributinPinnedBtn; - + + /** * Initialize the distribution table. */ @@ -141,7 +142,7 @@ public class DistributionTable extends AbstractTable { || event == DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT || event == DistributionTableFilterEvent.FILTER_BY_TAG) { UI.getCurrent().access(() -> refreshFilter()); - } + } } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -219,18 +220,8 @@ public class DistributionTable extends AbstractTable { */ @Override protected Container createContainer() { - final Map queryConfiguration = new HashMap(); - managementUIState.getDistributionTableFilters().getSearchText() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.FILTER_BY_TEXT, value)); - managementUIState.getDistributionTableFilters().getPinnedTargetId() - .ifPresent(value -> queryConfiguration.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value)); - final List list = new ArrayList(); - queryConfiguration.put(SPUIDefinitions.FILTER_BY_NO_TAG, - managementUIState.getDistributionTableFilters().isNoTagSelected()); - if (!managementUIState.getDistributionTableFilters().getDistSetTags().isEmpty()) { - list.addAll(managementUIState.getDistributionTableFilters().getDistSetTags()); - } - queryConfiguration.put(SPUIDefinitions.FILTER_BY_TAG, list); + final Map queryConfiguration = prepareQueryConfigFilters(); + final BeanQueryFactory distributionQF = new BeanQueryFactory( DistributionBeanQuery.class); distributionQF.setQueryConfiguration(queryConfiguration); @@ -239,6 +230,22 @@ public class DistributionTable extends AbstractTable { distributionQF); return distributionContainer; } + + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap(); + managementUIState.getDistributionTableFilters().getSearchText() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); + managementUIState.getDistributionTableFilters().getPinnedTargetId() + .ifPresent(value -> queryConfig.put(SPUIDefinitions.ORDER_BY_PINNED_TARGET, value)); + final List list = new ArrayList(); + queryConfig.put(SPUIDefinitions.FILTER_BY_NO_TAG, + managementUIState.getDistributionTableFilters().isNoTagSelected()); + if (!managementUIState.getDistributionTableFilters().getDistSetTags().isEmpty()) { + list.addAll(managementUIState.getDistributionTableFilters().getDistSetTags()); + } + queryConfig.put(SPUIDefinitions.FILTER_BY_TAG, list); + return queryConfig; + } /* * (non-Javadoc) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java index 1f28293d2..32a3e914d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java @@ -210,8 +210,10 @@ public class DistributionTableHeader extends AbstractTableHeader { */ @Override protected void resetSearchText() { - managementUIState.getDistributionTableFilters().setSearchText(null); - eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + if( managementUIState.getDistributionTableFilters().getSearchText().isPresent()){ + managementUIState.getDistributionTableFilters().setSearchText(null); + eventbus.publish(this, DistributionTableFilterEvent.REMOVE_FILTER_BY_TEXT); + } } /* diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 62276346e..960553a6a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -15,6 +15,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -73,8 +74,8 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; +import com.google.common.base.Strings; import com.google.common.collect.Iterables; -import com.google.gwt.thirdparty.guava.common.base.Strings; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.event.Action; @@ -104,6 +105,8 @@ import com.vaadin.ui.themes.ValoTheme; @ViewScope public class TargetTable extends AbstractTable implements Handler { + private static final String TARGET_PINNED = "targetPinned"; + private static final long serialVersionUID = -2300392868806614568L; private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); @@ -138,6 +141,8 @@ public class TargetTable extends AbstractTable implements Handler { private Boolean isTargetPinned = Boolean.FALSE; private ShortcutAction actionSelectAll; private ShortcutAction actionUnSelectAll; + + @Override @PostConstruct @@ -271,7 +276,7 @@ public class TargetTable extends AbstractTable implements Handler { final Map queryConfig = prepareQueryConfigFilters(); // Create TargetBeanQuery factory with the query config. - final BeanQueryFactory targetQF = new BeanQueryFactory(TargetBeanQuery.class); + final BeanQueryFactory targetQF = new BeanQueryFactory<>(TargetBeanQuery.class); targetQF.setQueryConfiguration(queryConfig); // create lazy query container with lazy defination and query @@ -394,7 +399,7 @@ public class TargetTable extends AbstractTable implements Handler { */ @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList(); + final List columnList = new ArrayList<>(); if (isMaximized()) { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); @@ -469,7 +474,7 @@ public class TargetTable extends AbstractTable implements Handler { } private Map prepareQueryConfigFilters() { - final Map queryConfig = new HashMap(); + final Map queryConfig = new HashMap<>(); managementUIState.getTargetTableFilters().getSearchText() .ifPresent(value -> queryConfig.put(SPUIDefinitions.FILTER_BY_TEXT, value)); managementUIState.getTargetTableFilters().getDistributionSet() @@ -481,7 +486,7 @@ public class TargetTable extends AbstractTable implements Handler { queryConfig.put(SPUIDefinitions.FILTER_BY_NO_TAG, managementUIState.getTargetTableFilters().isNoTagSelected()); if (isFilteredByTags()) { - final List list = new ArrayList(); + final List list = new ArrayList<>(); list.addAll(managementUIState.getTargetTableFilters().getClickedTargetTags()); queryConfig.put(SPUIDefinitions.FILTER_BY_TAG, list.toArray(new String[list.size()])); } @@ -522,7 +527,7 @@ public class TargetTable extends AbstractTable implements Handler { pinBtn.setId(SPUIComponetIdProvider.TARGET_PIN_ICON + "." + itemId); pinBtn.addClickListener(event -> addPinClickListener(event)); if (isPinned(((TargetIdName) itemId).getControllerId())) { - pinBtn.addStyleName("targetPinned"); + pinBtn.addStyleName(TARGET_PINNED); isTargetPinned = Boolean.TRUE; targetPinnedBtn = pinBtn; eventBus.publish(this, PinUnpinEvent.PIN_TARGET); @@ -533,7 +538,7 @@ public class TargetTable extends AbstractTable implements Handler { } private boolean isPinned(final String targetId) { - boolean result = false; + boolean result; if (managementUIState.getDistributionTableFilters().getPinnedTargetId().isPresent() && targetId.equals(managementUIState.getDistributionTableFilters().getPinnedTargetId().get())) { result = true; @@ -594,7 +599,7 @@ public class TargetTable extends AbstractTable implements Handler { eventBus.publish(this, PinUnpinEvent.PIN_TARGET); /* change target table styling */ styleTargetTable(); - eventBtn.addStyleName("targetPinned"); + eventBtn.addStyleName(TARGET_PINNED); isTargetPinned = Boolean.FALSE; } @@ -605,7 +610,7 @@ public class TargetTable extends AbstractTable implements Handler { } private void resetPinStyle(final Button pinBtn) { - pinBtn.removeStyleName("targetPinned"); + pinBtn.removeStyleName(TARGET_PINNED); pinBtn.addStyleName(SPUIStyleDefinitions.TARGET_STATUS_PIN_TOGGLE); HawkbitCommonUtil.applyStatusLblStyle(this, pinBtn, pinBtn.getData()); } @@ -644,7 +649,7 @@ public class TargetTable extends AbstractTable implements Handler { final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); final Table targetTable = (Table) taregtDet.getTarget(); final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(targetTable); - final Set targetList = new HashSet(); + final Set targetList = new HashSet<>(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); final Object targetItemId = dropData.getItemIdOver(); if (!targetSelected.contains(targetItemId)) { @@ -701,9 +706,8 @@ public class TargetTable extends AbstractTable implements Handler { private static Set getDraggedDistributionSet(final TableTransferable transferable, final Table source) { - @SuppressWarnings("unchecked") final Set distSelected = HawkbitCommonUtil.getSelectedDSDetails(source); - final Set distributionIdSet = new HashSet(); + final Set distributionIdSet = new HashSet<>(); if (!distSelected.contains(transferable.getData(ITEMID))) { distributionIdSet.add((DistributionSetIdName) transferable.getData(ITEMID)); } else { @@ -828,15 +832,11 @@ public class TargetTable extends AbstractTable implements Handler { } } - /** - * @param filterEvent - * @return - */ - private boolean checkFilterEvent(final TargetFilterEvent filterEvent) { - boolean isFilterEvent = false; - boolean isFilter = false; - boolean isRemoveFilters = false; - boolean isStatusFilter = false; + private static boolean checkFilterEvent(final TargetFilterEvent filterEvent) { + boolean isFilterEvent; + boolean isFilter; + boolean isRemoveFilters; + boolean isStatusFilter; isFilter = filterEvent == TargetFilterEvent.FILTER_BY_TEXT || filterEvent == TargetFilterEvent.FILTER_BY_TAG || filterEvent == TargetFilterEvent.FILTER_BY_DISTRIBUTION || filterEvent == TargetFilterEvent.FILTER_BY_TARGET_FILTER_QUERY; @@ -1020,11 +1020,11 @@ public class TargetTable extends AbstractTable implements Handler { private List getTargetIdsBySimpleFilters(final PageRequest pageRequest) { final Long filterByDistId = managementUIState.getTargetTableFilters().getDistributionSet().isPresent() ? managementUIState.getTargetTableFilters().getDistributionSet().get().getId() : null; - final List statusList = new ArrayList(); + final List statusList = new ArrayList<>(); if (isFilteredByStatus()) { statusList.addAll(managementUIState.getTargetTableFilters().getClickedStatusTargetTags()); } - final List tagList = new ArrayList(); + final List tagList = new ArrayList<>(); if (isFilteredByTags()) { tagList.addAll(managementUIState.getTargetTableFilters().getClickedTargetTags()); } @@ -1081,7 +1081,7 @@ public class TargetTable extends AbstractTable implements Handler { String[] targetTags = null; Long distributionId = null; String searchText = null; - Boolean noTagClicked = Boolean.FALSE; + Boolean noTagClicked; Long pinnedDistId = null; if (isFilteredByTags()) { @@ -1129,13 +1129,13 @@ public class TargetTable extends AbstractTable implements Handler { && !Strings.isNullOrEmpty(managementUIState.getTargetTableFilters().getSearchText().get()); } - private Boolean anyFilterSelected(final Collection status, final Long distributionId, + private static Boolean anyFilterSelected(final Collection status, final Long distributionId, final Boolean noTagClicked, final String[] targetTags, final String searchText) { return status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected(targetTags, noTagClicked); } - private Boolean isTagSelected(final String[] targetTags, final Boolean noTagClicked) { + private static Boolean isTagSelected(final String[] targetTags, final Boolean noTagClicked) { return targetTags == null && !noTagClicked; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index a1b094f99..159c169d7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -258,8 +258,10 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected void resetSearchText() { - managementUIState.getTargetTableFilters().setSearchText(null); - eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); + if(managementUIState.getTargetTableFilters().getSearchText().isPresent()){ + managementUIState.getTargetTableFilters().setSearchText(null); + eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); + } } private String getSearchText() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java index c51c02fe4..38f59b270 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import com.google.gwt.thirdparty.guava.common.base.Strings; +import com.google.common.base.Strings; import com.vaadin.server.FontAwesome; import com.vaadin.ui.AbstractTextField.TextChangeEventMode; import com.vaadin.ui.Alignment; diff --git a/pom.xml b/pom.xml index aa188e76a..d481a56fb 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 1.2.7.RELEASE + 1.2.8.RELEASE org.eclipse.hawkbit @@ -57,42 +57,61 @@ - 1.2.7.RELEASE + 1.8 + + 1.2.8.RELEASE - - 1.4.186 - 2.5.0 - 5.2.2.Final - Fowler-SR1 + + + 2.5.5 + 5.2.4.Final 1.2.0.RELEASE - 3.0.2 - + + Fowler-SR1 + 3.2.2 + 1.0.0 0.0.6.RELEASE - 7.5.7 + 7.5.10 ${vaadin.version} + 7.4.0.1 + 2.2.0 + 7.0.1 + 1.2.0 + 4.5 - + 1.4 2.0M10 - 1.8 1.4.15 - 2.6.0 + 2.6.2 1.5.4 1.0.2 0.9.1 - 3.4 1.8.5 + 19.0 + 1.3.5 + 1.50.2 + 1.18.1 + 2.2.4 + 1.1.7 + 1.1 + 1.1.1 + 3.4 + 20141113 + 2.0.0 + - + scm:git:https://github.com/eclipse/hawkbit.git scm:git:https://github.com/eclipse/hawkbit.git https://github.com/eclipse/hawkbit.git + - + https://sonar.eu-gb.mybluemix.net eclipse/hawkbit jacoco @@ -123,7 +142,7 @@ ${jacoco.outputDir}/${jacoco.out.it.file} - 19.0 + @@ -335,7 +354,7 @@ org.slf4j slf4j-api - 1.7.7 + ${slf4j.version} @@ -363,30 +382,6 @@ vaadin-push ${vaadin.version} - - - com.vaadin - vaadin-client-compiler - ${vaadin.version} - provided - - - org.eclipse.jetty - jetty-servlets - - - org.eclipse.jetty - jetty-annotations - - - org.eclipse.jetty - jetty-util - - - com.vaadin vaadin-themes @@ -395,44 +390,44 @@ org.vaadin.addons.lazyquerycontainer vaadin-lazyquerycontainer - 7.4.0.1 + ${vaadin.addon.vaadin-lazyquerycontainer.version} org.vaadin.addons flexibleoptiongroup - 2.2.0 + ${vaadin.addon.flexibleoptiongroup.version} org.vaadin.addons tokenfield - 7.0.1 + ${vaadin.addon.tokenfield.version} org.vaadin.alump.distributionbar dbar-addon - 1.2.0 + ${vaadin.addon.dbar-addon.version} org.vaadin.addons contextmenu - 4.5 + ${vaadin.addon.contextmenu.version} javax.el javax.el-api - 2.2.4 + ${javax.el-api.version} net.sf.corn corn-cps - 1.1.7 + ${corn-cps.version} net._01001111 jlorem - 1.1 + ${jlorem.version} @@ -514,13 +509,6 @@ - - - com.fasterxml - classmate - 1.3.0 - org.eclipse.persistence org.eclipse.persistence.jpa @@ -530,7 +518,7 @@ cz.jirutka.rsql rsql-parser - 2.0.0 + ${rsql-parser.version} @@ -541,7 +529,7 @@ com.googlecode.json-simple json-simple - 1.1.1 + ${json-simple.version} junit @@ -549,13 +537,13 @@ - - - xml-apis - xml-apis - 1.4.01 + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} - + org.springframework.boot spring-boot-starter-test @@ -567,22 +555,16 @@ - - com.vaadin - vaadin-testbench - 4.0.3 - test - org.json json - 20141113 + ${json.version} test de.flapdoodle.embed de.flapdoodle.embed.mongo - 1.50.0 + ${embedded-mongo.version} test @@ -606,7 +588,7 @@ com.sun.jersey jersey-client - 1.18.1 + ${jersey-client.version} test @@ -618,13 +600,13 @@ com.jayway.jsonpath json-path-assert - 0.9.1 + ${json-path.version} test org.mariadb.jdbc mariadb-java-client - 1.2.3 + ${mariadb-java-client.version} test