diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEvent.java index 842508d7a..ae8fa5b03 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEvent.java @@ -18,6 +18,8 @@ public class DistributionSetUpdatedEvent extends RemoteEntityEventtrue if {@link DistributionSet} is after the + * update {@link DistributionSet#isComplete()} */ - public DistributionSetUpdatedEvent(final DistributionSet ds, final String applicationId) { + public DistributionSetUpdatedEvent(final DistributionSet ds, final String applicationId, final boolean complete) { super(ds, applicationId); + this.complete = complete; } + + /** + * @return true if {@link DistributionSet} is after the update + * {@link DistributionSet#isComplete()} + */ + public boolean isComplete() { + return complete; + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java index 4c901ddfb..7917b7afc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -338,7 +338,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen public void fireUpdateEvent(final DescriptorEvent descriptorEvent) { publishEventWithEventPublisher( - new DistributionSetUpdatedEvent(this, EventPublisherHolder.getInstance().getApplicationId())); + new DistributionSetUpdatedEvent(this, EventPublisherHolder.getInstance().getApplicationId(), complete)); if (isSoftDeleted(descriptorEvent)) { publishEventWithEventPublisher(new DistributionSetDeletedEvent(getTenant(), getId(), getClass().getName(), diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetCreatedEventTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetCreatedEventTest.java new file mode 100644 index 000000000..c50fb68be --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetCreatedEventTest.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.event.remote.entity; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.junit.Test; + +import ru.yandex.qatools.allure.annotations.Description; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +/** + * Test the remote entity events. + */ +@Features("Component Tests - Repository") +@Stories("Test DistributionSetCreatedEvent") +public class DistributionSetCreatedEventTest extends AbstractRemoteEntityEventTest { + + @Test + @Description("Verifies that the distribution set entity reloading by remote created event works") + public void testDistributionSetCreatedEvent() { + assertAndCreateRemoteEvent(DistributionSetCreatedEvent.class); + } + + @Override + protected DistributionSet createEntity() { + return distributionSetManagement.createDistributionSet(entityFactory.distributionSet().create() + .name("incomplete").version("2").description("incomplete").type("os")); + } + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetEventTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEventTest.java similarity index 75% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetEventTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEventTest.java index 2bd8f0d48..d7660b698 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetEventTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/DistributionSetUpdatedEventTest.java @@ -19,14 +19,8 @@ import ru.yandex.qatools.allure.annotations.Stories; * Test the remote entity events. */ @Features("Component Tests - Repository") -@Stories("Test DistributionSetCreatedEvent and DistributionSetUpdateEvent") -public class DistributionSetEventTest extends AbstractRemoteEntityEventTest { - - @Test - @Description("Verifies that the distribution set entity reloading by remote created event works") - public void testDistributionSetCreatedEvent() { - assertAndCreateRemoteEvent(DistributionSetCreatedEvent.class); - } +@Stories("Test DistributionSetUpdateEvent") +public class DistributionSetUpdatedEventTest extends AbstractRemoteEntityEventTest { @Test @Description("Verifies that the distribution set entity reloading by remote updated event works") @@ -34,6 +28,13 @@ public class DistributionSetEventTest extends AbstractRemoteEntityEventTest createRemoteEvent(final DistributionSet baseEntity, + final Class> eventType) { + + return new DistributionSetUpdatedEvent(baseEntity, "1", true); + } + @Override protected DistributionSet createEntity() { return distributionSetManagement.createDistributionSet(entityFactory.distributionSet().create() 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 6bc24a1ae..923455e66 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import org.eclipse.hawkbit.repository.SoftwareModuleManagement; @@ -175,6 +176,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable visibleItemIds = (List) getVisibleItemIds(); eventContainer.getEvents().stream().filter(event -> visibleItemIds.contains(event.getEntityId())) + .filter(Objects::nonNull) .forEach(event -> updateSoftwareModuleInTable(event.getEntity())); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java index 3c8e54a62..68d958fbe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java @@ -9,8 +9,10 @@ package org.eclipse.hawkbit.ui.common.tagdetails; import java.util.List; +import java.util.Objects; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdatedEvent; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.ui.SpPermissionChecker; @@ -46,7 +48,8 @@ public abstract class AbstractTargetTagToken extends Abstr @EventBusListenerMethod(scope = EventScope.UI) void onEventTargetTagCreated(final TargetTagCreatedEventContainer container) { - container.getEvents().stream().map(event -> event.getEntity()) + container.getEvents().stream().filter(Objects::nonNull) + .map(TargetTagCreatedEvent::getEntity) .forEach(tag -> setContainerPropertValues(tag.getId(), tag.getName(), tag.getColour())); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index 0ee3a10c4..e8e169653 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -9,10 +9,13 @@ package org.eclipse.hawkbit.ui.common.tagdetails; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent; +import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdatedEvent; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; @@ -126,7 +129,8 @@ public class DistributionTagToken extends AbstractTagToken { @EventBusListenerMethod(scope = EventScope.UI) void onDistributionSetTagCreatedBulkEvent(final DistributionSetTagCreatedEventContainer eventContainer) { - eventContainer.getEvents().stream().map(event -> event.getEntity()) + eventContainer.getEvents().stream().filter(Objects::nonNull) + .map(DistributionSetTagCreatedEvent::getEntity) .forEach(distributionSetTag -> setContainerPropertValues(distributionSetTag.getId(), distributionSetTag.getName(), distributionSetTag.getColour())); } @@ -139,12 +143,13 @@ public class DistributionTagToken extends AbstractTagToken { @EventBusListenerMethod(scope = EventScope.UI) void onDistributionSetTagUpdateEvent(final DistributionSetTagUpdatedEventContainer eventContainer) { - eventContainer.getEvents().stream().map(event -> event.getEntity()).forEach(entity -> { - final Item item = container.getItem(entity.getId()); - if (item != null) { - updateItem(entity.getName(), entity.getColour(), item); - } - }); + eventContainer.getEvents().stream().filter(Objects::nonNull) + .map(DistributionSetTagUpdatedEvent::getEntity).forEach(entity -> { + final Item item = container.getItem(entity.getId()); + if (item != null) { + updateItem(entity.getName(), entity.getColour(), item); + } + }); } private void processTargetTagAssigmentResult(final DistributionSetTagAssignmentResult assignmentResult) { 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 7ab6ba590..774f1f967 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 @@ -13,6 +13,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -121,7 +122,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable events) { manageDistUIState.getLastSelectedDistribution() - .ifPresent(lastSelectedDsIdName -> events.stream() + .ifPresent(lastSelectedDsIdName -> events.stream().filter(Objects::nonNull) .filter(event -> event.getEntityId().equals(lastSelectedDsIdName)).findAny() .ifPresent(event -> eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, event.getEntity())))); @@ -130,7 +131,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable events, final List visibleItemIds) { events.stream().filter(event -> visibleItemIds.contains(event.getEntityId())) - .filter(event -> event.getEntity().isComplete()) + .filter(DistributionSetUpdatedEvent::isComplete).filter(Objects::nonNull) .forEach(event -> updateDistributionInTable(event.getEntity())); } 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 3ae51ec56..2efa2ca7b 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.distributions.smtable; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -134,13 +135,15 @@ public class SwModuleTable extends AbstractNamedVersionTable { final List visibleItemIds = (List) getVisibleItemIds(); handleSelectedAndUpdatedSoftwareModules(eventContainer.getEvents()); eventContainer.getEvents().stream().filter(event -> visibleItemIds.contains(event.getEntityId())) + .filter(Objects::nonNull) .forEach(event -> updateSoftwareModuleInTable(event.getEntity())); } private void handleSelectedAndUpdatedSoftwareModules(final List events) { manageDistUIState.getLastSelectedSoftwareModule() .ifPresent(lastSelectedModuleId -> events.stream() - .filter(event -> lastSelectedModuleId.equals(event.getEntityId())).findAny() + .filter(event -> lastSelectedModuleId.equals(event.getEntityId())) + .filter(Objects::nonNull).findAny() .ifPresent(lastEvent -> eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.SELECTED_ENTITY, lastEvent.getEntity())))); } 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 ad3030dd9..7a984c221 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 @@ -13,6 +13,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -87,9 +88,9 @@ public class DistributionTable extends AbstractNamedVersionTable event.getEntityId().equals(lastSelectedDsIdName)).findAny() - .ifPresent(event -> eventBus.publish(this, + eventContainer.getEvents().stream().filter(event -> event.getEntityId().equals(lastSelectedDsIdName)) + .filter(Objects::nonNull).findAny().ifPresent(event -> eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, event.getEntity()))); } private static boolean allOfThemAffectCompletedSetsThatAreNotVisible(final List events, final List visibleItemIds) { - return events.stream() - .allMatch(event -> !visibleItemIds.contains(event.getEntityId()) && event.getEntity().isComplete()); + return events.stream().allMatch(event -> !visibleItemIds.contains(event.getEntityId()) && event.isComplete()); } private void updateVisableTableEntries(final List events, final List visibleItemIds) { events.stream().filter(event -> visibleItemIds.contains(event.getEntityId())) - .filter(event -> event.getEntity().isComplete()) + .filter(DistributionSetUpdatedEvent::isComplete).filter(Objects::nonNull) .forEach(event -> updateDistributionInTable(event.getEntity())); } private boolean checkAndHandleIfVisibleDsSwitchesFromCompleteToIncomplete( final List events, final List visibleItemIds) { final List setsThatAreVisibleButNotCompleteAnymore = events.stream() - .filter(event -> visibleItemIds.contains(event.getEntityId())) - .filter(event -> !event.getEntity().isComplete()).map(DistributionSetUpdatedEvent::getEntityId) - .collect(Collectors.toList()); + .filter(event -> visibleItemIds.contains(event.getEntityId())).filter(event -> !event.isComplete()) + .map(DistributionSetUpdatedEvent::getEntityId).collect(Collectors.toList()); if (!setsThatAreVisibleButNotCompleteAnymore.isEmpty()) { refreshContainer(); 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 54cbe8fb6..3bd7c91f7 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 @@ -152,7 +152,7 @@ public class TargetTable extends AbstractTable { refreshTargets(); } else { eventContainer.getEvents().stream().filter(event -> visibleItemIds.contains(event.getEntityId())) - .filter(event -> !Objects.isNull(event.getEntity())) + .filter(Objects::nonNull) .forEach(event -> updateVisibleItemOnEvent(event.getEntity())); } publishTargetSelectedEntityForRefresh(eventContainer.getEvents().stream()); @@ -160,8 +160,8 @@ public class TargetTable extends AbstractTable { private void publishTargetSelectedEntityForRefresh( final Stream> targetEntityEventStream) { - targetEntityEventStream.filter(event -> isLastSelectedTarget(event.getEntityId())).findAny() - .ifPresent(event -> eventBus.publish(this, + targetEntityEventStream.filter(event -> isLastSelectedTarget(event.getEntityId())) + .filter(Objects::nonNull).findAny().ifPresent(event -> eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.SELECTED_ENTITY, event.getEntity()))); }