From 1368ca1ad3dc7d04d732a2b4a186b87ab615449e Mon Sep 17 00:00:00 2001
From: tekay <tom.kaesler@mni.thm.de>
Date: Thu, 11 Feb 2016 13:33:08 +0100
Subject: [PATCH] implement exportSession including motds add constructors to
 transport classes to parse "main"class

---
 .../arsnova/controller/SessionController.java |  2 +-
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 29 +++++-
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 +
 .../arsnova/entities/transport/Answer.java    |  7 ++
 .../transport/ImportExportSession.java        | 94 +++++++++++++++++++
 5 files changed, 131 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 6269bda8..3e1e3737 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -272,7 +272,7 @@ public class SessionController extends PaginationController {
 	@ApiOperation(value = "export sessions", nickname = "exportSession")
 	@RequestMapping(value = "/export", method = RequestMethod.GET)
 	public List<ImportExportSession> exportSession(
-			@ApiParam(value = "comma seperated list of sessionkeys", required = true) @PathVariable final String sessionkeys,
+			@ApiParam(value = "comma seperated list of sessionkeys", required = true) @RequestParam(value ="sessionkeys", defaultValue = "") final String sessionkeys,
 			@ApiParam(value = "http servlet response", required = true) final HttpServletResponse response
 		) {
 		List<ImportExportSession> sessions = new ArrayList<ImportExportSession>();
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 3fdfbcf6..1307ea84 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1623,6 +1623,12 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		return getQuestions(view, session);
 	}
 
+	@Override
+	public List<Question> getAllSkillQuestions(final Session session) {
+		final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session);
+		return questions;
+	}
+
 	private List<Question> getQuestions(final NovaView view, final Session session) {
 		view.setStartKeyArray(session.get_id());
 		view.setEndKeyArray(session.get_id(), "{}");
@@ -2189,8 +2195,27 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	@Override
-	public ImportExportQuestion exportSession(String sessionkey) {
-
+	public ImportExportSession exportSession(String sessionkey) {
+		ImportExportSession ies = new ImportExportSession();
+		Session session = getDatabaseDao().getSessionFromKeyword(sessionkey);
+		ies.setSessionFromSessionObject(session);
+		List<Question> questionList = getDatabaseDao().getAllSkillQuestions(session);
+		for (Question q : questionList) {
+			List<de.thm.arsnova.entities.transport.Answer> aL = new ArrayList<de.thm.arsnova.entities.transport.Answer>();
+			for (Answer a : this.getDatabaseDao().getAllAnswers(q)) {
+				de.thm.arsnova.entities.transport.Answer ta = new de.thm.arsnova.entities.transport.Answer(a);
+				aL.add(ta);
+			}
+			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);
+		}
+		ies.setFeedbackQuestions(iL);
+		ies.setMotds(getDatabaseDao().getMotdsForSession(session.getKeyword()));
+		return ies;
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 8b59feb7..70f67139 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -153,6 +153,8 @@ public interface IDatabaseDao {
 
 	List<Question> getPreparationQuestionsForTeachers(Session session);
 
+	List<Question> getAllSkillQuestions(Session session);
+
 	int getLectureQuestionCount(Session session);
 
 	int getFlashcardCount(Session session);
diff --git a/src/main/java/de/thm/arsnova/entities/transport/Answer.java b/src/main/java/de/thm/arsnova/entities/transport/Answer.java
index 133c0314..32d17963 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/Answer.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/Answer.java
@@ -41,6 +41,13 @@ public class Answer implements Serializable {
 
 	private boolean abstention;
 
+	public Answer(de.thm.arsnova.entities.Answer a) {
+		answerSubject = a.getAnswerSubject();
+		answerText = a.getAnswerText();
+		answerImage = a.getAnswerImage();
+		abstention = a.isAbstention();
+	}
+
 	@ApiModelProperty(required = true, value = "used to display text answer")
 	public String getAnswerText() {
 		return answerText;
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 27698954..6a0dd46b 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
@@ -17,9 +17,11 @@
  */
 package de.thm.arsnova.entities.transport;
 
+import java.util.ArrayList;
 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 io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -38,6 +40,13 @@ public class ImportExportSession {
 
 	private List<InterposedQuestion> feedbackQuestions;
 
+	private List<Motd> motds;
+
+	public ImportExportSession() {
+		questions = new ArrayList<ImportExportQuestion>();
+		feedbackQuestions = new ArrayList<InterposedQuestion>();
+	}
+
 	@ApiModelProperty(required = true, value = "used to display session")
 	public ImportExportSesssion getSession() {
 		return session;
@@ -65,6 +74,30 @@ public class ImportExportSession {
 		this.feedbackQuestions = feedbackQuestions;
 	}
 
+	public List<Motd> getMotds() {
+		return motds;
+	}
+
+	public void setMotds(List<Motd> mL) {
+		this.motds = mL;
+	}
+
+	public void setSessionFromSessionObject(Session s) {
+		ImportExportSesssion iesession = new ImportExportSesssion();
+		iesession.setName(s.getName());
+		iesession.setShortName(s.getShortName());
+		iesession.setActive(s.isActive());
+		PublicPool p = new PublicPool();
+		p.setPpFromSession(s);
+		iesession.setPublicPool(p);
+		session = iesession;
+	}
+
+	public void addQuestionWithAnswers(Question q, List<Answer> aL) {
+		ImportExportQuestion ieq = new ImportExportQuestion(q);
+		ieq.setAnswers(aL);
+	}
+
 	public Session generateSessionEntity(User user) {
 		final Session s = new Session();
 		// import fields
@@ -100,6 +133,53 @@ public class ImportExportSession {
 
 		private List<Answer> answers;
 
+		public ImportExportQuestion(Question q) {
+			setType(q.getType());
+			setQuestionType(q.getQuestionType());
+			setQuestionVariant(q.getQuestionVariant());
+			setSubject(q.getSubject());
+			setText(q.getText());
+			setActive(q.isActive());
+			setReleasedFor(q.getReleasedFor());
+			setPossibleAnswers(q.getPossibleAnswers());
+			setNoCorrect(q.isNoCorrect());
+			setSessionId(q.getSessionId());
+			setSessionKeyword(q.getSessionKeyword());
+			setTimestamp(q.getTimestamp());
+			setNumber(q.getNumber());
+			setDuration(q.getDuration());
+			setPiRound(q.getPiRound());
+			setPiRoundEndTime(q.getPiRoundEndTime());
+			setPiRoundStartTime(q.getPiRoundStartTime());
+			setPiRoundFinished(q.isPiRoundFinished());
+			setVotingDisabled(q.isVotingDisabled());
+			setShowStatistic(q.isShowStatistic());
+			setShowAnswer(q.isShowAnswer());
+			setAbstention(q.isAbstention());
+			setImage(q.getImage());
+			setFcImage(q.getFcImage());
+			setOffsetX(q.getOffsetX());
+			setOffsetY(q.getOffsetY());
+			setGridZoomLvl(q.getGridZoomLvl());
+			setGridSizeX(q.getGridSizeX());
+			setGridSizeY(q.getGridSizeY());
+			setGridIsHidden(q.getGridIsHidden());
+			setImgRotation(q.getImgRotation());
+			setToggleFieldsLeft(q.getToggleFieldsLeft());
+			setNumClickableFields(q.getNumClickableFields());
+			setThresholdCorrectAnswers(q.getThresholdCorrectAnswers());
+			setCvIsColored(q.getCvIsColored());
+			setGridLineColor(q.getGridLineColor());
+			setNumberOfDots(q.getNumberOfDots());
+			setGridType(q.getGridType());
+			setScaleFactor(q.getScaleFactor());
+			setGridScaleFactor(q.getGridScaleFactor());
+			setImageQuestion(q.isImageQuestion());
+			setTextAnswerEnabled(q.isTextAnswerEnabled());
+			setHint(q.getHint());
+			setSolution(q.getSolution());
+		}
+
 		@ApiModelProperty(required = true, value = " used to display answers")
 		public List<Answer> getAnswers() {
 			return answers;
@@ -181,6 +261,20 @@ public class ImportExportSession {
 
 		private String shortName;
 
+		public void setPpFromSession(Session s) {
+			ppAuthorName = s.getPpAuthorName();
+			ppAuthorMail = s.getPpAuthorMail();
+			ppUniversity = s.getPpUniversity();
+			ppLogo = s.getPpLogo();
+			ppSubject = s.getPpSubject();
+			ppLicense = s.getPpLicense();
+			ppLevel = s.getPpLevel();
+			ppDescription = s.getPpDescription();
+			ppFaculty = s.getPpFaculty();
+			name = s.getName();
+			shortName = s.getShortName();
+		}
+
 		@ApiModelProperty(required = true, value = "used to display author name")
 		public String getPpAuthorName() {
 			return ppAuthorName;
-- 
GitLab