New event strategy (#380)

* Add notfication overview for remote events

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Refactor css for notification button

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Remove todo

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* - Style notfication button (css) 
- Add i18n message keys
- Add switch slider for auto refresh event

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Insert Label in MenuItem for displaying occurred events

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* - Style notfication button (css) 
- Add i18n message keys
- Add switch slider for auto refresh event
- Insert Label in MenuItem for displaying occurred events

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Solve merge conflicts and add menu item counter

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* CSS refactor

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Adapt JUnit test for events, because constructor is changed

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Skip delete event

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* - Insert Id for notification menu

- Enable push mechanism for target and ds tag and add notfications

- Fix several typos

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Add update ui events for tags and add different id's for menue item

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Insert push for SoftwareModule

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Set button enablement

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Add Software module update push event
Add unit test software module push events
Adapt test for software push event

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Close window and set pop id
Update the target table to set the new icon

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* - several code improvements
- Correct license header

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Update vaadin version
Rename the base entity and redefine constructors
unread counter was not correct

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Closebox of notificationButton is invisible: 
Insert height for HorizontalLayout of NotificationUnreadButton

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Add software modules to the new event types

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Introduce animation in unreadNotificationButton

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Fix close  on safari

Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>

* Add publish events direct to the tag entities.


Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>
This commit is contained in:
Melanie Retter
2016-12-19 16:05:23 +01:00
committed by Kai Zimmermann
parent ccc23bf634
commit 2dec35915c
115 changed files with 1891 additions and 726 deletions

View File

@@ -274,8 +274,10 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
distributionSetRepository.deleteByIdIn(toHardDelete);
}
Arrays.stream(distributionSetIDs).forEach(dsId -> eventPublisher.publishEvent(
new DistributionSetDeletedEvent(tenantAware.getCurrentTenant(), dsId, applicationContext.getId())));
Arrays.stream(distributionSetIDs)
.forEach(dsId -> eventPublisher
.publishEvent(new DistributionSetDeletedEvent(tenantAware.getCurrentTenant(), dsId,
JpaDistributionSet.class.getName(), applicationContext.getId())));
}
@Override

View File

