From 78f600543ee940b0cd267e67d146d96aabe4f112 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Mon, 12 Nov 2018 12:01:56 +0100 Subject: [PATCH] Use publishing class as source for CrudEvents The entity is now stored in a separate property. --- .../thm/arsnova/event/AfterCreationEvent.java | 4 ++-- .../thm/arsnova/event/AfterDeletionEvent.java | 4 ++-- .../de/thm/arsnova/event/AfterPatchEvent.java | 4 ++-- .../de/thm/arsnova/event/AfterUpdateEvent.java | 4 ++-- .../thm/arsnova/event/BeforeCreationEvent.java | 4 ++-- .../thm/arsnova/event/BeforeDeletionEvent.java | 4 ++-- .../de/thm/arsnova/event/BeforePatchEvent.java | 4 ++-- .../thm/arsnova/event/BeforeUpdateEvent.java | 4 ++-- .../java/de/thm/arsnova/event/CrudEvent.java | 10 ++++++---- .../thm/arsnova/service/AnswerServiceImpl.java | 8 ++++---- .../arsnova/service/CommentServiceImpl.java | 4 ++-- .../arsnova/service/ContentServiceImpl.java | 8 ++++---- .../service/DefaultEntityServiceImpl.java | 18 +++++++++--------- .../thm/arsnova/service/RoomServiceImpl.java | 4 ++-- .../score/ScoreCalculatorFactoryImpl.java | 8 ++++---- .../websocket/ArsnovaSocketioServerImpl.java | 14 +++++++------- 16 files changed, 54 insertions(+), 52 deletions(-) diff --git a/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java b/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java index 6f99fd855..5267b6d2e 100644 --- a/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class AfterCreationEvent<E extends Entity> extends CrudEvent<E> { - public AfterCreationEvent(final E source) { - super(source); + public AfterCreationEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java b/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java index 67893207a..34115a744 100644 --- a/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class AfterDeletionEvent<E extends Entity> extends CrudEvent<E> { - public AfterDeletionEvent(final E source) { - super(source); + public AfterDeletionEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java index 263821074..4b73660d3 100644 --- a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class AfterPatchEvent<E extends Entity> extends AfterUpdateEvent<E> { - public AfterPatchEvent(final E source) { - super(source); + public AfterPatchEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java index b30f3958a..702173630 100644 --- a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java +++ b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class AfterUpdateEvent<E extends Entity> extends CrudEvent<E> { - public AfterUpdateEvent(final E source) { - super(source); + public AfterUpdateEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java b/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java index 42d5524f3..7235cb4c7 100644 --- a/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class BeforeCreationEvent<E extends Entity> extends CrudEvent<E> { - public BeforeCreationEvent(final E source) { - super(source); + public BeforeCreationEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java b/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java index 0a13bef26..fac150106 100644 --- a/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class BeforeDeletionEvent<E extends Entity> extends CrudEvent<E> { - public BeforeDeletionEvent(final E source) { - super(source); + public BeforeDeletionEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java index 871dc6bfd..82eee8540 100644 --- a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class BeforePatchEvent<E extends Entity> extends BeforeUpdateEvent<E> { - public BeforePatchEvent(final E source) { - super(source); + public BeforePatchEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java index 81c74e675..65fc96e10 100644 --- a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java +++ b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java @@ -3,7 +3,7 @@ package de.thm.arsnova.event; import de.thm.arsnova.model.Entity; public class BeforeUpdateEvent<E extends Entity> extends CrudEvent<E> { - public BeforeUpdateEvent(final E source) { - super(source); + public BeforeUpdateEvent(final Object source, final E entity) { + super(source, entity); } } diff --git a/src/main/java/de/thm/arsnova/event/CrudEvent.java b/src/main/java/de/thm/arsnova/event/CrudEvent.java index 07d3bbb6f..e95cdea65 100644 --- a/src/main/java/de/thm/arsnova/event/CrudEvent.java +++ b/src/main/java/de/thm/arsnova/event/CrudEvent.java @@ -6,13 +6,15 @@ import org.springframework.core.ResolvableType; import org.springframework.core.ResolvableTypeProvider; public abstract class CrudEvent<E extends Entity> extends ApplicationEvent implements ResolvableTypeProvider { - public CrudEvent(final E source) { + private E entity; + + public CrudEvent(final Object source, final E entity) { super(source); + this.entity = entity; } - @Override - public E getSource() { - return (E) super.getSource(); + public E getEntity() { + return entity; } @Override diff --git a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java index fdbe22ff3..bc0b146cb 100644 --- a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java @@ -96,11 +96,11 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> implemen } try { for (AnswerQueueElement e : elements) { - this.eventPublisher.publishEvent(new BeforeCreationEvent<>(e.getAnswer())); + this.eventPublisher.publishEvent(new BeforeCreationEvent<>(this, e.getAnswer())); } answerRepository.saveAll(answerList); for (AnswerQueueElement e : elements) { - this.eventPublisher.publishEvent(new AfterCreationEvent<>(e.getAnswer())); + this.eventPublisher.publishEvent(new AfterCreationEvent<>(this, e.getAnswer())); } } catch (final DbAccessException e) { logger.error("Could not bulk save answers from queue.", e); @@ -375,9 +375,9 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> implemen answer.setCreatorId(user.getId()); answer.setContentId(content.getId()); answer.setRoomId(room.getId()); - this.eventPublisher.publishEvent(new BeforeCreationEvent<>(realAnswer)); + this.eventPublisher.publishEvent(new BeforeCreationEvent<>(this, realAnswer)); answerRepository.save(realAnswer); - this.eventPublisher.publishEvent(new AfterCreationEvent<>(realAnswer)); + this.eventPublisher.publishEvent(new AfterCreationEvent<>(this, realAnswer)); return answer; } diff --git a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java index 48f055635..91e7708ef 100644 --- a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java @@ -65,9 +65,9 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem if (comment == null) { throw new NotFoundException(); } - eventPublisher.publishEvent(new BeforeDeletionEvent<>(comment)); + eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, comment)); commentRepository.delete(comment); - eventPublisher.publishEvent(new AfterDeletionEvent<>(comment)); + eventPublisher.publishEvent(new AfterDeletionEvent<>(this, comment)); } @Override diff --git a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java index f905d2b1a..fab8488d6 100644 --- a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java @@ -194,9 +194,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem newGroup.setContentIds(newContentIds); room.getContentGroups().add(newGroup); } - eventPublisher.publishEvent(new BeforeCreationEvent<>(content)); + eventPublisher.publishEvent(new BeforeCreationEvent<>(this, content)); roomRepository.save(room); - eventPublisher.publishEvent(new AfterCreationEvent<>(content)); + eventPublisher.publishEvent(new AfterCreationEvent<>(this, content)); } @Override @@ -289,9 +289,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem try { final int count = answerRepository.deleteByContentId(contentId); - eventPublisher.publishEvent(new BeforeDeletionEvent<>(content)); + eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, content)); contentRepository.deleteById(contentId); - eventPublisher.publishEvent(new AfterDeletionEvent<>(content)); + eventPublisher.publishEvent(new AfterDeletionEvent<>(this, content)); dbLogger.log("delete", "type", "content", "answerCount", count); } catch (final IllegalArgumentException e) { logger.error("Could not delete content {}.", contentId, e); diff --git a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java index 3e1ab7746..7767771a5 100644 --- a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java @@ -92,9 +92,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService entity.setCreationTimestamp(new Date()); prepareCreate(entity); - eventPublisher.publishEvent(new BeforeCreationEvent<>(entity)); + eventPublisher.publishEvent(new BeforeCreationEvent<>(this, entity)); final T createdEntity = repository.save(entity); - eventPublisher.publishEvent(new AfterCreationEvent<>(createdEntity)); + eventPublisher.publishEvent(new AfterCreationEvent<>(this, createdEntity)); finalizeCreate(entity); return createdEntity; @@ -129,9 +129,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService newEntity.setUpdateTimestamp(new Date()); prepareUpdate(newEntity); - eventPublisher.publishEvent(new BeforeUpdateEvent<>(newEntity)); + eventPublisher.publishEvent(new BeforeUpdateEvent<>(this, newEntity)); final T updatedEntity = repository.save(newEntity); - eventPublisher.publishEvent(new AfterUpdateEvent<>(updatedEntity)); + eventPublisher.publishEvent(new AfterUpdateEvent<>(this, updatedEntity)); finalizeUpdate(updatedEntity); return updatedEntity; @@ -170,9 +170,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService reader.readValue(tree); entity.setUpdateTimestamp(new Date()); preparePatch(entity); - eventPublisher.publishEvent(new BeforePatchEvent<>(entity)); + eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity)); final T patchedEntity = repository.save(entity); - eventPublisher.publishEvent(new AfterPatchEvent<>(entity)); + eventPublisher.publishEvent(new AfterPatchEvent<>(this, entity)); return patchedEntity; } @@ -193,7 +193,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService reader.readValue(tree); entity.setUpdateTimestamp(new Date()); preparePatch(entity); - eventPublisher.publishEvent(new BeforePatchEvent<>(entity)); + eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity)); } return repository.saveAll(entities); @@ -212,9 +212,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService @Override @PreAuthorize("hasPermission(#entity, 'delete')") public void delete(final T entity) { - eventPublisher.publishEvent(new BeforeDeletionEvent<>(entity)); + eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, entity)); repository.delete(entity); - eventPublisher.publishEvent(new AfterUpdateEvent<>(entity)); + eventPublisher.publishEvent(new AfterUpdateEvent<>(this, entity)); } /** diff --git a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java index 9f7de91a1..83b06681b 100644 --- a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java @@ -455,9 +455,9 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R count[2] = commentRepository.deleteByRoomId(room.getId()); count[1] = answerRepository.deleteByContentIds(contentIds); count[0] = contentRepository.deleteByRoomId(room.getId()); - this.eventPublisher.publishEvent(new BeforeDeletionEvent<>(room)); + this.eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, room)); roomRepository.delete(room); - this.eventPublisher.publishEvent(new AfterDeletionEvent<>(room)); + this.eventPublisher.publishEvent(new AfterDeletionEvent<>(this, room)); logger.debug("Deleted room document {} and related data.", room.getId()); dbLogger.log("delete", "type", "session", "id", room.getId()); diff --git a/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java index 46a50546d..4f29f03e7 100644 --- a/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java +++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java @@ -56,7 +56,7 @@ public class ScoreCalculatorFactoryImpl implements ScoreCalculatorFactory, Appli @CacheEvict(value = "score", key = "#event.Room") @EventListener public void handleAfterContentCreation(AfterCreationEvent<Content> event) { - this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId())); + this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId())); } @CacheEvict(value = "score", key = "#event.Room") @@ -86,19 +86,19 @@ public class ScoreCalculatorFactoryImpl implements ScoreCalculatorFactory, Appli @CacheEvict(value = "score", key = "#event.Room") @EventListener public void handleNewAnswer(AfterCreationEvent<Answer> event) { - this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId())); + this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId())); } @CacheEvict(value = "score", key = "#event.Room") @EventListener public void handleDeleteAnswer(AfterDeletionEvent<Answer> event) { - this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId())); + this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId())); } @CacheEvict(value = "score", key = "#event.Room") @EventListener public void handleDeleteQuestion(AfterDeletionEvent<Content> event) { - this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId())); + this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId())); } @CacheEvict(value = "score", key = "#event.Room") diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java index 8ec0ac075..8e99eca9e 100644 --- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java +++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java @@ -493,7 +493,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @EventListener public void handleAfterContentCreation(AfterCreationEvent<de.thm.arsnova.model.Content> event) { - this.reportContentAvailable(event.getSource().getId(), Collections.singletonList(event.getSource())); + this.reportContentAvailable(event.getEntity().getId(), Collections.singletonList(event.getEntity())); } @EventListener @@ -518,16 +518,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @EventListener public void handleAfterCommentCreation(AfterCreationEvent<Comment> event) { - this.reportCommentAvailable(event.getSource().getId(), event.getSource().getId()); + this.reportCommentAvailable(event.getEntity().getId(), event.getEntity().getId()); } @Async @EventListener @Timed public void handleNewAnswer(AfterCreationEvent<Answer> event) { - final String roomId = event.getSource().getRoomId(); - this.reportAnswersToContentAvailable(event.getSource().getRoomId(), event.getSource().getContentId()); - broadcastInRoom(roomId, "countQuestionAnswersByQuestionId", answerService.countAnswersAndAbstentionsInternal(event.getSource().getContentId())); + final String roomId = event.getEntity().getRoomId(); + this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId()); + broadcastInRoom(roomId, "countQuestionAnswersByQuestionId", answerService.countAnswersAndAbstentionsInternal(event.getEntity().getContentId())); /* FIXME: Content variant is ignored for now */ broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); broadcastInRoom(roomId, "countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); @@ -546,8 +546,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @EventListener @Timed public void handleAfterAnswerDeletion(AfterDeletionEvent<Answer> event) { - final String roomId = event.getSource().getRoomId(); - this.reportAnswersToContentAvailable(event.getSource().getRoomId(), event.getSource().getContentId()); + final String roomId = event.getEntity().getRoomId(); + this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId()); // We do not know which user's answer was deleted, so we can't update his 'unanswered' list of questions... /* FIXME: Content variant is ignored for now */ broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); -- GitLab