From de48cbf7202837ba38a67c0b6c8bc43e326109a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20G=C3=A4rtner?= <andreas.gaertner@hotmail.com>
Date: Tue, 8 Dec 2015 14:04:43 +0100
Subject: [PATCH] Add LockFeedbackEvent

---
 .../de/thm/arsnova/cache/CacheBuster.java     |  4 ++
 .../domain/LearningProgressFactory.java       |  4 ++
 .../thm/arsnova/events/LockFeedbackEvent.java | 37 +++++++++++++++++++
 .../thm/arsnova/events/NovaEventVisitor.java  |  1 +
 .../arsnova/socket/ARSnovaSocketIOServer.java | 18 +++++++--
 5 files changed, 61 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java

diff --git a/src/main/java/de/thm/arsnova/cache/CacheBuster.java b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
index 2335ae5e..3298bc4d 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBuster.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
@@ -31,6 +31,7 @@ import de.thm.arsnova.events.DeleteInterposedQuestionEvent;
 import de.thm.arsnova.events.DeleteQuestionEvent;
 import de.thm.arsnova.events.DeleteSessionEvent;
 import de.thm.arsnova.events.FeatureChangeEvent;
+import de.thm.arsnova.events.LockFeedbackEvent;
 import de.thm.arsnova.events.LockQuestionEvent;
 import de.thm.arsnova.events.LockQuestionsEvent;
 import de.thm.arsnova.events.LockVoteEvent;
@@ -151,4 +152,7 @@ public class CacheBuster implements ICacheBuster, NovaEventVisitor {
 	@Override
 	public void visit(FeatureChangeEvent featureChangeEvent) {}
 
+	@Override
+	public void visit(LockFeedbackEvent lockFeedbackEvent) {}
+
 }
diff --git a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
index 1f669dfc..60ed2f01 100644
--- a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
+++ b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
@@ -35,6 +35,7 @@ import de.thm.arsnova.events.DeleteInterposedQuestionEvent;
 import de.thm.arsnova.events.DeleteQuestionEvent;
 import de.thm.arsnova.events.DeleteSessionEvent;
 import de.thm.arsnova.events.FeatureChangeEvent;
+import de.thm.arsnova.events.LockFeedbackEvent;
 import de.thm.arsnova.events.LockQuestionEvent;
 import de.thm.arsnova.events.LockQuestionsEvent;
 import de.thm.arsnova.events.LockVoteEvent;
@@ -211,4 +212,7 @@ public class LearningProgressFactory implements NovaEventVisitor, ILearningProgr
 	@Override
 	public void visit(FeatureChangeEvent featureChangeEvent) {}
 
+	@Override
+	public void visit(LockFeedbackEvent lockFeedbackEvent) {}
+
 }
diff --git a/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java b/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
new file mode 100644
index 00000000..b82bdfbd
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+/**
+ * Fires whenever voting on a question is disabled.
+ */
+public class LockFeedbackEvent extends SessionEvent {
+
+	private static final long serialVersionUID = 1L;
+
+	public LockFeedbackEvent(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 1f318457..4f7b77a6 100644
--- a/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java
+++ b/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java
@@ -80,4 +80,5 @@ public interface NovaEventVisitor {
 
 	void visit(FeatureChangeEvent featureChangeEvent);
 
+	void visit(LockFeedbackEvent lockFeedbackEvent);
 }
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index a00ebc32..24b5644a 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -61,6 +61,7 @@ import de.thm.arsnova.events.DeleteInterposedQuestionEvent;
 import de.thm.arsnova.events.DeleteQuestionEvent;
 import de.thm.arsnova.events.DeleteSessionEvent;
 import de.thm.arsnova.events.FeatureChangeEvent;
+import de.thm.arsnova.events.LockFeedbackEvent;
 import de.thm.arsnova.events.LockQuestionEvent;
 import de.thm.arsnova.events.LockQuestionsEvent;
 import de.thm.arsnova.events.LockVoteEvent;
@@ -171,9 +172,15 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 					return;
 				}
 				final String sessionKey = userService.getSessionForUser(u.getUsername());
-				LOGGER.debug("Feedback recieved: {}", new Object[] {u, sessionKey, data.getValue()});
-				if (null != sessionKey) {
-					feedbackService.saveFeedback(sessionKey, data.getValue(), u);
+				final de.thm.arsnova.entities.Session session = sessionService.getSessionInternal(sessionKey, u);
+
+				if (session.getFeedbackLock()) {
+					LOGGER.debug("Feedback save blocked: {}", new Object[] {u, sessionKey, data.getValue()});
+				} else {
+					LOGGER.debug("Feedback recieved: {}", new Object[] {u, sessionKey, data.getValue()});
+					if (null != sessionKey) {
+						feedbackService.saveFeedback(sessionKey, data.getValue(), u);
+					}
 				}
 			}
 		});
@@ -609,6 +616,11 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 		broadcastInSession(sessionKey, "featureChange", event.getSession().getFeatures());
 	}
 
+	@Override
+	public void visit(LockFeedbackEvent event) {
+		broadcastInSession(event.getSession().getKeyword(), "lockFeedback", event.getSession().getFeedbackLock());
+	}
+
 	@Override
 	public void visit(DeleteQuestionEvent deleteQuestionEvent) {
 		// TODO Auto-generated method stub
-- 
GitLab