@@ -19,27 +19,16 @@ import org.eclipse.hawkbit.repository.TagManagement;
import org.eclipse.hawkbit.repository.builder.GenericTagUpdate;
import org.eclipse.hawkbit.repository.builder.TagCreate;
import org.eclipse.hawkbit.repository.builder.TagUpdate;
import org.eclipse.hawkbit.repository.event.remote.DistributionSetTagDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.TargetTagDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdateEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdateEvent;
import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException;
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
import org.eclipse.hawkbit.repository.jpa.builder.JpaTagCreate;
import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor;
import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag;
import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag;
import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility;
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
import org.eclipse.hawkbit.repository.model.TargetTag;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer;
import org.eclipse.hawkbit.tenancy.TenantAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
@@ -69,18 +58,6 @@ public class JpaTagManagement implements TagManagement {
@Autowired
private DistributionSetRepository distributionSetRepository;
@Autowired
private ApplicationEventPublisher eventPublisher;
@Autowired
private ApplicationContext applicationContext;
@Autowired
private AfterTransactionCommitExecutor afterCommit;
@Autowired
private TenantAware tenantAware;
@Autowired
private VirtualPropertyReplacer virtualPropertyReplacer;
@@ -100,12 +77,7 @@ public class JpaTagManagement implements TagManagement {
throw new EntityAlreadyExistsException();
}
final TargetTag save = targetTagRepository.save(targetTag);
afterCommit.afterCommit(
() -> eventPublisher.publishEvent(new TargetTagCreatedEvent(save, applicationContext.getId())));
return save;
return targetTagRepository.save(targetTag);
}
@Override
@@ -115,11 +87,8 @@ public class JpaTagManagement implements TagManagement {
@SuppressWarnings({ "unchecked", "rawtypes" })
final Collection<JpaTagCreate> targetTags = (Collection) tt;
final List<TargetTag> save = Collections.unmodifiableList(targetTags.stream()
return Collections.unmodifiableList(targetTags.stream()
.map(ttc -> targetTagRepository.save(ttc.buildTargetTag())).collect(Collectors.toList()));
afterCommit.afterCommit(() -> save.forEach(
tag -> eventPublisher.publishEvent(new TargetTagCreatedEvent(tag, applicationContext.getId()))));
return save;
}
@Override
@@ -136,9 +105,6 @@ public class JpaTagManagement implements TagManagement {
// finally delete the tag itself
targetTagRepository.deleteByName(targetTagName);
afterCommit.afterCommit(() -> eventPublisher.publishEvent(
new TargetTagDeletedEvent(tenantAware.getCurrentTenant(), tag.getId(), applicationContext.getId())));
}
@Override
@@ -180,10 +146,7 @@ public class JpaTagManagement implements TagManagement {
update.getDescription().ifPresent(tag::setDescription);
update.getColour().ifPresent(tag::setColour);
final TargetTag save = targetTagRepository.save(tag);
afterCommit.afterCommit(() -> eventPublisher
.publishEvent(new TargetTagUpdateEvent(save, EventPublisherHolder.getInstance().getApplicationId())));
return save;
return targetTagRepository.save(tag);
}
@Override
@@ -200,10 +163,7 @@ public class JpaTagManagement implements TagManagement {
update.getDescription().ifPresent(tag::setDescription);
update.getColour().ifPresent(tag::setColour);
final DistributionSetTag save = distributionSetTagRepository.save(tag);
afterCommit.afterCommit(() -> eventPublisher.publishEvent(
new DistributionSetTagUpdateEvent(save, EventPublisherHolder.getInstance().getApplicationId())));
return save;
return distributionSetTagRepository.save(tag);
}
@Override
@@ -223,11 +183,7 @@ public class JpaTagManagement implements TagManagement {
throw new EntityAlreadyExistsException();
}
final DistributionSetTag save = distributionSetTagRepository.save(distributionSetTag);
afterCommit.afterCommit(() -> eventPublisher
.publishEvent(new DistributionSetTagCreatedEvent(save, applicationContext.getId())));
return save;
return distributionSetTagRepository.save(distributionSetTag);
}
@Override
@@ -238,12 +194,9 @@ public class JpaTagManagement implements TagManagement {
@SuppressWarnings({ "rawtypes", "unchecked" })
final Collection<JpaTagCreate> creates = (Collection) dst;
final List<DistributionSetTag> save = Collections.unmodifiableList(
return Collections.unmodifiableList(
creates.stream().map(create -> distributionSetTagRepository.save(create.buildDistributionSetTag()))
.collect(Collectors.toList()));
afterCommit.afterCommit(() -> save.forEach(tag -> eventPublisher
.publishEvent(new DistributionSetTagCreatedEvent(tag, applicationContext.getId()))));
return save;
}
@Override
@@ -258,10 +211,6 @@ public class JpaTagManagement implements TagManagement {
});
distributionSetTagRepository.deleteByName(tagName);
afterCommit.afterCommit(
() -> eventPublisher.publishEvent(new DistributionSetTagDeletedEvent(tenantAware.getCurrentTenant(),
tag.getId(), applicationContext.getId())));
}
@Override

View File

