Skip to content
Snippets Groups Projects
Commit 125bbf90 authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

Emit events before and after entity CRUD operations

parent a6ea68c8
1 merge request!101CRUD events
This commit is part of merge request !101. Comments created here will be created in the context of that merge request.
Showing
with 142 additions and 61 deletions
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
package de.thm.arsnova.event;
import de.thm.arsnova.model.Entity;
import org.springframework.context.ApplicationEvent;
public abstract class CrudEvent<E extends Entity> extends ApplicationEvent {
public CrudEvent(final E source) {
super(source);
}
@Override
public E getSource() {
return (E) super.getSource();
}
}
...@@ -37,8 +37,6 @@ import org.slf4j.Logger; ...@@ -37,8 +37,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
...@@ -55,14 +53,11 @@ import java.util.concurrent.ConcurrentLinkedQueue; ...@@ -55,14 +53,11 @@ import java.util.concurrent.ConcurrentLinkedQueue;
* Performs all answer related operations. * Performs all answer related operations.
*/ */
@Service @Service
public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> implements AnswerService {
implements AnswerService, ApplicationEventPublisherAware {
private static final Logger logger = LoggerFactory.getLogger(ContentServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(ContentServiceImpl.class);
private final Queue<AnswerQueueElement> answerQueue = new ConcurrentLinkedQueue<>(); private final Queue<AnswerQueueElement> answerQueue = new ConcurrentLinkedQueue<>();
private ApplicationEventPublisher publisher;
private RoomRepository roomRepository; private RoomRepository roomRepository;
private ContentRepository contentRepository; private ContentRepository contentRepository;
private AnswerRepository answerRepository; private AnswerRepository answerRepository;
...@@ -104,7 +99,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> ...@@ -104,7 +99,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer>
// Send NewAnswerEvents ... // Send NewAnswerEvents ...
for (AnswerQueueElement e : elements) { for (AnswerQueueElement e : elements) {
this.publisher.publishEvent(new NewAnswerEvent(this, e.getRoom(), e.getAnswer(), e.getUserId(), e.getQuestion())); this.eventPublisher.publishEvent(new NewAnswerEvent(this, e.getRoom(), e.getAnswer(), e.getUserId(), e.getQuestion()));
} }
} catch (final DbAccessException e) { } catch (final DbAccessException e) {
logger.error("Could not bulk save answers from queue.", e); logger.error("Could not bulk save answers from queue.", e);
...@@ -379,7 +374,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> ...@@ -379,7 +374,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer>
answer.setContentId(content.getId()); answer.setContentId(content.getId());
answer.setRoomId(room.getId()); answer.setRoomId(room.getId());
answerRepository.save(realAnswer); answerRepository.save(realAnswer);
this.publisher.publishEvent(new NewAnswerEvent(this, room, answer, user.getId(), content)); this.eventPublisher.publishEvent(new NewAnswerEvent(this, room, answer, user.getId(), content));
return answer; return answer;
} }
...@@ -399,7 +394,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> ...@@ -399,7 +394,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer>
} }
answerRepository.deleteById(answerId); answerRepository.deleteById(answerId);
this.publisher.publishEvent(new DeleteAnswerEvent(this, room, content)); this.eventPublisher.publishEvent(new DeleteAnswerEvent(this, room, content));
} }
/* /*
...@@ -447,9 +442,4 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> ...@@ -447,9 +442,4 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer>
public int countPreparationQuestionAnswersInternal(final String roomId) { public int countPreparationQuestionAnswersInternal(final String roomId) {
return answerRepository.countByRoomIdOnlyPreparationVariant(roomRepository.findOne(roomId).getId()); return answerRepository.countByRoomIdOnlyPreparationVariant(roomRepository.findOne(roomId).getId());
} }
@Override
public void setApplicationEventPublisher(final ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;
}
} }
...@@ -11,8 +11,6 @@ import de.thm.arsnova.web.exceptions.ForbiddenException; ...@@ -11,8 +11,6 @@ import de.thm.arsnova.web.exceptions.ForbiddenException;
import de.thm.arsnova.web.exceptions.NotFoundException; import de.thm.arsnova.web.exceptions.NotFoundException;
import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.web.exceptions.UnauthorizedException;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,15 +25,13 @@ import java.util.Map; ...@@ -27,15 +25,13 @@ import java.util.Map;
* Performs all comment related operations. * Performs all comment related operations.
*/ */
@Service @Service
public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implements CommentService, ApplicationEventPublisherAware { public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implements CommentService {
private UserService userService; private UserService userService;
private CommentRepository commentRepository; private CommentRepository commentRepository;
private RoomRepository roomRepository; private RoomRepository roomRepository;
private ApplicationEventPublisher publisher;
public CommentServiceImpl( public CommentServiceImpl(
CommentRepository repository, CommentRepository repository,
RoomRepository roomRepository, RoomRepository roomRepository,
...@@ -47,11 +43,6 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem ...@@ -47,11 +43,6 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
this.userService = userService; this.userService = userService;
} }
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;
}
@Override @Override
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
public void prepareCreate(final Comment comment) { public void prepareCreate(final Comment comment) {
...@@ -76,7 +67,7 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem ...@@ -76,7 +67,7 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
final Room room = roomRepository.findOne(comment.getRoomId()); final Room room = roomRepository.findOne(comment.getRoomId());
final DeleteCommentEvent event = new DeleteCommentEvent(this, room, comment); final DeleteCommentEvent event = new DeleteCommentEvent(this, room, comment);
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
@Override @Override
......
...@@ -34,8 +34,6 @@ import org.springframework.beans.factory.annotation.Qualifier; ...@@ -34,8 +34,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -54,7 +52,7 @@ import java.util.stream.Collectors; ...@@ -54,7 +52,7 @@ import java.util.stream.Collectors;
* Performs all content related operations. * Performs all content related operations.
*/ */
@Service @Service
public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implements ContentService, ApplicationEventPublisherAware { public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implements ContentService {
private UserService userService; private UserService userService;
private LogEntryRepository dbLogger; private LogEntryRepository dbLogger;
...@@ -65,8 +63,6 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -65,8 +63,6 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
private AnswerRepository answerRepository; private AnswerRepository answerRepository;
private ApplicationEventPublisher publisher;
private static final Logger logger = LoggerFactory.getLogger(ContentServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(ContentServiceImpl.class);
public ContentServiceImpl( public ContentServiceImpl(
...@@ -201,7 +197,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -201,7 +197,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
roomRepository.save(room); roomRepository.save(room);
final NewQuestionEvent event = new NewQuestionEvent(this, room, content); final NewQuestionEvent event = new NewQuestionEvent(this, room, content);
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
@Override @Override
...@@ -301,7 +297,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -301,7 +297,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
} }
final DeleteQuestionEvent event = new DeleteQuestionEvent(this, room, content); final DeleteQuestionEvent event = new DeleteQuestionEvent(this, room, content);
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
@PreAuthorize("hasPermission(#session, 'owner')") @PreAuthorize("hasPermission(#session, 'owner')")
...@@ -325,7 +321,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -325,7 +321,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
dbLogger.log("delete", "type", "answer", "answerCount", answerCount); dbLogger.log("delete", "type", "answer", "answerCount", answerCount);
final DeleteAllQuestionsEvent event = new DeleteAllQuestionsEvent(this, room); final DeleteAllQuestionsEvent event = new DeleteAllQuestionsEvent(this, room);
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
@Override @Override
...@@ -375,7 +371,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -375,7 +371,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
} else { } else {
event = new UnlockVoteEvent(this, room, content); event = new UnlockVoteEvent(this, room, content);
} }
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
@Override @Override
...@@ -405,7 +401,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -405,7 +401,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
} else { } else {
event = new UnlockVotesEvent(this, room, list); event = new UnlockVotesEvent(this, room, list);
} }
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} catch (IOException e) { } catch (IOException e) {
logger.error("Patching of contents failed", e); logger.error("Patching of contents failed", e);
} }
...@@ -506,7 +502,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -506,7 +502,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
} else { } else {
event = new LockQuestionsEvent(this, room, list); event = new LockQuestionsEvent(this, room, list);
} }
this.publisher.publishEvent(event); this.eventPublisher.publishEvent(event);
} }
/* TODO: Split and move answer part to AnswerService */ /* TODO: Split and move answer part to AnswerService */
...@@ -525,7 +521,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -525,7 +521,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList()); final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
answerRepository.deleteAllAnswersForQuestions(contentIds); answerRepository.deleteAllAnswersForQuestions(contentIds);
this.publisher.publishEvent(new DeleteAllQuestionsAnswersEvent(this, room)); this.eventPublisher.publishEvent(new DeleteAllQuestionsAnswersEvent(this, room));
} }
/* TODO: Split and move answer part to AnswerService */ /* TODO: Split and move answer part to AnswerService */
...@@ -541,7 +537,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -541,7 +537,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList()); final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
answerRepository.deleteAllAnswersForQuestions(contentIds); answerRepository.deleteAllAnswersForQuestions(contentIds);
this.publisher.publishEvent(new DeleteAllPreparationAnswersEvent(this, room)); this.eventPublisher.publishEvent(new DeleteAllPreparationAnswersEvent(this, room));
} }
/* TODO: Split and move answer part to AnswerService */ /* TODO: Split and move answer part to AnswerService */
...@@ -557,7 +553,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -557,7 +553,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList()); final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
answerRepository.deleteAllAnswersForQuestions(contentIds); answerRepository.deleteAllAnswersForQuestions(contentIds);
this.publisher.publishEvent(new DeleteAllLectureAnswersEvent(this, room)); this.eventPublisher.publishEvent(new DeleteAllLectureAnswersEvent(this, room));
} }
@Caching(evict = { @Caching(evict = {
...@@ -574,9 +570,4 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem ...@@ -574,9 +570,4 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
} }
contentRepository.saveAll(contents); contentRepository.saveAll(contents);
} }
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
} }
...@@ -20,9 +20,18 @@ package de.thm.arsnova.service; ...@@ -20,9 +20,18 @@ package de.thm.arsnova.service;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.ObjectReader;
import de.thm.arsnova.event.AfterCreationEvent;
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.BeforePatchEvent;
import de.thm.arsnova.event.BeforeUpdateEvent;
import de.thm.arsnova.model.Entity; import de.thm.arsnova.model.Entity;
import de.thm.arsnova.model.serialization.View; import de.thm.arsnova.model.serialization.View;
import de.thm.arsnova.persistence.CrudRepository; import de.thm.arsnova.persistence.CrudRepository;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreFilter; import org.springframework.security.access.prepost.PreFilter;
...@@ -38,9 +47,10 @@ import java.util.function.Function; ...@@ -38,9 +47,10 @@ import java.util.function.Function;
* @param <T> Entity type * @param <T> Entity type
* @author Daniel Gerhardt * @author Daniel Gerhardt
*/ */
public class DefaultEntityServiceImpl<T extends Entity> implements EntityService<T> { public class DefaultEntityServiceImpl<T extends Entity> implements EntityService<T>, ApplicationEventPublisherAware {
protected Class<T> type; protected Class<T> type;
protected CrudRepository<T, String> repository; protected CrudRepository<T, String> repository;
protected ApplicationEventPublisher eventPublisher;
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
public DefaultEntityServiceImpl(Class<T> type, CrudRepository<T, String> repository, ObjectMapper objectMapper) { public DefaultEntityServiceImpl(Class<T> type, CrudRepository<T, String> repository, ObjectMapper objectMapper) {
...@@ -82,7 +92,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -82,7 +92,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
entity.setCreationTimestamp(new Date()); entity.setCreationTimestamp(new Date());
prepareCreate(entity); prepareCreate(entity);
eventPublisher.publishEvent(new BeforeCreationEvent<>(entity));
final T createdEntity = repository.save(entity); final T createdEntity = repository.save(entity);
eventPublisher.publishEvent(new AfterCreationEvent<>(createdEntity));
finalizeCreate(entity); finalizeCreate(entity);
return createdEntity; return createdEntity;
...@@ -117,7 +129,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -117,7 +129,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
newEntity.setUpdateTimestamp(new Date()); newEntity.setUpdateTimestamp(new Date());
prepareUpdate(newEntity); prepareUpdate(newEntity);
eventPublisher.publishEvent(new BeforeUpdateEvent<>(newEntity));
final T updatedEntity = repository.save(newEntity); final T updatedEntity = repository.save(newEntity);
eventPublisher.publishEvent(new AfterUpdateEvent<>(updatedEntity));
finalizeUpdate(updatedEntity); finalizeUpdate(updatedEntity);
return updatedEntity; return updatedEntity;
...@@ -156,8 +170,11 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -156,8 +170,11 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
reader.readValue(tree); reader.readValue(tree);
entity.setUpdateTimestamp(new Date()); entity.setUpdateTimestamp(new Date());
preparePatch(entity); preparePatch(entity);
eventPublisher.publishEvent(new BeforePatchEvent<>(entity));
final T patchedEntity = repository.save(entity);
eventPublisher.publishEvent(new AfterPatchEvent<>(entity));
return repository.save(entity); return patchedEntity;
} }
@Override @Override
...@@ -176,6 +193,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -176,6 +193,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
reader.readValue(tree); reader.readValue(tree);
entity.setUpdateTimestamp(new Date()); entity.setUpdateTimestamp(new Date());
preparePatch(entity); preparePatch(entity);
eventPublisher.publishEvent(new BeforePatchEvent<>(entity));
} }
return repository.saveAll(entities); return repository.saveAll(entities);
...@@ -194,7 +212,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -194,7 +212,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
@Override @Override
@PreAuthorize("hasPermission(#entity, 'delete')") @PreAuthorize("hasPermission(#entity, 'delete')")
public void delete(final T entity) { public void delete(final T entity) {
eventPublisher.publishEvent(new BeforeDeletionEvent<>(entity));
repository.delete(entity); repository.delete(entity);
eventPublisher.publishEvent(new AfterUpdateEvent<>(entity));
} }
/** /**
...@@ -209,4 +229,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ...@@ -209,4 +229,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
public String getTypeName() { public String getTypeName() {
return type.getSimpleName().toLowerCase(); return type.getSimpleName().toLowerCase();
} }
@Override
public void setApplicationEventPublisher(final ApplicationEventPublisher applicationEventPublisher) {
this.eventPublisher = applicationEventPublisher;
}
} }
...@@ -47,8 +47,6 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -47,8 +47,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
...@@ -67,7 +65,7 @@ import java.util.stream.Collectors; ...@@ -67,7 +65,7 @@ import java.util.stream.Collectors;
* Performs all room related operations. * Performs all room related operations.
*/ */
@Service @Service
public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements RoomService, ApplicationEventPublisherAware { public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements RoomService {
private static final long ROOM_INACTIVITY_CHECK_INTERVAL_MS = 30 * 60 * 1000L; private static final long ROOM_INACTIVITY_CHECK_INTERVAL_MS = 30 * 60 * 1000L;
private static final Logger logger = LoggerFactory.getLogger(RoomServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(RoomServiceImpl.class);
...@@ -96,8 +94,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -96,8 +94,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
@Value("${pp.logofilesize_b}") @Value("${pp.logofilesize_b}")
private int uploadFileSizeByte; private int uploadFileSizeByte;
private ApplicationEventPublisher publisher;
public RoomServiceImpl( public RoomServiceImpl(
RoomRepository repository, RoomRepository repository,
ContentRepository contentRepository, ContentRepository contentRepository,
...@@ -407,7 +403,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -407,7 +403,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
public Room setActive(final String id, final Boolean lock) { public Room setActive(final String id, final Boolean lock) {
final Room room = roomRepository.findOne(id); final Room room = roomRepository.findOne(id);
room.setClosed(!lock); room.setClosed(!lock);
this.publisher.publishEvent(new StatusRoomEvent(this, room)); this.eventPublisher.publishEvent(new StatusRoomEvent(this, room));
roomRepository.save(room); roomRepository.save(room);
return room; return room;
...@@ -462,7 +458,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -462,7 +458,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
logger.debug("Deleted room document {} and related data.", room.getId()); logger.debug("Deleted room document {} and related data.", room.getId());
dbLogger.log("delete", "type", "session", "id", room.getId()); dbLogger.log("delete", "type", "session", "id", room.getId());
this.publisher.publishEvent(new DeleteRoomEvent(this, room)); this.eventPublisher.publishEvent(new DeleteRoomEvent(this, room));
return count; return count;
} }
...@@ -511,11 +507,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -511,11 +507,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
return roomRepository.importRoom(user.getId(), temp); return roomRepository.importRoom(user.getId(), temp);
} }
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Override @Override
@PreAuthorize("hasPermission(#id, 'room', 'read')") @PreAuthorize("hasPermission(#id, 'room', 'read')")
public Room.Settings getFeatures(String id) { public Room.Settings getFeatures(String id) {
...@@ -527,7 +518,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -527,7 +518,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
public Room.Settings updateFeatures(String id, Room.Settings settings) { public Room.Settings updateFeatures(String id, Room.Settings settings) {
final Room room = roomRepository.findOne(id); final Room room = roomRepository.findOne(id);
room.setSettings(settings); room.setSettings(settings);
this.publisher.publishEvent(new FeatureChangeEvent(this, room)); this.eventPublisher.publishEvent(new FeatureChangeEvent(this, room));
roomRepository.save(room); roomRepository.save(room);
return room.getSettings(); return room.getSettings();
...@@ -542,7 +533,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -542,7 +533,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
} }
room.getSettings().setFeedbackLocked(lock); room.getSettings().setFeedbackLocked(lock);
this.publisher.publishEvent(new LockFeedbackEvent(this, room)); this.eventPublisher.publishEvent(new LockFeedbackEvent(this, room));
roomRepository.save(room); roomRepository.save(room);
return room.getSettings().isFeedbackLocked(); return room.getSettings().isFeedbackLocked();
...@@ -552,7 +543,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ...@@ -552,7 +543,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
@PreAuthorize("hasPermission(#id, 'room', 'owner')") @PreAuthorize("hasPermission(#id, 'room', 'owner')")
public boolean flipFlashcards(String id, Boolean flip) { public boolean flipFlashcards(String id, Boolean flip) {
final Room room = roomRepository.findOne(id); final Room room = roomRepository.findOne(id);
this.publisher.publishEvent(new FlipFlashcardsEvent(this, room)); this.eventPublisher.publishEvent(new FlipFlashcardsEvent(this, room));
return flip; return flip;
} }
......
...@@ -12,6 +12,7 @@ import org.junit.Test; ...@@ -12,6 +12,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
...@@ -39,6 +40,9 @@ public class DefaultEntityServiceImplTest { ...@@ -39,6 +40,9 @@ public class DefaultEntityServiceImplTest {
@Qualifier("defaultJsonMessageConverter") @Qualifier("defaultJsonMessageConverter")
private MappingJackson2HttpMessageConverter jackson2HttpMessageConverter; private MappingJackson2HttpMessageConverter jackson2HttpMessageConverter;
@Autowired
private ApplicationEventPublisher eventPublisher;
@Autowired @Autowired
private RoomRepository roomRepository; private RoomRepository roomRepository;
...@@ -47,6 +51,7 @@ public class DefaultEntityServiceImplTest { ...@@ -47,6 +51,7 @@ public class DefaultEntityServiceImplTest {
public void testPatch() throws IOException { public void testPatch() throws IOException {
final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper(); final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper); final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper);
entityService.setApplicationEventPublisher(eventPublisher);
when(roomRepository.save(any(Room.class))).then(returnsFirstArg()); when(roomRepository.save(any(Room.class))).then(returnsFirstArg());
...@@ -80,6 +85,7 @@ public class DefaultEntityServiceImplTest { ...@@ -80,6 +85,7 @@ public class DefaultEntityServiceImplTest {
public void testPatchWithList() throws IOException { public void testPatchWithList() throws IOException {
final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper(); final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper); final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper);
entityService.setApplicationEventPublisher(eventPublisher);
when(roomRepository.save(any(Room.class))).then(returnsFirstArg()); when(roomRepository.save(any(Room.class))).then(returnsFirstArg());
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment