From 7c916b2da6345b70d0a64f91451a09ce59378f9c Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Wed, 13 Feb 2013 17:07:47 +0100
Subject: [PATCH] Added methods to save answers

---
 .../QuestionByLecturerController.java         | 10 +++++++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 21 ++++++++++++++++++-
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 .../arsnova/services/IQuestionService.java    |  2 ++
 .../thm/arsnova/services/QuestionService.java |  8 +++++++
 5 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
index d93f1fa6..1fda317e 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
@@ -248,6 +248,16 @@ public class QuestionByLecturerController extends AbstractController {
 		return answers;
 	}
 
+	@RequestMapping(value = "/{questionId}/answer", method = RequestMethod.POST)
+	@ResponseBody
+	public final Answer saveAnswer(
+			@PathVariable final String questionId,
+			@RequestBody final Answer answer,
+			final HttpServletResponse response
+		) {
+		return questionService.saveAnswer(answer);
+	}
+
 	@RequestMapping(value = "/{questionId}/answers", method = RequestMethod.DELETE)
 	@ResponseBody
 	public final void deleteAnswers(
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index c23e7333..3a75ab9d 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -816,7 +816,7 @@ public class CouchDBDao implements IDatabaseDao {
 			);
 			ViewResults results = this.getDatabase().view(view);
 			if (results.getResults().isEmpty()) {
-				throw new NotFoundException();
+				return null;
 			}
 			return (Answer) JSONObject.toBean(
 					results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"),
@@ -1263,4 +1263,23 @@ public class CouchDBDao implements IDatabaseDao {
 			return null;
 		}
 	}
+
+	@Override
+	public Answer saveAnswer(Answer answer, User user) {
+		try {
+			Document a = new Document();
+			a.put("type", "skill_question_answer");
+			a.put("sessionId", answer.getSessionId());
+			a.put("questionId", answer.getQuestionId());
+			a.put("answerText", answer.getAnswerText());
+			a.put("user", user.getUsername());
+			this.database.saveDocument(a);
+			answer.set_id(a.getId());
+			answer.set_rev(a.getRev());
+			return answer;
+		} catch (IOException e) {
+			LOGGER.error("Could not save answer {}", answer);
+		}
+		return null;
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 1dd2ab0b..8c1775fb 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -118,4 +118,6 @@ public interface IDatabaseDao {
 	void updateQuestion(Question question);
 
 	void deleteAnswers(Question question);
+
+	Answer saveAnswer(Answer answer, User user);
 }
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index cad84bfb..2d932dca 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -67,4 +67,6 @@ public interface IQuestionService {
 
 	void deleteAnswers(String questionId);
 
+	Answer saveAnswer(Answer answer);
+
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index d3d519f5..069ae091 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -234,4 +234,12 @@ public class QuestionService implements IQuestionService {
 		}
 		this.databaseDao.updateQuestion(question);
 	}
+
+	@Override
+	@Authenticated
+	public Answer saveAnswer(Answer answer) {
+		// TODO: Sanity checks...
+		User user = userService.getCurrentUser();
+		return this.databaseDao.saveAnswer(answer, user);
+	}
 }
-- 
GitLab