From 431af6f74cf0195720968b140cbd8f278daa24fa Mon Sep 17 00:00:00 2001
From: tekay <tom.kaesler@mni.thm.de>
Date: Sun, 14 Feb 2016 13:17:53 +0100
Subject: [PATCH] implement: via two booleans you can now decide whether
 AnswerStatistics and FeedbackQuestions shall be exported, too

---
 .../arsnova/controller/SessionController.java |  2 +-
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 62 +++++++++++--------
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 +-
 .../transport/ImportExportSession.java        | 11 ++++
 .../thm/arsnova/services/ISessionService.java |  2 +-
 .../thm/arsnova/services/SessionService.java  |  4 +-
 6 files changed, 52 insertions(+), 31 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 8a6bfb8d..fce1f6df 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -282,7 +282,7 @@ public class SessionController extends PaginationController {
 		String[] splittedKeys = sessionkeys.split(",");
 		for (String key : splittedKeys) {
 			sessionService.setActive(key, false);
-			temp = sessionService.exportSession(key);
+			temp = sessionService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
 			if (temp != null) {
 				sessions.add(temp);
 			}
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 367f5e21..5b505a65 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -2186,30 +2186,11 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			this.deleteSession(session);
 			return null;
 		}
-		// Calculate some statistics...
-		int unreadInterposed = 0;
-		for (de.thm.arsnova.entities.transport.InterposedQuestion i : importSession.getFeedbackQuestions()) {
-			if (!i.isRead()) {
-				unreadInterposed++;
-			}
-		}
-		int numUnanswered = 0;
-		for (ImportExportQuestion question : importSession.getQuestions()) {
-			if (question.getAnswers().size() == 0) {
-				numUnanswered++;
-			}
-		}
-		final SessionInfo info = new SessionInfo(session);
-		info.setNumQuestions(questions.size());
-		info.setNumUnanswered(numUnanswered);
-		info.setNumAnswers(answers.size());
-		info.setNumInterposed(interposedQuestions.size());
-		info.setNumUnredInterposed(unreadInterposed);
-		return info;
+		return calculateSessionInfo(importSession, session);
 	}
 
 	@Override
-	public ImportExportSession exportSession(String sessionkey) {
+	public ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions) {
 		ImportExportSession ies = new ImportExportSession();
 		Session session = getDatabaseDao().getSessionFromKeyword(sessionkey);
 		ies.setSessionFromSessionObject(session);
@@ -2222,16 +2203,45 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 			ies.addQuestionWithAnswers(q, aL);
 		}
-		List<de.thm.arsnova.entities.transport.InterposedQuestion> iL = new ArrayList<de.thm.arsnova.entities.transport.InterposedQuestion>();
-		for (InterposedQuestion i : getDatabaseDao().getInterposedQuestions(session, 0, 0)) {
-			de.thm.arsnova.entities.transport.InterposedQuestion ti = new de.thm.arsnova.entities.transport.InterposedQuestion(i);
-			iL.add(ti);
+		if (withFeedbackQuestions) {
+			List<de.thm.arsnova.entities.transport.InterposedQuestion> iL = new ArrayList<de.thm.arsnova.entities.transport.InterposedQuestion>();
+			for (InterposedQuestion i : getDatabaseDao().getInterposedQuestions(session, 0, 0)) {
+				de.thm.arsnova.entities.transport.InterposedQuestion ti = new de.thm.arsnova.entities.transport.InterposedQuestion(i);
+				iL.add(ti);
+			}
+			ies.setFeedbackQuestions(iL);
+		}
+		if (withAnswerStatistics) {
+			ies.setSessionInfo(this.calculateSessionInfo(ies, session));
 		}
-		ies.setFeedbackQuestions(iL);
 		ies.setMotds(getDatabaseDao().getMotdsForSession(session.getKeyword()));
 		return ies;
 	}
 
+	public SessionInfo calculateSessionInfo(ImportExportSession ies, Session s) {
+		int unreadInterposed = 0;
+		int numUnanswered = 0;
+		int numAnswers = 0;
+		for (de.thm.arsnova.entities.transport.InterposedQuestion i : ies.getFeedbackQuestions()) {
+			if (!i.isRead()) {
+				unreadInterposed++;
+			}
+		}
+		for (ImportExportQuestion question : ies.getQuestions()) {
+			numAnswers += question.getAnswers().size();
+			if (question.getAnswers().size() == 0) {
+				numUnanswered++;
+			}
+		}
+		final SessionInfo info = new SessionInfo(s);
+		info.setNumQuestions(ies.getQuestions().size());
+		info.setNumUnanswered(numUnanswered);
+		info.setNumAnswers(numAnswers);
+		info.setNumInterposed(ies.getFeedbackQuestions().size());
+		info.setNumUnredInterposed(unreadInterposed);
+		return info;
+	}
+
 	@Override
 	public List<String> getSubjects(Session session, String questionVariant) {
 		String viewString = "";
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 70f67139..0231c7fd 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -207,7 +207,7 @@ public interface IDatabaseDao {
 
 	SessionInfo importSession(User user, ImportExportSession importSession);
 
-	ImportExportSession exportSession(String sessionkey);
+	ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions);
 
 	Statistics getStatistics();
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
index 6a0dd46b..305ac0cf 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
@@ -22,6 +22,7 @@ import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.entities.Motd;
+import de.thm.arsnova.entities.SessionInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -42,6 +43,8 @@ public class ImportExportSession {
 
 	private List<Motd> motds;
 
+	private SessionInfo sessionInfo;
+
 	public ImportExportSession() {
 		questions = new ArrayList<ImportExportQuestion>();
 		feedbackQuestions = new ArrayList<InterposedQuestion>();
@@ -82,6 +85,14 @@ public class ImportExportSession {
 		this.motds = mL;
 	}
 
+	public SessionInfo getSessionInfo() {
+		return sessionInfo;
+	}
+
+	public void setSessionInfo(SessionInfo si) {
+		sessionInfo = si;
+	}
+
 	public void setSessionFromSessionObject(Session s) {
 		ImportExportSesssion iesession = new ImportExportSesssion();
 		iesession.setName(s.getName());
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index a842be9d..7a18c66f 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -74,7 +74,7 @@ public interface ISessionService {
 
 	SessionInfo importSession(ImportExportSession session);
 
-	ImportExportSession exportSession(String sessionkey);
+	ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions);
 
 	SessionFeature getSessionFeatures(String sessionkey);
 
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index d504deac..48f601da 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -406,8 +406,8 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')")
-	public ImportExportSession exportSession(String sessionkey) {
-		return databaseDao.exportSession(sessionkey);
+	public ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions) {
+		return databaseDao.exportSession(sessionkey, withAnswerStatistics, withFeedbackQuestions);
 	}
 
 	@Override
-- 
GitLab