From 3479a8d692ade5964503fdfafc96da426162dac9 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Wed, 10 Feb 2016 14:35:30 +0530 Subject: [PATCH 01/11] Drag and drop handles wrong item. Signed-off-by: venu1278 --- .../footer/SMDeleteActionsLayout.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java index 841256da4..eb8ed75e1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.ui.artifacts.footer; +import java.util.HashSet; import java.util.Set; import javax.annotation.PostConstruct; @@ -21,6 +22,7 @@ import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +38,7 @@ import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.UI; +import com.vaadin.ui.Table.TableTransferable; /** * Upload view footer layout implementation. @@ -196,7 +199,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { final Component sourceComponent = event.getTransferable().getSourceComponent(); if (sourceComponent instanceof Table) { final Table sourceTable = (Table) event.getTransferable().getSourceComponent(); - addToDeleteList(sourceTable); + addToDeleteList(sourceTable,(TableTransferable) event.getTransferable()); updateSWActionCount(); } if (sourceComponent.getId().startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { @@ -220,16 +223,23 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { private void deleteSWModuleType(final String swModuleTypeName) { artifactUploadState.getSelectedDeleteSWModuleTypes().add(swModuleTypeName); } - - private void addToDeleteList(final Table sourceTable) { - final Set swModuleIds = (Set) sourceTable.getValue(); - swModuleIds.forEach(id -> { + + private void addToDeleteList(final Table sourceTable, final TableTransferable transferable) { + @SuppressWarnings("unchecked") + final Set swModuleSelected = (Set) sourceTable.getValue(); + final Set swModuleIdNameSet = new HashSet(); + if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { + swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID)); + } else { + swModuleIdNameSet.addAll(swModuleSelected); + } + swModuleIdNameSet.forEach(id -> { final String swModuleName = (String) sourceTable.getContainerDataSource().getItem(id) .getItemProperty(SPUILabelDefinitions.NAME_VERSION).getValue(); artifactUploadState.getDeleteSofwareModules().put(id, swModuleName); }); } - + /** * Update the software module delete count. */ From f78bd68c032d63dcd0ee0697fd5a52a519c26935 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 10 Feb 2016 16:22:20 +0100 Subject: [PATCH 02/11] Verify that the target controller id cannot be empty Signed-off-by: SirWayne --- .../repository/ControllerManagement.java | 16 +++++--------- .../hawkbit/repository/TargetManagement.java | 7 +++++++ .../repository/ControllerManagementTest.java | 21 +++++++++++++++++++ .../repository/TargetManagementTest.java | 12 +++++++++++ 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 844bbd097..e4a1e5e6b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -15,7 +15,6 @@ import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; @@ -212,14 +211,9 @@ public class ControllerManagement implements EnvironmentAware { @Modifying @Transactional @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Target findOrRegisterTargetIfItDoesNotexist(@NotNull final String targetid, final URI address) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - return cb.equal(targetRoot.get(Target_.controllerId), targetid); - } - }; + public Target findOrRegisterTargetIfItDoesNotexist(@NotEmpty final String targetid, final URI address) { + final Specification spec = (targetRoot, query, cb) -> cb.equal(targetRoot.get(Target_.controllerId), + targetid); Target target = targetRepository.findOne(spec); @@ -229,9 +223,9 @@ public class ControllerManagement implements EnvironmentAware { target.setName(targetid); return targetManagement.createTarget(target, TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), address); - } else { - return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); } + + return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index e790d0a5e..fb824dfae 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -27,8 +27,10 @@ import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.validation.ConstraintViolationException; import javax.validation.constraints.NotNull; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; @@ -931,6 +933,11 @@ public class TargetManagement { public Target createTarget(@NotNull final Target target, @NotNull final TargetUpdateStatus status, final Long lastTargetQuery, final URI address) { + if (StringUtils.isEmpty(target.getControllerId())) { + throw new ConstraintViolationException("Empty string for controller id not allowed", + Collections.emptySet()); + } + if (targetRepository.findByControllerId(target.getControllerId()) != null) { throw new EntityAlreadyExistsException(target.getControllerId()); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java index 8289b8173..41a7c7848 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java @@ -9,10 +9,13 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; +import javax.validation.ConstraintViolationException; + import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; @@ -71,6 +74,24 @@ public class ControllerManagementTest extends AbstractIntegrationTest { .getNumberOfElements()).isEqualTo(3); } + @Test + @Description("Register a controller which not exist") + public void testfindOrRegisterTargetIfItDoesNotexist() { + final Target target = controllerManagament.findOrRegisterTargetIfItDoesNotexist("AA", null); + assertThat(target).as("target should not be null").isNotNull(); + + final Target sameTarget = controllerManagament.findOrRegisterTargetIfItDoesNotexist("AA", null); + assertThat(target).as("Target should be the equals").isEqualTo(sameTarget); + assertThat(targetRepository.count()).as("Only 1 target should be registred").isEqualTo(1L); + + try { + controllerManagament.findOrRegisterTargetIfItDoesNotexist("", null); + fail("target with empty controller id should not be registred"); + } catch (final ConstraintViolationException e) { + // ok + } + } + @Test @Description("Controller trys to finish an update process after it has been finished by an error action status.") public void tryToFinishUpdateProcessMoreThenOnce() { 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 a7b8e673f..72f1951c6 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 @@ -26,6 +26,7 @@ import java.util.Set; import java.util.stream.Collectors; import javax.persistence.Query; +import javax.validation.ConstraintViolationException; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; @@ -65,6 +66,17 @@ public class TargetManagementTest extends AbstractIntegrationTest { } } + @Test + @Description("Verify that a target with empty controller id cannot be created") + public void createTarget() { + try { + targetManagement.createTarget(new Target("")); + fail("target with empty controller id should not be created"); + } catch (final ConstraintViolationException e) { + // ok + } + } + @Test @Description("Ensures that targets can assigned and unassigned to a target tag. Not exists target will be ignored for the assignment.") public void assignAndUnassignTargetsToTag() { From 46a71c1b3a2f8c28b4a8b069bc61a07fe8cabd90 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 10 Feb 2016 16:51:45 +0100 Subject: [PATCH 03/11] Use javax annotation for validation Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/repository/TargetManagement.java | 7 ------- .../org/eclipse/hawkbit/repository/model/Target.java | 4 ++++ .../eclipse/hawkbit/repository/TargetManagementTest.java | 9 ++++++++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index fb824dfae..e790d0a5e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -27,10 +27,8 @@ import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import javax.validation.ConstraintViolationException; import javax.validation.constraints.NotNull; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; @@ -933,11 +931,6 @@ public class TargetManagement { public Target createTarget(@NotNull final Target target, @NotNull final TargetUpdateStatus status, final Long lastTargetQuery, final URI address) { - if (StringUtils.isEmpty(target.getControllerId())) { - throw new ConstraintViolationException("Empty string for controller id not allowed", - Collections.emptySet()); - } - if (targetRepository.findByControllerId(target.getControllerId()) != null) { throw new EntityAlreadyExistsException(target.getControllerId()); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java index 6de84ccaa..08e4fcecb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -32,6 +32,8 @@ import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.UniqueConstraint; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.model.helper.SecurityChecker; @@ -74,6 +76,8 @@ public class Target extends NamedEntity implements Persistable { private static final long serialVersionUID = 1L; @Column(name = "controller_id", length = 64) + @Size(min = 1) + @NotNull private String controllerId; @Transient 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 72f1951c6..3fe6a8738 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 @@ -68,13 +68,20 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Verify that a target with empty controller id cannot be created") - public void createTarget() { + public void createTargetWithNoControllerId() { try { targetManagement.createTarget(new Target("")); fail("target with empty controller id should not be created"); } catch (final ConstraintViolationException e) { // ok } + + try { + targetManagement.createTarget(new Target(null)); + fail("target with empty controller id should not be created"); + } catch (final ConstraintViolationException e) { + // ok + } } @Test From fbc16a42746a60bcad9cacb997429b23ac9ca6aa Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Thu, 11 Feb 2016 12:06:44 +0100 Subject: [PATCH 04/11] Signed-off-by: asharani-murugesh --- .../footer/TargetFilterCountMessageLabel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java index 1c8382223..c3e55f8a0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java @@ -71,12 +71,14 @@ public class TargetFilterCountMessageLabel extends Label { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final CustomFilterUIEvent custFUIEvent) { - if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY - || custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW + if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK || custFUIEvent == CustomFilterUIEvent.EXIT_CREATE_OR_UPDATE_FILTRER_VIEW) { displayTargetFilterMessage(); } + else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY){ + this.getUI().access(() -> displayTargetFilterMessage()); + } } private void applyStyle() { From e84b5938533be765e9bd2a85a524ce2e79ba3c18 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Thu, 11 Feb 2016 13:26:57 +0100 Subject: [PATCH 05/11] Safely getting access to the UI thread to modify the target count label Signed-off-by: asharani-murugesh --- .../filtermanagement/footer/TargetFilterCountMessageLabel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java index c3e55f8a0..c6bcc879e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java @@ -29,6 +29,7 @@ import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Label; +import com.vaadin.ui.UI; /** * @author Venugopal Boodidadinne(RBEI/BSJ) @@ -74,7 +75,7 @@ public class TargetFilterCountMessageLabel extends Label { if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK || custFUIEvent == CustomFilterUIEvent.EXIT_CREATE_OR_UPDATE_FILTRER_VIEW) { - displayTargetFilterMessage(); + UI.getCurrent().access(()->displayTargetFilterMessage()); } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY){ this.getUI().access(() -> displayTargetFilterMessage()); From 88c854f2beab7ad39581faf8a82383d2027bbd08 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 12 Feb 2016 13:47:53 +0100 Subject: [PATCH 06/11] =?UTF-8?q?Clean=20code=20for=20junit=20tests=20?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added messages to JUnit assertions - Added Description when missing - Changed to assertThat when assertEquals Signed-off-by: Jonathan Philip Knoblauch --- .../AmqpControllerAuthentficationTest.java | 26 +++-- .../repository/ReportManagementTest.java | 95 ++++++++++-------- .../repository/TargetManagementTest.java | 96 +++++++++++-------- .../repository/rsql/RSQLTargetFieldTest.java | 3 +- .../controller/ArtifactDownloadTest.java | 9 +- .../rest/resource/SortUtilityTest.java | 52 +++++++--- .../ui/utils/NamingThreadFactoryTest.java | 17 +++- 7 files changed, 190 insertions(+), 108 deletions(-) diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentficationTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentficationTest.java index 5a77c5fce..1d962907b 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentficationTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentficationTest.java @@ -45,7 +45,7 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * - * + * Test Amqp controller authentfication. */ @Features("AMQP Authenfication Test") @Stories("Tests the authenfication") @@ -86,24 +86,34 @@ public class AmqpControllerAuthentficationTest { amqpMessageHandlerService.setAuthenticationManager(authenticationManager); } - @Test(expected = BadCredentialsException.class) + @Test @Description("Tests authentication manager without principal") public void testAuthenticationeBadCredantialsWithoutPricipal() { final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); - authenticationManager.doAuthenticate(securityToken); - fail(); + try { + authenticationManager.doAuthenticate(securityToken); + fail("BadCredentialsException was excepeted since principal was missing"); + } catch (final BadCredentialsException exception) { + // test ok - exception was excepted + } + } - @Test(expected = BadCredentialsException.class) - @Description("Tests authentication manager without wrong credential") + @Test + @Description("Tests authentication manager without wrong credential") public void testAuthenticationBadCredantialsWithWrongCredential() { final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); when(systemManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), any())) .thenReturn(Boolean.TRUE); securityToken.getHeaders().put(TenantSecruityToken.AUTHORIZATION_HEADER, "TargetToken 12" + CONTROLLLER_ID); - authenticationManager.doAuthenticate(securityToken); - fail(); + try { + authenticationManager.doAuthenticate(securityToken); + fail("BadCredentialsException was excepeted due to wrong credential"); + } catch (final BadCredentialsException exception) { + // test ok - exception was excepted + } + } @Test 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 5c9c86aa7..bb5450083 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 @@ -99,7 +99,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { assertThat(targetsCreatedOverPeriod.getData()).hasSize(maxMonthBackAmountReportTargets + 1); for (final DataReportSeriesItem reportItem : targetsCreatedOverPeriod.getData()) { // only one target is created for each month - assertThat(reportItem.getData().intValue()).isEqualTo(1); + assertThat(reportItem.getData().intValue()).as("Target for each month").isEqualTo(1); } // check cache evict @@ -109,7 +109,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { } targetsCreatedOverPeriod = reportManagement.targetsCreatedOverPeriod(DateTypes.perMonth(), from, to); for (final DataReportSeriesItem reportItem : targetsCreatedOverPeriod.getData()) { - assertThat(reportItem.getData().intValue()).isEqualTo(2); + assertThat(reportItem.getData().intValue()).as("Target for each month").isEqualTo(2); } } @@ -221,21 +221,26 @@ public class ReportManagementTest extends AbstractIntegrationTest { .getData()[0]; if (dataReportSeriesItem.getType().equals("ds1")) { // total count of three because ds1 has two different versions - assertThat(dataReportSeriesItem.getData()).isEqualTo(3L); + assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 1 in statistics") + .isEqualTo(3L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) .contains("0.0.0", "0.0.1"); } else if (dataReportSeriesItem.getType().equals("ds2")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(1L); + assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 2 in statistics") + .isEqualTo(1L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(outerData).hasSize(1); - assertThat(outerData[0].getType()).isEqualTo("0.0.2"); - + assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics") + .isEqualTo("0.0.2"); } else if (dataReportSeriesItem.getType().equals("ds3")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(0L); + + assertThat(dataReportSeriesItem.getData()).as("Version/Item type of DistributionSet 3 in statistics") + .isEqualTo(0L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(outerData).hasSize(1); - assertThat(outerData[0].getType()).isEqualTo("0.0.3"); + assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics") + .isEqualTo("0.0.3"); } else { fail("no assertion count for distribution set " + dataReportSeriesItem.getType()); } @@ -251,8 +256,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { final DataReportSeriesItem dataReportSeriesItem = innerOuterDataReportSeries.getInnerSeries() .getData()[0]; if (dataReportSeriesItem.getType().equals("ds1")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(4L); - + assertThat(dataReportSeriesItem.getData()).as("Data report item number").isEqualTo(4L); } } } @@ -278,19 +282,23 @@ public class ReportManagementTest extends AbstractIntegrationTest { switch (reportItem.getType()) { case ERROR: - assertThat(reportItem.getData()).isEqualTo(knownErrorCount); + assertThat(reportItem.getData()).as("ERROR count for targets in statistics").isEqualTo(knownErrorCount); break; case IN_SYNC: - assertThat(reportItem.getData()).isEqualTo(knownSyncCount); + assertThat(reportItem.getData()).as("IN_SYNC count for targets in statistics") + .isEqualTo(knownSyncCount); break; case PENDING: - assertThat(reportItem.getData()).isEqualTo(knownPendingCount); + assertThat(reportItem.getData()).as("PENDING count for targets in statistics") + .isEqualTo(knownPendingCount); break; case REGISTERED: - assertThat(reportItem.getData()).isEqualTo(knownRegCount); + assertThat(reportItem.getData()).as("REGISTERED count for targets in statistics") + .isEqualTo(knownRegCount); break; case UNKNOWN: - assertThat(reportItem.getData()).isEqualTo(knownUnknownCount); + assertThat(reportItem.getData()).as("UNKNOWN count for targets in statistics") + .isEqualTo(knownUnknownCount); break; default: fail("missing case for unknown target update status " + reportItem.getType()); @@ -309,19 +317,24 @@ public class ReportManagementTest extends AbstractIntegrationTest { switch (reportItem.getType()) { case ERROR: - assertThat(reportItem.getData()).isEqualTo(knownErrorCount * 2); + assertThat(reportItem.getData()).as("ERROR count for targets in statistics") + .isEqualTo(knownErrorCount * 2); break; case IN_SYNC: - assertThat(reportItem.getData()).isEqualTo(knownSyncCount * 2); + assertThat(reportItem.getData()).as("IN_SYNC count for targets in statistics") + .isEqualTo(knownSyncCount * 2); break; case PENDING: - assertThat(reportItem.getData()).isEqualTo(knownPendingCount * 2); + assertThat(reportItem.getData()).as("PENDING count for targets in statistics") + .isEqualTo(knownPendingCount * 2); break; case REGISTERED: - assertThat(reportItem.getData()).isEqualTo(knownRegCount * 2); + assertThat(reportItem.getData()).as("REGISTERED count for targets in statistics") + .isEqualTo(knownRegCount * 2); break; case UNKNOWN: - assertThat(reportItem.getData()).isEqualTo(knownUnknownCount * 2); + assertThat(reportItem.getData()).as("UNKNOWN count for targets in statistics") + .isEqualTo(knownUnknownCount * 2); break; default: fail("missing case for unknown target update status " + reportItem.getType()); @@ -373,22 +386,30 @@ public class ReportManagementTest extends AbstractIntegrationTest { final DataReportSeriesItem dataReportSeriesItem = innerOuterDataReportSeries.getInnerSeries() .getData()[0]; if (dataReportSeriesItem.getType().equals("ds1")) { + // total count of three because ds1 has two different versions - assertThat(dataReportSeriesItem.getData()).isEqualTo(3L); + assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 1 in statistics") + .isEqualTo(3L); + final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(Arrays.stream(outerData).map(DataReportSeriesItem::getType).collect(Collectors.toList())) .contains("0.0.0", "0.0.1"); + } else if (dataReportSeriesItem.getType().equals("ds2")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(1L); + assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 2 in statistics") + .isEqualTo(1L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(outerData).hasSize(1); - assertThat(outerData[0].getType()).isEqualTo("0.0.2"); + assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 2 in statistics") + .isEqualTo("0.0.2"); } else if (dataReportSeriesItem.getType().equals("ds3")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(0L); + assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 3 in statistics") + .isEqualTo(0L); final DataReportSeriesItem[] outerData = innerOuterDataReportSeries.getOuterSeries().getData(); assertThat(outerData).hasSize(1); - assertThat(outerData[0].getType()).isEqualTo("0.0.3"); + assertThat(outerData[0].getType()).as("Version/Item type of DistributionSet 3 in statistics") + .isEqualTo("0.0.3"); } else { fail("no assertion count for distribution set " + dataReportSeriesItem.getType()); } @@ -402,7 +423,8 @@ public class ReportManagementTest extends AbstractIntegrationTest { final DataReportSeriesItem dataReportSeriesItem = innerOuterDataReportSeries.getInnerSeries() .getData()[0]; if (dataReportSeriesItem.getType().equals("ds1")) { - assertThat(dataReportSeriesItem.getData()).isEqualTo(4L); + assertThat(dataReportSeriesItem.getData()).as("Total count of DistributionSet 1 in statistics") + .isEqualTo(4L); } } } @@ -435,29 +457,24 @@ public class ReportManagementTest extends AbstractIntegrationTest { DataReportSeries targetsNotLastPoll = reportManagement.targetsLastPoll(); DataReportSeriesItem[] data = targetsNotLastPoll.getData(); - // for( final DataReportSeriesItem dataReportSeriesItem : - // data ) { - // System.out.println( dataReportSeriesItem.getData() ); - // } - // --- Verfiy --- // verify hour - assertThat(data[0].getType()).isEqualTo(SeriesTime.HOUR); - assertThat(data[0].getData()).isEqualTo((long) knownTargetsPollLastHour); + assertThat(data[0].getType()).as("Series time").isEqualTo(SeriesTime.HOUR); + assertThat(data[0].getData()).as("Targets poll last hour").isEqualTo((long) knownTargetsPollLastHour); // verify day - assertThat(data[1].getType()).isEqualTo(SeriesTime.DAY); - assertThat(data[1].getData()).isEqualTo((long) knownTargetsPollLastDay); + assertThat(data[1].getType()).as("Series time").isEqualTo(SeriesTime.DAY); + assertThat(data[1].getData()).as("Targets poll last day").isEqualTo((long) knownTargetsPollLastDay); // verify week - assertThat(data[2].getType()).isEqualTo(SeriesTime.WEEK); - assertThat(data[2].getData()).isEqualTo((long) knownTargetsPollLastWeek); + assertThat(data[2].getType()).as("Series time").isEqualTo(SeriesTime.WEEK); + assertThat(data[2].getData()).as("Targets poll last week").isEqualTo((long) knownTargetsPollLastWeek); // test cache evict createTargets("hourPoll2", knownTargetsPollLastHour, now.minusMinutes(59)); targetsNotLastPoll = reportManagement.targetsLastPoll(); data = targetsNotLastPoll.getData(); - assertThat(data[0].getType()).isEqualTo(SeriesTime.HOUR); - assertThat(data[0].getData()).isEqualTo((long) knownTargetsPollLastHour * 2); + assertThat(data[0].getType()).as("Series time").isEqualTo(SeriesTime.HOUR); + assertThat(data[0].getData()).as("Targets poll last hour").isEqualTo((long) knownTargetsPollLastHour * 2); } 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 a7b8e673f..555d654c5 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 @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -226,10 +225,10 @@ public class TargetManagementTest extends AbstractIntegrationTest { } } if (strict) { - fail(); + fail("Target does not contain all tags"); } } - fail(); + fail("Target does not contain any tags or the expected tag was not found"); } } @@ -240,7 +239,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { for (final Tag tag : tags) { for (final Tag tt : t.getTags()) { if (tag.getName().equals(tt.getName())) { - fail(); + fail("Target should have no tags"); } } } @@ -256,30 +255,33 @@ public class TargetManagementTest extends AbstractIntegrationTest { final Target target = TestDataUtil.buildTargetFixture(myCtrlID, "the description!"); Target savedTarget = targetManagement.createTarget(target); - assertNotNull(savedTarget); + assertNotNull("The target should not be null", savedTarget); final Long createdAt = savedTarget.getCreatedAt(); Long modifiedAt = savedTarget.getLastModifiedAt(); - assertEquals(createdAt, modifiedAt); - assertNotNull(savedTarget.getCreatedAt()); - assertNotNull(savedTarget.getLastModifiedAt()); - assertEquals(target, savedTarget); + + assertThat(createdAt).as("CreatedAt compared with modifiedAt").isEqualTo(modifiedAt); + assertNotNull("The createdAt attribut of the target should no be null", savedTarget.getCreatedAt()); + assertNotNull("The lastModifiedAt attribut of the target should no be null", savedTarget.getLastModifiedAt()); + assertThat(target).as("Target compared with saved target").isEqualTo(savedTarget); savedTarget.setDescription("changed description"); Thread.sleep(1); savedTarget = targetManagement.updateTarget(savedTarget); - - assertNotNull(savedTarget.getLastModifiedAt()); - assertNotEquals(createdAt, savedTarget.getLastModifiedAt()); - assertNotEquals(modifiedAt, savedTarget.getLastModifiedAt()); + assertNotNull("The lastModifiedAt attribute of the target should not be null", savedTarget.getLastModifiedAt()); + assertThat(createdAt).as("CreatedAt compared with saved modifiedAt") + .isNotEqualTo(savedTarget.getLastModifiedAt()); + assertThat(modifiedAt).as("ModifiedAt compared with saved modifiedAt") + .isNotEqualTo(savedTarget.getLastModifiedAt()); modifiedAt = savedTarget.getLastModifiedAt(); final Target foundTarget = targetManagement.findTargetByControllerID(savedTarget.getControllerId()); - - assertNotNull(foundTarget); - assertEquals(myCtrlID, foundTarget.getControllerId()); - assertEquals(savedTarget, foundTarget); - assertEquals(createdAt, foundTarget.getCreatedAt()); - assertEquals(modifiedAt, foundTarget.getLastModifiedAt()); + assertNotNull("The target should not be null", foundTarget); + assertThat(myCtrlID).as("ControllerId compared with saved controllerId") + .isEqualTo(foundTarget.getControllerId()); + assertThat(savedTarget).as("Target compared with saved target").isEqualTo(foundTarget); + assertThat(createdAt).as("CreatedAt compared with saved createdAt").isEqualTo(foundTarget.getCreatedAt()); + assertThat(modifiedAt).as("LastModifiedAt compared with saved lastModifiedAt") + .isEqualTo(foundTarget.getLastModifiedAt()); } @Test @@ -296,8 +298,11 @@ public class TargetManagementTest extends AbstractIntegrationTest { final Target savedExtra = targetManagement.createTarget(extra); Iterable allFound = targetRepository.findAll(); - assertEquals(firstList.size(), firstSaved.spliterator().getExactSizeIfKnown()); - assertEquals(firstList.size() + 1, allFound.spliterator().getExactSizeIfKnown()); + + assertThat(Long.valueOf(firstList.size())).as("List size of targets") + .isEqualTo(firstSaved.spliterator().getExactSizeIfKnown()); + assertThat(Long.valueOf(firstList.size() + 1)).as("LastModifiedAt compared with saved lastModifiedAt") + .isEqualTo(allFound.spliterator().getExactSizeIfKnown()); // change the objects and save to again to trigger a change on // lastModifiedAt @@ -308,18 +313,23 @@ public class TargetManagementTest extends AbstractIntegrationTest { _founds: for (final Target foundTarget : allFound) { for (final Target changedTarget : firstSaved) { if (changedTarget.getControllerId().equals(foundTarget.getControllerId())) { - assertEquals(changedTarget.getDescription(), foundTarget.getDescription()); - assertTrue(changedTarget.getName().startsWith(foundTarget.getName())); - assertTrue(changedTarget.getName().endsWith("changed")); - assertEquals(changedTarget.getCreatedAt(), foundTarget.getCreatedAt()); - assertThat(changedTarget.getLastModifiedAt()).isNotEqualTo(changedTarget.getCreatedAt()); - + assertThat(changedTarget.getDescription()) + .as("Description of changed target compared with description saved target") + .isEqualTo(foundTarget.getDescription()); + assertThat(changedTarget.getName()).as("Name of changed target starts with name of saved target") + .startsWith(foundTarget.getName()); + assertThat(changedTarget.getName()).as("Name of changed target ends with 'changed'") + .endsWith("changed"); + assertThat(changedTarget.getCreatedAt()).as("CreatedAt compared with saved createdAt") + .isEqualTo(foundTarget.getCreatedAt()); + assertThat(changedTarget.getLastModifiedAt()).as("LastModifiedAt compared with saved createdAt") + .isNotEqualTo(changedTarget.getCreatedAt()); continue _founds; } } if (!foundTarget.getControllerId().equals(savedExtra.getControllerId())) { - fail(); + fail("The controllerId of the found target is not equal to the controllerId of the saved target"); } } @@ -341,8 +351,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { targetManagement.deleteTargets(deletedTargetIDs); allFound = targetManagement.findTargetsAll(new PageRequest(0, 200)).getContent(); - assertEquals(firstSaved.spliterator().getExactSizeIfKnown() - nr2Del, - allFound.spliterator().getExactSizeIfKnown()); + assertThat(firstSaved.spliterator().getExactSizeIfKnown() - nr2Del).as("Size of splited list") + .isEqualTo(allFound.spliterator().getExactSizeIfKnown()); // verify that all undeleted are still found assertThat(allFound).doesNotContain(deletedTargets); @@ -376,15 +386,26 @@ public class TargetManagementTest extends AbstractIntegrationTest { } final Query qry = entityManager.createNativeQuery("select * from sp_target_attributes ta"); final List result = qry.getResultList(); - assertEquals(attribs.size() * ts.spliterator().getExactSizeIfKnown(), result.size()); + + assertThat(attribs.size() * ts.spliterator().getExactSizeIfKnown()).as("Amount of all target attributes") + .isEqualTo(result.size()); for (final Target myT : ts) { final Target t = targetManagement.findTargetByControllerIDWithDetails(myT.getControllerId()); - assertEquals(attribs.size(), t.getTargetInfo().getControllerAttributes().size()); + assertThat(attribs.size()).as("Amount of target attributes per target") + .isEqualTo(t.getTargetInfo().getControllerAttributes().size()); + for (final Entry ca : t.getTargetInfo().getControllerAttributes().entrySet()) { - assertTrue(attribs.containsKey(ca.getKey())); + assertTrue("Attributes list does not contain target attribute key", attribs.containsKey(ca.getKey())); // has the same value: see string concatenation above - assertEquals(String.format("%s-%s", attribs.get(ca.getKey()), t.getControllerId()), ca.getValue()); + // assertThat(String.format("%s-%s", + // attribs.get(ca.getKey()))).as("Value of string + // concatenation") + // .isEqualTo(ca.getValue()); + + assertEquals("The value of the string concatenation is not equal to the value of the target attributes", + String.format("%s-%s", attribs.get(ca.getKey()), t.getControllerId()), ca.getValue()); + } } @@ -656,9 +677,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { final List targetsListWithNoTag = targetManagement .findTargetByFilters(new PageRequest(0, 500), null, null, null, Boolean.TRUE, tagNames).getContent(); - // Total targets - assertEquals(50, targetManagement.findAllTargetIds().size()); - // Targets with no tag - assertEquals(25, targetsListWithNoTag.size()); + assertThat(50).as("Total targets").isEqualTo(targetManagement.findAllTargetIds().size()); + assertThat(25).as("Targets with no tag").isEqualTo(targetsListWithNoTag.size()); + } } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java index 50b6600e9..2f77346f2 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java @@ -114,8 +114,9 @@ public class RSQLTargetFieldTest extends AbstractIntegrationTest { assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "!=pending", 3); try { assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "==noExist*", 0); - fail(); + fail("RSQLParameterUnsupportedFieldException was expected since update status unknown"); } catch (final RSQLParameterUnsupportedFieldException e) { + // test ok - exception was excepted } assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "=in=(pending,error)", 1); assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "=out=(pending,error)", 3); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java index a87ce748a..2db088e64 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java @@ -57,9 +57,6 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test artifact downloads from the controller. * - * - * - * */ @ActiveProfiles({ "im", "test" }) @@ -285,7 +282,8 @@ public class ArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { .andExpect(header().string("Content-Disposition", "attachment;filename=" + artifact.getFilename())) .andReturn(); - assertTrue(Arrays.equals(result.getResponse().getContentAsByteArray(), random)); + assertTrue("The same file that was uploaded is expected when downloaded", + Arrays.equals(result.getResponse().getContentAsByteArray(), random)); // download complete assertThat(downLoadProgress).isEqualTo(10); @@ -393,7 +391,8 @@ public class ArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { .andExpect(header().longValue("Last-Modified", artifact.getCreatedAt())) .andExpect(header().string("Content-Disposition", "attachment;filename=file1")).andReturn(); - assertTrue(Arrays.equals(result.getResponse().getContentAsByteArray(), random)); + assertTrue("The same file that was uploaded is expected when downloaded", + Arrays.equals(result.getResponse().getContentAsByteArray(), random)); // one (update) action assertThat(actionRepository.findByTargetAndDistributionSet(pageReq, target, ds).getContent()).hasSize(1); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java index 7ca7814b2..d915c4e9e 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java @@ -8,7 +8,8 @@ */ package org.eclipse.hawkbit.rest.resource; -import static org.junit.Assert.assertEquals; +import static org.fest.assertions.api.Assertions.assertThat; +import static org.junit.Assert.fail; import java.util.List; @@ -16,9 +17,15 @@ import org.eclipse.hawkbit.repository.TargetFields; import org.junit.Test; import org.springframework.data.domain.Sort.Order; +import ru.yandex.qatools.allure.annotations.Description; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + /** * */ +@Features("Component Tests - Management RESTful API") +@Stories("Sorting parameter") public class SortUtilityTest { private static final String SORT_PARAM_1 = "NAME:ASC"; private static final String SORT_PARAM_2 = "NAME:ASC, DESCRIPTION:DESC"; @@ -29,36 +36,55 @@ public class SortUtilityTest { private static final String WRONG_FIELD_PARAM = "ASDF:ASC"; @Test + @Description("Ascending sorting based on name.") public void parseSortParam1() { - final List parse = SortUtility.parse(TargetFields.class, SORT_PARAM_1); - assertEquals(1, parse.size()); + assertThat(1).as("Count of parsing parameter").isEqualTo(parse.size()); } @Test + @Description("Ascending sorting based on name and descending sorting based on description.") public void parseSortParam2() { final List parse = SortUtility.parse(TargetFields.class, SORT_PARAM_2); - assertEquals(2, parse.size()); - } - - @Test(expected = SortParameterSyntaxErrorException.class) - public void parseWrongSyntaxParam() { - SortUtility.parse(TargetFields.class, SYNTAX_FAILURE_SORT_PARAM); + assertThat(2).as("Count of parsing parameter").isEqualTo(parse.size()); } @Test + @Description("Sorting with wrong syntax leads to SortParameterSyntaxErrorException.") + public void parseWrongSyntaxParam() { + try { + SortUtility.parse(TargetFields.class, SYNTAX_FAILURE_SORT_PARAM); + fail("SortParameterSyntaxErrorException expected because of wrong syntax"); + } catch (final SortParameterSyntaxErrorException e) { + } + } + + @Test + @Description("Sorting based on name with case sensitive is possible.") public void parsingIsNotCaseSensitive() { SortUtility.parse(TargetFields.class, CASE_INSENSITIVE_DIRECTION_PARAM); SortUtility.parse(TargetFields.class, CASE_INSENSITIVE_DIRECTION_PARAM_1); } - @Test(expected = SortParameterUnsupportedDirectionException.class) + @Test + @Description("Sorting with unknown direction order leads to SortParameterUnsupportedDirectionException.") public void parseWrongDirectionParam() { - SortUtility.parse(TargetFields.class, WRONG_DIRECTION_PARAM); + try { + SortUtility.parse(TargetFields.class, WRONG_DIRECTION_PARAM); + fail("SortParameterUnsupportedDirectionException expected because of unknown direction order"); + } catch (final SortParameterUnsupportedDirectionException e) { + } + } - @Test(expected = SortParameterUnsupportedFieldException.class) + @Test + @Description("Sorting with unknown field leads to SortParameterUnsupportedFieldException.") public void parseWrongFieldParam() { - SortUtility.parse(TargetFields.class, WRONG_FIELD_PARAM); + try { + SortUtility.parse(TargetFields.class, WRONG_FIELD_PARAM); + fail("SortParameterUnsupportedFieldException expected because of unknown field"); + } catch (final SortParameterUnsupportedFieldException e) { + } + } } diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java index d351f976d..1ff1b3d33 100644 --- a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java @@ -19,24 +19,32 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.context.annotation.Description; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +@Features("Component Tests - UI") +@Stories("Threads with NamingThreadFactory") @RunWith(MockitoJUnitRunner.class) public class NamingThreadFactoryTest { @Mock private final Runnable runnableMock = mock(Runnable.class); @Test + @Description("Correct name of threads when created through NamingThreadFactory.") public void setsNameForThreads() { final String knownName = "knownName"; final ThreadFactory threadFactory = new NamingThreadFactory(knownName); final Thread newThread1 = threadFactory.newThread(runnableMock); final Thread newThread2 = threadFactory.newThread(runnableMock); - assertThat(newThread1.getName()).isEqualTo(NamingThreadFactory.SP_PREFIX + knownName); - assertThat(newThread2.getName()).isEqualTo(NamingThreadFactory.SP_PREFIX + knownName); + assertThat(newThread1.getName()).as("Name of the thread").isEqualTo(NamingThreadFactory.SP_PREFIX + knownName); + assertThat(newThread2.getName()).as("Name of the thread").isEqualTo(NamingThreadFactory.SP_PREFIX + knownName); } @Test + @Description("Correct name of threads when created through NamingThreadFactory with formated name.") public void setsFormatedNameForThreads() { final String nameFormat = "knownName-%d"; final String knownName1 = "knownName-0"; @@ -45,11 +53,12 @@ public class NamingThreadFactoryTest { final Thread newThread1 = threadFactory.newThread(runnableMock); final Thread newThread2 = threadFactory.newThread(runnableMock); - assertThat(newThread1.getName()).isEqualTo(NamingThreadFactory.SP_PREFIX + knownName1); - assertThat(newThread2.getName()).isEqualTo(NamingThreadFactory.SP_PREFIX + knownName2); + assertThat(newThread1.getName()).as("Name of the thread").isEqualTo(NamingThreadFactory.SP_PREFIX + knownName1); + assertThat(newThread2.getName()).as("Name of the thread").isEqualTo(NamingThreadFactory.SP_PREFIX + knownName2); } @Test + @Description("Created threads run are running.") public void setsRunnableForThreads() { final String knownName = "knownName"; final ThreadFactory threadFactory = new NamingThreadFactory(knownName); From 629ac6c4de7b78eb0a64edfd49e2dc10bdfc63ce Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Sat, 13 Feb 2016 12:26:46 +0100 Subject: [PATCH 07/11] Sonar issues fixed Signed-off-by: asharani-murugesh --- .../ui/filtermanagement/CreateOrUpdateFilterTable.java | 1 - .../footer/TargetFilterCountMessageLabel.java | 4 ---- 2 files changed, 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java index 35eb7238f..64599928c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java @@ -37,7 +37,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.google.common.base.Strings; import com.vaadin.data.Item; import com.vaadin.server.FontAwesome; -import com.vaadin.server.Sizeable.Unit; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java index 126bb3322..ab0161b37 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.ui.filtermanagement.footer; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -46,9 +45,6 @@ public class TargetFilterCountMessageLabel extends Label { @Autowired private FilterManagementUIState filterManagementUIState; - @Autowired - private transient TargetManagement targetManagement; - @Autowired private I18N i18n; From 59fb97fea2cccb3b4e25c9211830c5a6941b1f5a Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Sat, 13 Feb 2016 21:33:27 +0100 Subject: [PATCH 08/11] In and Out parameter changes Signed-off-by: asharani-murugesh --- .../hawkbit/repository/rsql/RSQLUtility.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java index db6d11ba3..d0931cf4a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java @@ -470,27 +470,35 @@ public final class RSQLUtility { } } - private Predicate getInPredicate(final List transformedValues, final Path fieldPath) { - List inParams =new ArrayList<>(); - for(Object param :transformedValues){ - if(param instanceof String){ - inParams.add(((String) param).toUpperCase()); - } - } - return cb.upper(pathOfString(fieldPath)).in(inParams); - } + private Predicate getInPredicate(final List transformedValues, final Path fieldPath) { + List inParams = new ArrayList<>(); + for (Object param : transformedValues) { + if (param instanceof String) { + inParams.add(((String) param).toUpperCase()); + } + } + if (!inParams.isEmpty()) { + return cb.upper(pathOfString(fieldPath)).in(inParams); + } else { + return fieldPath.in(transformedValues); + } + } - private Predicate getOutPredicate(final List transformedValues, final Path fieldPath) { - List outParams =new ArrayList<>(); - for(Object param :transformedValues){ - if(param instanceof String){ - outParams.add(((String) param).toUpperCase()); - } - } - return cb.not(cb.upper(pathOfString(fieldPath)).in(outParams)); - } + private Predicate getOutPredicate(final List transformedValues, final Path fieldPath) { + List outParams = new ArrayList<>(); + for (Object param : transformedValues) { + if (param instanceof String) { + outParams.add(((String) param).toUpperCase()); + } + } + if (!outParams.isEmpty()) { + return cb.not(cb.upper(pathOfString(fieldPath)).in(outParams)); + } else { + return cb.not(fieldPath.in(transformedValues)); + } + } private Path getMapValueFieldPath(final A enumField, final Path fieldPath) { if (!enumField.isMap() || enumField.getValueFieldName() == null) { From 158a9cfa204a6a5e8b175f2b3b9803138d6be931 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 15 Feb 2016 10:38:30 +0100 Subject: [PATCH 09/11] RSQLUtility : convert query to lower case before parsing Signed-off-by: asharani-murugesh --- .../hawkbit/repository/TargetManagement.java | 10 +++++----- .../hawkbit/repository/rsql/RSQLUtility.java | 13 ++++++++----- .../CreateOrUpdateFilterHeader.java | 7 +++---- .../filtermanagement/CreateOrUpdateFilterTable.java | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 150bbf53c..e790d0a5e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -205,7 +205,7 @@ public class TargetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) public Slice findTargetsAll(@NotNull final TargetFilterQuery targetFilterQuery, @NotNull final Pageable pageable) { - return findTargetsAll(RSQLUtility.parse(targetFilterQuery.getQuery().toLowerCase(), TargetFields.class), pageable); + return findTargetsAll(RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class), pageable); } /** @@ -219,7 +219,7 @@ public class TargetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) public Slice findTargetsAll(@NotNull final String targetFilterQuery, @NotNull final Pageable pageable) { - return findTargetsAll(RSQLUtility.parse(targetFilterQuery.toLowerCase(), TargetFields.class), pageable); + return findTargetsAll(RSQLUtility.parse(targetFilterQuery, TargetFields.class), pageable); } /** @@ -883,7 +883,7 @@ public class TargetManagement { targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name), targetRoot.get(pageRequest.getSort().iterator().next().getProperty())); - final Specification spec = RSQLUtility.parse(targetFilterQuery.getQuery().toLowerCase(), TargetFields.class); + final Specification spec = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); final List> specList = new ArrayList<>(); specList.add(spec); @@ -1057,7 +1057,7 @@ public class TargetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) public Long countTargetByTargetFilterQuery(@NotNull final TargetFilterQuery targetFilterQuery) { - final Specification specs = RSQLUtility.parse(targetFilterQuery.getQuery().toLowerCase(), TargetFields.class); + final Specification specs = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); return targetRepository.count(specs); } @@ -1070,7 +1070,7 @@ public class TargetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) public Long countTargetByTargetFilterQuery(@NotNull final String targetFilterQuery) { - final Specification specs = RSQLUtility.parse(targetFilterQuery.toLowerCase(), TargetFields.class); + final Specification specs = RSQLUtility.parse(targetFilterQuery, TargetFields.class); return targetRepository.count(specs); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java index d0931cf4a..23b6c52c8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java @@ -18,6 +18,7 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Expression; import javax.persistence.criteria.MapJoin; import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; @@ -101,7 +102,7 @@ public final class RSQLUtility { */ public static & FieldNameProvider, T> Specification parse(final String rsql, final Class fieldNameProvider) { - return new RSQLSpecification<>(rsql, fieldNameProvider); + return new RSQLSpecification<>(rsql.toLowerCase(), fieldNameProvider); } /** @@ -507,7 +508,8 @@ public final class RSQLUtility { return fieldPath.get(enumField.getValueFieldName()); } - private Predicate mapToMapPredicate(final ComparisonNode node, final Path fieldPath, + @SuppressWarnings("unchecked") + private Predicate mapToMapPredicate(final ComparisonNode node, final Path fieldPath, final A enumField) { if (!enumField.isMap()) { return null; @@ -515,10 +517,11 @@ public final class RSQLUtility { final String[] graph = node.getSelector().split("\\" + FieldNameProvider.SUB_ATTRIBUTE_SEPERATOR); final String keyValue = graph[graph.length - 1]; if (fieldPath instanceof MapJoin) { - return cb.equal(((MapJoin) fieldPath).key(), keyValue); + //Currently we support only string key .So below cast is safe. + return cb.equal(cb.upper((Expression) (((MapJoin) fieldPath).key())), keyValue.toUpperCase()); } - - return cb.equal(fieldPath.get(enumField.getKeyFieldName()), keyValue); + + return cb.equal(cb.upper(fieldPath.get(enumField.getKeyFieldName())), keyValue.toUpperCase()); } private Predicate getEqualToPredicate(final Object transformedValue, final Path fieldPath) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 67371d30c..22b00d372 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -348,9 +348,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } } - private void onQueryChange(final String text) { - if (!Strings.isNullOrEmpty(text)) { - final String input = text.toLowerCase(); + private void onQueryChange(final String input) { + if (!Strings.isNullOrEmpty(input)) { final ValidationResult validationResult = FilterQueryValidation.getExpectedTokens(input); if (!validationResult.getIsValidationFailed()) { filterManagementUIState.setFilterQueryValue(input); @@ -369,7 +368,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button filterManagementUIState.setFilterQueryValue(null); filterManagementUIState.setIsFilterByInvalidFilterQuery(Boolean.TRUE); } - queryTextField.setValue(text); + queryTextField.setValue(input); } private void enableDisableSaveButton(final boolean validationFailed, final String query) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java index 64599928c..98ecfa304 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java @@ -111,7 +111,7 @@ public class CreateOrUpdateFilterTable extends Table { filterManagementUIState.setFilterQueryValue(null); } else { filterManagementUIState.getTfQuery().ifPresent( - value -> filterManagementUIState.setFilterQueryValue(value.getQuery().toLowerCase())); + value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); } } From b498f60392caf8a79437884169f6cb72c87c2212 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 15 Feb 2016 10:40:30 +0100 Subject: [PATCH 10/11] Reverting the changes as per master copy Signed-off-by: asharani-murugesh --- .../DistributionAddUpdateWindowLayout.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 256a04926..cf581652c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -342,25 +342,26 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { distributionSet.setRequiredMigrationStep(isMigStepReq); } + private boolean duplicateCheck(final String name, final String version) { final DistributionSet existingDs = distributionSetManagement.findDistributionSetByNameAndVersion(name, version); + /* + * Distribution should not exists with the same name & version. Display + * error message, when the "existingDs" is not null and it is add window + * (or) when the "existingDs" is not null and it is edit window and the + * distribution Id of the edit window is different then the "existingDs" + */ + if (existingDs != null && !existingDs.getId().equals(editDistId)) { + distNameTextField.addStyleName("v-textfield-error"); + distVersionTextField.addStyleName("v-textfield-error"); + notificationMessage.displayValidationError( + i18n.get("message.duplicate.dist", new Object[] { existingDs.getName(), existingDs.getVersion() })); - if (existingDs == null) { + return false; + } else { return true; } - - if (editDistribution && !existingDs.getId().equals(editDistId)) { - return true; - } - - distNameTextField.addStyleName("v-textfield-error"); - distVersionTextField.addStyleName("v-textfield-error"); - notificationMessage.displayValidationError( - i18n.get("message.duplicate.dist", new Object[] { existingDs.getName(), existingDs.getVersion() })); - - return false; } - /** * Mandatory Check. * From 7b79010fbf9f5a9aaea51bc49d7a19c97a3647db Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 15 Feb 2016 12:32:12 +0100 Subject: [PATCH 11/11] format sources with correct formatter. Signed-off-by: Michael Hirsch --- .../hawkbit/repository/rsql/RSQLUtility.java | 72 +++++++++--------- .../CreateOrUpdateFilterHeader.java | 74 +++++++++---------- .../CreateOrUpdateFilterTable.java | 39 +++++----- .../CustomTargetBeanQuery.java | 6 +- .../footer/TargetFilterCountMessageLabel.java | 2 +- 5 files changed, 93 insertions(+), 100 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java index 23b6c52c8..03f213fef 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java @@ -461,46 +461,46 @@ public final class RSQLUtility { singleList.add(cb.lessThanOrEqualTo(pathOfString(fieldPath), value)); break; case "=in=": - singleList.add(getInPredicate(transformedValues,fieldPath)); + singleList.add(getInPredicate(transformedValues, fieldPath)); break; case "=out=": - singleList.add(getOutPredicate(transformedValues,fieldPath)); + singleList.add(getOutPredicate(transformedValues, fieldPath)); break; default: LOGGER.info("operator symbol {} is either not supported or not implemented"); } } - - private Predicate getInPredicate(final List transformedValues, final Path fieldPath) { - List inParams = new ArrayList<>(); - for (Object param : transformedValues) { - if (param instanceof String) { - inParams.add(((String) param).toUpperCase()); - } - } - if (!inParams.isEmpty()) { - return cb.upper(pathOfString(fieldPath)).in(inParams); - } else { - return fieldPath.in(transformedValues); - } - } + private Predicate getInPredicate(final List transformedValues, final Path fieldPath) { + final List inParams = new ArrayList<>(); + for (final Object param : transformedValues) { + if (param instanceof String) { + inParams.add(((String) param).toUpperCase()); + } + } + if (!inParams.isEmpty()) { + return cb.upper(pathOfString(fieldPath)).in(inParams); + } else { + return fieldPath.in(transformedValues); - private Predicate getOutPredicate(final List transformedValues, final Path fieldPath) { - List outParams = new ArrayList<>(); - for (Object param : transformedValues) { - if (param instanceof String) { - outParams.add(((String) param).toUpperCase()); - } - } - if (!outParams.isEmpty()) { - return cb.not(cb.upper(pathOfString(fieldPath)).in(outParams)); - } else { - return cb.not(fieldPath.in(transformedValues)); + } + } + + private Predicate getOutPredicate(final List transformedValues, final Path fieldPath) { + final List outParams = new ArrayList<>(); + for (final Object param : transformedValues) { + if (param instanceof String) { + outParams.add(((String) param).toUpperCase()); + } + } + if (!outParams.isEmpty()) { + return cb.not(cb.upper(pathOfString(fieldPath)).in(outParams)); + } else { + return cb.not(fieldPath.in(transformedValues)); + + } + } - } - } - private Path getMapValueFieldPath(final A enumField, final Path fieldPath) { if (!enumField.isMap() || enumField.getValueFieldName() == null) { return fieldPath; @@ -509,7 +509,7 @@ public final class RSQLUtility { } @SuppressWarnings("unchecked") - private Predicate mapToMapPredicate(final ComparisonNode node, final Path fieldPath, + private Predicate mapToMapPredicate(final ComparisonNode node, final Path fieldPath, final A enumField) { if (!enumField.isMap()) { return null; @@ -517,10 +517,11 @@ public final class RSQLUtility { final String[] graph = node.getSelector().split("\\" + FieldNameProvider.SUB_ATTRIBUTE_SEPERATOR); final String keyValue = graph[graph.length - 1]; if (fieldPath instanceof MapJoin) { - //Currently we support only string key .So below cast is safe. - return cb.equal(cb.upper((Expression) (((MapJoin) fieldPath).key())), keyValue.toUpperCase()); + // Currently we support only string key .So below cast is safe. + return cb.equal(cb.upper((Expression) (((MapJoin) fieldPath).key())), + keyValue.toUpperCase()); } - + return cb.equal(cb.upper(fieldPath.get(enumField.getKeyFieldName())), keyValue.toUpperCase()); } @@ -532,9 +533,6 @@ public final class RSQLUtility { return cb.equal(fieldPath, transformedValue); } - - - private Predicate getNotEqualToPredicate(final Object transformedValue, final Path fieldPath) { if (transformedValue instanceof String) { final String preFormattedValue = escapeValueToSQL((String) transformedValue); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 22b00d372..43f5919ef 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.filtermanagement; - import java.util.concurrent.Executor; import javax.annotation.PostConstruct; @@ -122,7 +121,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private LayoutClickListener nameLayoutClickListner; private boolean validationFailed = false; - + /** * Initialize the Campaign Status History Header. */ @@ -148,20 +147,18 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final CustomFilterUIEvent custFUIEvent) { - if (custFUIEvent == CustomFilterUIEvent.TARGET_FILTER_DETAIL_VIEW) { - populateComponents(); - eventBus.publish(this, CustomFilterUIEvent.TARGET_DETAILS_VIEW); - } else if (custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { - setUpCaptionLayout(true); - resetComponents(); - } else if (custFUIEvent == CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON) { - UI.getCurrent().access(() -> updateStatusIconAfterTablePopulated()); - } - } + void onEvent(final CustomFilterUIEvent custFUIEvent) { + if (custFUIEvent == CustomFilterUIEvent.TARGET_FILTER_DETAIL_VIEW) { + populateComponents(); + eventBus.publish(this, CustomFilterUIEvent.TARGET_DETAILS_VIEW); + } else if (custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { + setUpCaptionLayout(true); + resetComponents(); + } else if (custFUIEvent == CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON) { + UI.getCurrent().access(() -> updateStatusIconAfterTablePopulated()); + } + } - - private void populateComponents() { if (filterManagementUIState.getTfQuery().isPresent()) { queryTextField.setValue(filterManagementUIState.getTfQuery().get().getQuery()); @@ -219,8 +216,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button closeIcon = createSearchResetIcon(); } - - + private TextField createNameTextField() { final TextField nameField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.customfiltername"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); @@ -337,13 +333,15 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } class StatusCircledAsync implements Runnable { - private UI current; - public StatusCircledAsync(UI current) { - this.current = current; - } - @Override + private final UI current; + + public StatusCircledAsync(final UI current) { + this.current = current; + } + + @Override public void run() { - UI.setCurrent(current); + UI.setCurrent(current); eventBus.publish(this, CustomFilterUIEvent.FILTER_TARGET_BY_QUERY); } } @@ -364,7 +362,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } enableDisableSaveButton(validationFailed, input); } else { - setInitialStatusIconStyle(validationIcon); + setInitialStatusIconStyle(validationIcon); filterManagementUIState.setFilterQueryValue(null); filterManagementUIState.setIsFilterByInvalidFilterQuery(Boolean.TRUE); } @@ -372,9 +370,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private void enableDisableSaveButton(final boolean validationFailed, final String query) { - if (validationFailed - || (isNameAndQueryEmpty(nameTextField.getValue(), query) || (query.equals(oldFilterQuery) && nameTextField - .getValue().equals(oldFilterName)))) { + if (validationFailed || (isNameAndQueryEmpty(nameTextField.getValue(), query) + || (query.equals(oldFilterQuery) && nameTextField.getValue().equals(oldFilterName)))) { saveButton.setEnabled(false); } else { if (hasSavePermission()) { @@ -390,10 +387,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button return false; } - private void showValidationSuccesIcon() { - validationIcon.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - validationIcon.setStyleName(SPUIStyleDefinitions.SUCCESS_ICON); + validationIcon.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); + validationIcon.setStyleName(SPUIStyleDefinitions.SUCCESS_ICON); } private void showValidationFailureIcon() { @@ -474,8 +470,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button targetFilterQuery.setName(nameTextField.getValue()); targetFilterQuery.setQuery(queryTextField.getValue()); targetFilterQueryManagement.createTargetFilterQuery(targetFilterQuery); - notification.displaySuccess(i18n.get("message.create.filter.success", - new Object[] { targetFilterQuery.getName() })); + notification.displaySuccess( + i18n.get("message.create.filter.success", new Object[] { targetFilterQuery.getName() })); eventBus.publish(this, CustomFilterUIEvent.CREATE_TARGET_FILTER_QUERY); } @@ -516,12 +512,12 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } return true; } - - private void updateStatusIconAfterTablePopulated() { - queryTextField.focus(); - if (!validationFailed && !Strings.isNullOrEmpty(queryTextField.getValue())) { - showValidationSuccesIcon(); - } - } + + private void updateStatusIconAfterTablePopulated() { + queryTextField.focus(); + if (!validationFailed && !Strings.isNullOrEmpty(queryTextField.getValue())) { + showValidationSuccesIcon(); + } + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java index 98ecfa304..ebeb95957 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java @@ -100,18 +100,16 @@ public class CreateOrUpdateFilterTable extends Table { || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { UI.getCurrent().access(() -> populateTableData()); } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { - UI.getCurrent().access(() -> onQuery()); + UI.getCurrent().access(() -> onQuery()); } } - - - private void restoreOnLoad() { + private void restoreOnLoad() { if (filterManagementUIState.isCreateFilterViewDisplayed()) { filterManagementUIState.setFilterQueryValue(null); } else { - filterManagementUIState.getTfQuery().ifPresent( - value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); + filterManagementUIState.getTfQuery() + .ifPresent(value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); } } @@ -127,8 +125,9 @@ public class CreateOrUpdateFilterTable extends Table { targetQF.setQueryConfiguration(queryConfig); // create lazy query container with lazy defination and query - final LazyQueryContainer targetTableContainer = new LazyQueryContainer(new LazyQueryDefinition(true, - SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), targetQF); + final LazyQueryContainer targetTableContainer = new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), + targetQF); targetTableContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); return targetTableContainer; @@ -181,16 +180,16 @@ public class CreateOrUpdateFilterTable extends Table { private List getVisbleColumns() { final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"),0.15f)); + columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.15f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, i18n - .get("header.assigned.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, i18n - .get("header.installed.ds"), 0.125F)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, + i18n.get("header.assigned.ds"), 0.125F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.125F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); return columnList; @@ -198,8 +197,8 @@ public class CreateOrUpdateFilterTable extends Table { private Component getStatusIcon(final Object itemId) { final Item row1 = getItem(itemId); - final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1.getItemProperty( - SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); + final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 + .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); label.setContentMode(ContentMode.HTML); if (targetStatus == TargetUpdateStatus.PENDING) { @@ -240,9 +239,9 @@ public class CreateOrUpdateFilterTable extends Table { protected void addCustomGeneratedColumns() { addGeneratedColumn(SPUILabelDefinitions.STATUS_ICON, (source, itemId, columnId) -> getStatusIcon(itemId)); } - + private void onQuery() { - populateTableData(); + populateTableData(); eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); - } + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java index 400124b6f..bf5fdbe54 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java @@ -32,8 +32,8 @@ import org.vaadin.addons.lazyquerycontainer.QueryDefinition; import com.google.common.base.Strings; /** - * Simple implementation of generics bean query which dynamically loads {@link ProxyTarget} batch - * of beans. + * Simple implementation of generics bean query which dynamically loads + * {@link ProxyTarget} batch of beans. * */ public class CustomTargetBeanQuery extends AbstractBeanQuery { @@ -163,7 +163,7 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { */ @Override public int size() { - long size=0; + long size = 0; if (!Strings.isNullOrEmpty(filterQuery)) { size = getTargetManagement().countTargetByTargetFilterQuery(filterQuery); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java index ab0161b37..322d32a45 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java @@ -71,7 +71,7 @@ public class TargetFilterCountMessageLabel extends Label { if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK || custFUIEvent == CustomFilterUIEvent.EXIT_CREATE_OR_UPDATE_FILTRER_VIEW - ||custFUIEvent == CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON) { + || custFUIEvent == CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON) { UI.getCurrent().access(() -> displayTargetFilterMessage()); } }