From 6079d7c8273008d6037ee4d1139c84802d8adfe7 Mon Sep 17 00:00:00 2001 From: Julian Hochstetter <julian.hochstetter@mni.thm.de> Date: Mon, 29 Oct 2012 12:45:44 +0100 Subject: [PATCH] Task #4040: getUserAnswer --- .../controller/QuestionController.java | 12 ++- .../java/de/thm/arsnova/dao/CouchDBDao.java | 32 ++++++- .../java/de/thm/arsnova/dao/IDatabaseDao.java | 3 + .../java/de/thm/arsnova/entities/Answer.java | 94 +++++++++++++++++++ .../arsnova/services/IQuestionService.java | 3 + .../thm/arsnova/services/QuestionService.java | 7 ++ .../de/thm/arsnova/dao/StubDatabaseDao.java | 7 ++ 7 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/thm/arsnova/entities/Answer.java diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java index a2ba46452..73049c416 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java @@ -31,9 +31,9 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Question; import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.services.IQuestionService; @@ -128,4 +128,14 @@ public class QuestionController extends AbstractController { logger.info(answers.toString()); return answers; } + + @RequestMapping(value="/session/{sessionKey}/question/{questionId}/myanswer", method=RequestMethod.GET) + @ResponseBody + public Answer getMyAnswer(@PathVariable String sessionKey, @PathVariable String questionId, HttpServletResponse response) { + Answer answer = questionService.getMyAnswer(sessionKey, questionId); + if(answer == null) { + throw new NotFoundException(); + } + return answer; + } } diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 5bbcc0979..9215e163b 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -52,6 +52,7 @@ import com.fourspaces.couchdb.Document; import com.fourspaces.couchdb.View; import com.fourspaces.couchdb.ViewResults; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.PossibleAnswer; @@ -688,11 +689,38 @@ public class CouchDBDao implements IDatabaseDao { } return unanswered; } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + logger.error("Error while retrieving unansweredquestions", e); } + return null; + } + + @Override + public Answer getMyAnswer(String sessionKey, String questionId) { + User user = userService.getCurrentUser(); + if(user == null) { + throw new UnauthorizedException(); + } + + Session s = this.getSessionFromKeyword(sessionKey); + if(s == null) { + throw new NotFoundException(); + } + + try { + View view = new View("answer/by_question_and_user"); + view.setKey("[" + URLEncoder.encode("\"" + questionId + "\",\"" + user.getUsername() + "\"", "UTF-8") + "]"); + ViewResults results = this.getDatabase().view(view); + if(results.getResults().isEmpty()) { + throw new NotFoundException(); + } + return (Answer) JSONObject.toBean(results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), + Answer.class); + } catch (UnsupportedEncodingException e) { + logger.error("Error while retrieving unansweredquestions", 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 db570db75..e68b08329 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -21,6 +21,7 @@ package de.thm.arsnova.dao; import java.util.List; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.LoggedIn; @@ -64,4 +65,6 @@ public interface IDatabaseDao { public List<String> getUnAnsweredQuestions(String sessionKey); + public Answer getMyAnswer(String sessionKey, String questionId); + } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java new file mode 100644 index 000000000..1ef1553f0 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/Answer.java @@ -0,0 +1,94 @@ +package de.thm.arsnova.entities; + +import java.util.ArrayList; +import java.util.List; + +/* +"type":"skill_question_answer", +"sessionId":"61d33ea2ec73acefbba898c3510325c9", +"questionId":"61d33ea2ec73acefbba898c351040280", +"answerText":"2500 $", +"user":"jhtr80" +}} + +*/ +public class Answer { + + private String _id; + private String _rev; + private String type; + private String sessionId; + private String questionId; + private String answerText; + private String user; + + public Answer() { + this.type = "skill_question_answer"; + } + + public String get_id() { + return _id; + } + + public void set_id(String _id) { + this._id = _id; + } + + public String get_rev() { + return _rev; + } + + public void set_rev(String _rev) { + this._rev = _rev; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSessionId() { + return sessionId; + } + + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + public String getQuestionId() { + return questionId; + } + + public void setQuestionId(String questionId) { + this.questionId = questionId; + } + + public String getAnswerText() { + return answerText; + } + + public void setAnswerText(String answerText) { + this.answerText = answerText; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + @Override + public String toString() { + return "Answer type:'" + type + "'" + + ", session: " + sessionId + + ", question: " + questionId + + ", answer: " + answerText + + ", 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 931db1309..72cc41f60 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -21,6 +21,7 @@ package de.thm.arsnova.services; import java.util.List; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Question; public interface IQuestionService { @@ -37,4 +38,6 @@ public interface IQuestionService { public void deleteQuestion(String sessionKey, String questionId); public List<String> getUnAnsweredQuestions(String sessionKey); + + public Answer getMyAnswer(String sessionKey, String questionId); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 097b37dc6..be738f107 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; import de.thm.arsnova.annotation.Authenticated; import de.thm.arsnova.dao.IDatabaseDao; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.Session; import de.thm.arsnova.exceptions.NoContentException; @@ -93,4 +94,10 @@ public class QuestionService implements IQuestionService { public List<String> getUnAnsweredQuestions(String sessionKey) { return databaseDao.getUnAnsweredQuestions(sessionKey); } + + @Override + @Authenticated + public Answer getMyAnswer(String sessionKey, String questionId) { + return databaseDao.getMyAnswer(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 9bbcbed03..d78b5574b 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -8,6 +8,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Question; @@ -199,4 +200,10 @@ public class StubDatabaseDao implements IDatabaseDao { return null; } + @Override + public Answer getMyAnswer(String sessionKey, String questionId) { + // TODO Auto-generated method stub + return null; + } + } -- GitLab