diff --git a/src/main/java/de/thm/arsnova/dao/CacheBuster.java b/src/main/java/de/thm/arsnova/dao/CacheBuster.java index fc00491e1160a00d9387105e8cb0d6e16229d0b4..5d39e3997558d105ffe1c1205495867a4f99733a 100644 --- a/src/main/java/de/thm/arsnova/dao/CacheBuster.java +++ b/src/main/java/de/thm/arsnova/dao/CacheBuster.java @@ -20,6 +20,7 @@ package de.thm.arsnova.dao; import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Component; +import de.thm.arsnova.events.ChangeLearningProgress; import de.thm.arsnova.events.DeleteAllLectureAnswersEvent; import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent; import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent; @@ -77,4 +78,7 @@ public class CacheBuster implements ICacheBuster, NovaEventVisitor { @Override public void visit(StatusSessionEvent event) {} + + @Override + public void visit(ChangeLearningProgress changeLearningProgress) {} } diff --git a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java index ab378a4635b50a47828487fb0e837b60712b1d2a..d2936f57a0aa975df3fa09a353a23631982c2584 100644 --- a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java +++ b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java @@ -19,9 +19,12 @@ package de.thm.arsnova.domain; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.stereotype.Component; import de.thm.arsnova.dao.IDatabaseDao; +import de.thm.arsnova.events.ChangeLearningProgress; import de.thm.arsnova.events.DeleteAllLectureAnswersEvent; import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent; import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent; @@ -37,11 +40,13 @@ import de.thm.arsnova.events.NovaEventVisitor; import de.thm.arsnova.events.StatusSessionEvent; @Component -public class LearningProgressFactory implements NovaEventVisitor, ILearningProgressFactory { +public class LearningProgressFactory implements NovaEventVisitor, ILearningProgressFactory, ApplicationEventPublisherAware { @Autowired private IDatabaseDao databaseDao; + private ApplicationEventPublisher publisher; + @Override public LearningProgress createFromType(String progressType) { if (progressType.equals("questions")) { @@ -59,31 +64,45 @@ public class LearningProgressFactory implements NovaEventVisitor, ILearningProgr @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(NewQuestionEvent event) {} + public void visit(NewQuestionEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(NewAnswerEvent event) {} + public void visit(NewAnswerEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(DeleteAnswerEvent event) {} + public void visit(DeleteAnswerEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(DeleteQuestionEvent event) {} + public void visit(DeleteQuestionEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(DeleteAllQuestionsAnswersEvent event) {} + public void visit(DeleteAllQuestionsAnswersEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(DeleteAllPreparationAnswersEvent event) {} + public void visit(DeleteAllPreparationAnswersEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @CacheEvict(value = "learningprogress", key = "#event.Session") @Override - public void visit(DeleteAllLectureAnswersEvent event) {} + public void visit(DeleteAllLectureAnswersEvent event) { + this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession())); + } @Override public void visit(NewFeedbackEvent newFeedbackEvent) {} @@ -94,4 +113,12 @@ public class LearningProgressFactory implements NovaEventVisitor, ILearningProgr @Override public void visit(StatusSessionEvent statusSessionEvent) {} + @Override + public void visit(ChangeLearningProgress changeLearningProgress) {} + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { + this.publisher = publisher; + } + } diff --git a/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java b/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java new file mode 100644 index 0000000000000000000000000000000000000000..f0ddec67104ed9455c9bc98ff39fd6c359499a60 --- /dev/null +++ b/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java @@ -0,0 +1,35 @@ +/* + * This file is part of ARSnova Backend. + * Copyright (C) 2012-2015 The ARSnova Team + * + * ARSnova Backend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ARSnova Backend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.thm.arsnova.events; + +import de.thm.arsnova.entities.Session; + +public class ChangeLearningProgress extends SessionEvent { + + private static final long serialVersionUID = 1L; + + public ChangeLearningProgress(Object source, Session session) { + super(source, session); + } + + @Override + public void accept(NovaEventVisitor visitor) { + visitor.visit(this); + } + +} diff --git a/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java b/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java index ab820bf2fa9c0661ffcfdf23a4a7a1053c2f4e57..c1eb3e68f7988f399457211ca87727073dff2ff7 100644 --- a/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java +++ b/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java @@ -43,4 +43,6 @@ public interface NovaEventVisitor { void visit(StatusSessionEvent statusSessionEvent); + void visit(ChangeLearningProgress changeLearningProgress); + } diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index e68d991781a86c7a4746c68ffec82002a20085dc..f8d7b6a580d879189a833945f56fc0176f37a99e 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -49,6 +49,7 @@ import com.corundumstudio.socketio.protocol.PacketType; import de.thm.arsnova.entities.InterposedQuestion; import de.thm.arsnova.entities.User; import de.thm.arsnova.entities.transport.LearningProgressType; +import de.thm.arsnova.events.ChangeLearningProgress; import de.thm.arsnova.events.DeleteAllLectureAnswersEvent; import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent; import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent; @@ -518,4 +519,9 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor { public void visit(StatusSessionEvent event) { this.reportSessionStatus(event.getSession().getKeyword(), event.getSession().isActive()); } + + @Override + public void visit(ChangeLearningProgress event) { + broadcastInSession(event.getSession().getKeyword(), "learningProgressChange", null); + } }