From 177963837ef0f3f5b59773e82a2adc609f50e62e Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Tue, 30 Oct 2012 14:16:53 +0100
Subject: [PATCH] Task #4043: getAnsweredFreetextQuestions

---
 .../controller/QuestionController.java        | 11 +++++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 30 +++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 .../java/de/thm/arsnova/entities/Answer.java  | 26 ++++++++++++++++
 .../arsnova/services/IQuestionService.java    |  2 ++
 .../thm/arsnova/services/QuestionService.java |  6 ++++
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  6 ++++
 7 files changed, 83 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java
index f2d1baad..3f7b63a0 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java
@@ -219,5 +219,16 @@ public class QuestionController extends AbstractController {
 	) {
 		return questionService.getAnswerCount(sessionKey, questionId);
 	}
+	
+	@RequestMapping(value = "/session/{sessionKey}/question/{questionId}/freetextanswers", method = RequestMethod.GET)
+	@ResponseBody
+	public final List<Answer> getFreetextAnswers(
+			@PathVariable final String sessionKey,
+			@PathVariable final String questionId,
+			final HttpServletResponse response
+	) {
+		return questionService.getFreetextAnswers(sessionKey, questionId);
+	}
+	
 
 }
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 21a51dd3..9a5c3336 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -792,4 +792,34 @@ public class CouchDBDao implements IDatabaseDao {
 		}
 		return 0;
 	}
+	
+	@Override
+	public List<Answer> getFreetextAnswers(String sessionKey, String questionId) {
+		Session s = this.getSessionFromKeyword(sessionKey);
+		if (s == null) {
+			throw new NotFoundException();
+		}
+
+		try {
+			View view = new View("skill_question/freetext_answers");
+			view.setKey(URLEncoder.encode("\"" + questionId + "\"", "UTF-8"));
+			ViewResults results = this.getDatabase().view(view);
+			if (results.getResults().isEmpty()) {
+				throw new NotFoundException();
+			}
+			List<Answer> answers = new ArrayList<Answer>();
+			for (Document d : results.getResults()) {
+				Answer a = (Answer) JSONObject.toBean(d.getJSONObject().getJSONObject("value"), Answer.class);
+				a.setSessionId(s.get_id());
+				a.setQuestionId(questionId);
+				answers.add(a);
+			}
+			return answers;
+			
+		} catch (UnsupportedEncodingException e) {
+			LOGGER.error("Error while retrieving freetext answers", e);
+		}
+		
+		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 524a8d98..7c7aeeb3 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -70,4 +70,6 @@ public interface IDatabaseDao {
 	List<Answer> getAnswers(String sessionKey, String questionId);
 
 	int getAnswerCount(String sessionKey, String questionId);
+
+	List<Answer> getFreetextAnswers(String sessionKey, String questionId);
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java
index 3a3ef5d4..4159ea62 100644
--- a/src/main/java/de/thm/arsnova/entities/Answer.java
+++ b/src/main/java/de/thm/arsnova/entities/Answer.java
@@ -11,6 +11,7 @@ public class Answer {
 	private String answerText;
 	private String answerSubject;
 	private String user;
+	private long timestamp;
 	private int answerCount;
 
 	public Answer() {
@@ -65,6 +66,15 @@ public class Answer {
 		this.answerText = answerText;
 	}
 
+	public final String getText() {
+		return answerText;
+	}
+
+	public final void setText(final String answerText) {
+		this.answerText = answerText;
+	}
+
+	
 	public final String getAnswerSubject() {
 		return answerSubject;
 	}
@@ -72,6 +82,14 @@ public class Answer {
 	public final void setAnswerSubject(final String answerSubject) {
 		this.answerSubject = answerSubject;
 	}
+	
+	public final String getSubject() {
+		return answerSubject;
+	}
+
+	public final void setSubject(final String answerSubject) {
+		this.answerSubject = answerSubject;
+	}
 
 	public final String getUser() {
 		return user;
@@ -81,6 +99,14 @@ public class Answer {
 		this.user = user;
 	}
 
+	public long getTimestamp() {
+		return timestamp;
+	}
+
+	public void setTimestamp(long timestamp) {
+		this.timestamp = timestamp;
+	}
+
 	public final int getAnswerCount() {
 		return answerCount;
 	}
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index ebc3704b..a6977fe0 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -44,4 +44,6 @@ public interface IQuestionService {
 	List<Answer> getAnswers(String sessionKey, String questionId);
 
 	int getAnswerCount(String sessionKey, String questionId);
+
+	List<Answer> getFreetextAnswers(String sessionKey, String questionId);
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index 7572c77f..e8677527 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -112,4 +112,10 @@ public class QuestionService implements IQuestionService {
 	public int getAnswerCount(String sessionKey, String questionId) {
 		return databaseDao.getAnswerCount(sessionKey, questionId);
 	}
+	
+	@Override
+	@Authenticated
+	public List<Answer> getFreetextAnswers(String sessionKey, String questionId) {
+		return databaseDao.getFreetextAnswers(sessionKey, questionId);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index c2e8a13d..033548ec 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -218,4 +218,10 @@ public class StubDatabaseDao implements IDatabaseDao {
 		return 0;
 	}
 
+	@Override
+	public List<Answer> getFreetextAnswers(String sessionKey, String questionId) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }
-- 
GitLab