diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 8a6bfb8d7e3415d8a87376475417f368a455d2de..fce1f6dfb6ceaabab82f97940d83ae4073a19f02 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 367f5e219e1eb09febc35b5c87b91b26c8ca1ee3..5b505a65f2712a5b66c7567c502989cc994ed25c 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 70f671392c4d56ee0277e8e2049c8e0674e2e59c..0231c7fde5b36969f3900d75a6c2513f440ef0ea 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 6a0dd46b6c68e382b97065984ff2a34cd510e4a0..305ac0cf926dab6370e6413d2ff746405465e776 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 a842be9d2e19784e78129a7d403c6d859b7f6661..7a18c66fd7e1e62ebb010a433c45285380541dc5 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 d504deac0d272b7440248cb5bbb38a41b9e04272..48f601dab52170de72d83b9c8a83b0d2ff495373 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