From 72d09c3e8ea0e98fa496abe06c74d7bd11752057 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Mon, 12 Nov 2018 13:52:50 +0100 Subject: [PATCH] Store old entity or Map of changes with update and change events A new event for full updates has been added. --- .../thm/arsnova/event/AfterFullUpdateEvent.java | 16 ++++++++++++++++ .../de/thm/arsnova/event/AfterPatchEvent.java | 11 ++++++++++- .../de/thm/arsnova/event/AfterUpdateEvent.java | 2 +- .../thm/arsnova/event/BeforeFullUpdateEvent.java | 16 ++++++++++++++++ .../de/thm/arsnova/event/BeforePatchEvent.java | 11 ++++++++++- .../de/thm/arsnova/event/BeforeUpdateEvent.java | 2 +- .../service/DefaultEntityServiceImpl.java | 14 +++++++------- 7 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 src/main/java/de/thm/arsnova/event/AfterFullUpdateEvent.java create mode 100644 src/main/java/de/thm/arsnova/event/BeforeFullUpdateEvent.java diff --git a/src/main/java/de/thm/arsnova/event/AfterFullUpdateEvent.java b/src/main/java/de/thm/arsnova/event/AfterFullUpdateEvent.java new file mode 100644 index 000000000..3d944d51c --- /dev/null +++ b/src/main/java/de/thm/arsnova/event/AfterFullUpdateEvent.java @@ -0,0 +1,16 @@ +package de.thm.arsnova.event; + +import de.thm.arsnova.model.Entity; + +public class AfterFullUpdateEvent<E extends Entity> extends AfterUpdateEvent<E> { + private final E oldEntity; + + public AfterFullUpdateEvent(final Object source, final E entity, final E oldEntity) { + super(source, entity); + this.oldEntity = oldEntity; + } + + public E getOldEntity() { + return oldEntity; + } +} diff --git a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java index 4b73660d3..847bca9e9 100644 --- a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java @@ -2,8 +2,17 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; +import java.util.Map; + public class AfterPatchEvent<E extends Entity> extends AfterUpdateEvent<E> { - public AfterPatchEvent(final Object source, final E entity) { + private final Map<String, Object> changes; + + public AfterPatchEvent(final Object source, final E entity, final Map<String, Object> changes) { super(source, entity); + this.changes = changes; + } + + public Map<String, Object> getChanges() { + return changes; } } diff --git a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java index 702173630..7920b79d2 100644 --- a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java @@ -2,7 +2,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; -public class AfterUpdateEvent<E extends Entity> extends CrudEvent<E> { +public abstract class AfterUpdateEvent<E extends Entity> extends CrudEvent<E> { public AfterUpdateEvent(final Object source, final E entity) { super(source, entity); } diff --git a/src/main/java/de/thm/arsnova/event/BeforeFullUpdateEvent.java b/src/main/java/de/thm/arsnova/event/BeforeFullUpdateEvent.java new file mode 100644 index 000000000..851416339 --- /dev/null +++ b/src/main/java/de/thm/arsnova/event/BeforeFullUpdateEvent.java @@ -0,0 +1,16 @@ +package de.thm.arsnova.event; + +import de.thm.arsnova.model.Entity; + +public class BeforeFullUpdateEvent<E extends Entity> extends BeforeUpdateEvent<E> { + private final E oldEntity; + + public BeforeFullUpdateEvent(final Object source, final E entity, final E oldEntity) { + super(source, entity); + this.oldEntity = oldEntity; + } + + public E getOldEntity() { + return oldEntity; + } +} diff --git a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java index 82eee8540..717d14f98 100644 --- a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java @@ -2,8 +2,17 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; +import java.util.Map; + public class BeforePatchEvent<E extends Entity> extends BeforeUpdateEvent<E> { - public BeforePatchEvent(final Object source, final E entity) { + private final Map<String, Object> changes; + + public BeforePatchEvent(final Object source, final E entity, final Map<String, Object> changes) { super(source, entity); + this.changes = changes; + } + + public Map<String, Object> getChanges() { + return changes; } } diff --git a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java index 65fc96e10..f5964dce9 100644 --- a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java @@ -2,7 +2,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; -public class BeforeUpdateEvent<E extends Entity> extends CrudEvent<E> { +public abstract class BeforeUpdateEvent<E extends Entity> extends CrudEvent<E> { public BeforeUpdateEvent(final Object source, final E entity) { super(source, entity); } diff --git a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java index e2f2d0272..114c0be10 100644 --- a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java @@ -22,12 +22,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import de.thm.arsnova.event.AfterCreationEvent; import de.thm.arsnova.event.AfterDeletionEvent; +import de.thm.arsnova.event.AfterFullUpdateEvent; import de.thm.arsnova.event.AfterPatchEvent; -import de.thm.arsnova.event.AfterUpdateEvent; import de.thm.arsnova.event.BeforeCreationEvent; import de.thm.arsnova.event.BeforeDeletionEvent; +import de.thm.arsnova.event.BeforeFullUpdateEvent; import de.thm.arsnova.event.BeforePatchEvent; -import de.thm.arsnova.event.BeforeUpdateEvent; import de.thm.arsnova.model.Entity; import de.thm.arsnova.model.serialization.View; import de.thm.arsnova.persistence.CrudRepository; @@ -130,9 +130,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService newEntity.setUpdateTimestamp(new Date()); prepareUpdate(newEntity); - eventPublisher.publishEvent(new BeforeUpdateEvent<>(this, newEntity)); + eventPublisher.publishEvent(new BeforeFullUpdateEvent<>(this, newEntity, oldEntity)); final T updatedEntity = repository.save(newEntity); - eventPublisher.publishEvent(new AfterUpdateEvent<>(this, updatedEntity)); + eventPublisher.publishEvent(new AfterFullUpdateEvent<>(this, updatedEntity, oldEntity)); finalizeUpdate(updatedEntity); return updatedEntity; @@ -171,9 +171,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService reader.readValue(tree); entity.setUpdateTimestamp(new Date()); preparePatch(entity); - eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity)); + eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity, changes)); final T patchedEntity = repository.save(entity); - eventPublisher.publishEvent(new AfterPatchEvent<>(this, patchedEntity)); + eventPublisher.publishEvent(new AfterPatchEvent<>(this, patchedEntity, changes)); return patchedEntity; } @@ -194,7 +194,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService reader.readValue(tree); entity.setUpdateTimestamp(new Date()); preparePatch(entity); - eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity)); + eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity, changes)); } return repository.saveAll(entities); -- GitLab