diff --git a/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java b/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java index 6f99fd8552ba3b8c5e745c287e2f22c73eb358c6..5267b6d2efc083b58ba032e451df41817a739ad4 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 67893207a13004fc3bc8e9f0dc49d0dda89e1a68..34115a7442a128dbdcca848318017f1b1001dc3b 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 26382107409030433cf7d33afa72b1e1f64fcce1..4b73660d36aef3cb763d09f099dbc81535c8a700 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 b30f3958a414b4e7e2b1f42f09412a2fb92051be..702173630447bc819fe8bf66771a64c56e8b584d 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 42d5524f349374f7613ea7d030e8dc537f7b56a7..7235cb4c7518b5e01c70c5a1b146d03756386e11 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 0a13bef26ba234ff52e0d9b2fcc7b115592ac670..fac150106ed5900eaa743d038a82f138e8fc9042 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 871dc6bfd20ee2db688ca0c688ab799cabb9750f..82eee8540dd42629a35834dbb7f365e962599fb5 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 81c74e675a330083d6f381e0a5a689c616a38ef6..65fc96e1009ca9a1423fbe596049af898124617f 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 07d3bbb6fa8ec575b5824c85b1257c533b9b7822..e95cdea65db2b1a6aa4e7dfea2e6ecee74eadd15 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 fdbe22ff3653a0bd2c4db0e4bcbcd83399912203..bc0b146cb937bee6a1dca389b4c634e046b42a5c 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 48f055635662389bf974d7a68cde51d173113d75..91e7708ef82922b67b44d8a33183f1af1c6d83f8 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 f905d2b1a7668d7b3c6fb7c771209afc8538e1ab..fab8488d6ad775b45a585c0331539fa647ecaa8f 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 3e1ab77461229d2f4f5247a7ea5b22f197e24c57..7767771a5bab29d30cb83cf5d9be39af4dac1629 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 9f7de91a136bece44c95a097d5c946d9b49cb656..83b06681be2f48bf1340ce33d184be14ecb77552 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 46a50546d459772a98e6969dc703a5e488d3ca7e..4f29f03e70d65cb86e4acf9ba50a31d3e76d5443 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 8ec0ac0752b08fc868446ec6008a62a35fc6566d..8e99eca9e25362342d03d708d78117842626bf9c 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));