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