@@ -216,8 +216,8 @@ public class JpaTargetManagement implements TargetManagement {
public void deleteTargets(final Collection<Long> targetIDs) {
targetRepository.deleteByIdIn(targetIDs);
targetIDs.forEach(targetId -> eventPublisher.publishEvent(
new TargetDeletedEvent(tenantAware.getCurrentTenant(), targetId, applicationContext.getId())));
targetIDs.forEach(targetId -> eventPublisher.publishEvent(new TargetDeletedEvent(tenantAware.getCurrentTenant(),
targetId, JpaTarget.class.getName(), applicationContext.getId())));
}
@Override

View File

@@ -347,14 +347,14 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen
new DistributionSetUpdateEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
if (isSoftDeleted(descriptorEvent)) {
publishEventWithEventPublisher(new DistributionSetDeletedEvent(getTenant(), getId(),
publishEventWithEventPublisher(new DistributionSetDeletedEvent(getTenant(), getId(), getClass().getName(),
EventPublisherHolder.getInstance().getApplicationId()));
}
}
@Override
public void fireDeleteEvent(final DescriptorEvent descriptorEvent) {
publishEventWithEventPublisher(new DistributionSetDeletedEvent(getTenant(), getId(),
publishEventWithEventPublisher(new DistributionSetDeletedEvent(getTenant(), getId(), getClass().getName(),
EventPublisherHolder.getInstance().getApplicationId()));
}

View File

@@ -18,8 +18,13 @@ import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.hawkbit.repository.event.remote.DistributionSetTagDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdateEvent;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.descriptors.DescriptorEvent;
/**
* A {@link DistributionSetTag} is used to describe DistributionSet attributes
@@ -30,7 +35,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag;
@Table(name = "sp_distributionset_tag", indexes = {
@Index(name = "sp_idx_distribution_set_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = {
"name", "tenant" }, name = "uk_ds_tag"))
public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag {
public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag, EventAwareEntity {
private static final long serialVersionUID = 1L;
@ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY)
@@ -75,4 +80,24 @@ public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag
return Collections.unmodifiableList(assignedToDistributionSet);
}
@Override
public void fireCreateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(
new DistributionSetTagCreatedEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireUpdateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(
new DistributionSetTagUpdateEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireDeleteEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(new DistributionSetTagDeletedEvent(
getTenant(), getId(), getClass().getName(), EventPublisherHolder.getInstance().getApplicationId()));
}
}

View File

@@ -30,12 +30,17 @@ import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.eclipse.hawkbit.repository.event.remote.SoftwareModuleDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.SoftwareModuleCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.SoftwareModuleUpdatedEvent;
import org.eclipse.hawkbit.repository.model.Artifact;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.descriptors.DescriptorEvent;
/**
* Base Software Module that is supported by OS level provisioning mechanism on
@@ -52,7 +57,7 @@ import org.eclipse.persistence.annotations.CascadeOnDelete;
// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for
// sub entities
@SuppressWarnings("squid:S2160")
public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implements SoftwareModule {
public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implements SoftwareModule, EventAwareEntity {
private static final long serialVersionUID = 1L;
@ManyToOne
@@ -191,4 +196,22 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement
return Collections.unmodifiableList(assignedTo);
}
@Override
public void fireCreateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(
new SoftwareModuleCreatedEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireUpdateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(
new SoftwareModuleUpdatedEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireDeleteEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(new SoftwareModuleDeletedEvent(getTenant(),
getId(), getClass().getName(), EventPublisherHolder.getInstance().getApplicationId()));
}
}

View File

@@ -289,7 +289,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable<Lon
@Override
public void fireDeleteEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(
new TargetDeletedEvent(getTenant(), getId(), EventPublisherHolder.getInstance().getApplicationId()));
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(new TargetDeletedEvent(getTenant(), getId(),
getClass().getName(), EventPublisherHolder.getInstance().getApplicationId()));
}
}

View File

@@ -18,8 +18,13 @@ import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.hawkbit.repository.event.remote.TargetTagDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdateEvent;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetTag;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.descriptors.DescriptorEvent;
/**
* A {@link TargetTag} is used to describe Target attributes and use them also
@@ -30,7 +35,7 @@ import org.eclipse.hawkbit.repository.model.TargetTag;
@Table(name = "sp_target_tag", indexes = {
@Index(name = "sp_idx_target_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = {
"name", "tenant" }, name = "uk_targ_tag"))
public class JpaTargetTag extends JpaTag implements TargetTag {
public class JpaTargetTag extends JpaTag implements TargetTag, EventAwareEntity {
private static final long serialVersionUID = 1L;
@ManyToMany(mappedBy = "tags", targetEntity = JpaTarget.class, fetch = FetchType.LAZY)
@@ -73,4 +78,24 @@ public class JpaTargetTag extends JpaTag implements TargetTag {
return Collections.unmodifiableList(assignedToTargets);
}
@Override
public void fireCreateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher()
.publishEvent(new TargetTagCreatedEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireUpdateEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher()
.publishEvent(new TargetTagUpdateEvent(this, EventPublisherHolder.getInstance().getApplicationId()));
}
@Override
public void fireDeleteEvent(final DescriptorEvent descriptorEvent) {
EventPublisherHolder.getInstance().getEventPublisher().publishEvent(new TargetTagDeletedEvent(getTenant(),
getId(), getClass().getName(), EventPublisherHolder.getInstance().getApplicationId()));
}
}