diff --git a/src/main/java/de/thm/arsnova/controller/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/FeedbackController.java index b91cec4859999a684c3411ef6d106c1238de47b1..a976fb668258a1729875a56eca563cd78c4a3c5f 100644 --- a/src/main/java/de/thm/arsnova/controller/FeedbackController.java +++ b/src/main/java/de/thm/arsnova/controller/FeedbackController.java @@ -57,6 +57,17 @@ public class FeedbackController extends AbstractController { return feedbackService.getFeedback(sessionkey); } + @RequestMapping(value="/session/{sessionkey}/myfeedback", method=RequestMethod.GET) + @ResponseBody + public Integer getMyFeedback(@PathVariable String sessionkey, HttpServletResponse response) { + Integer value = feedbackService.getMyFeedback(sessionkey, userService.getCurrentUser()); + if (value != null && value >= 0 && value <= 3) { + return value; + } + response.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } + @RequestMapping(value="/session/{sessionkey}/feedbackcount", method=RequestMethod.GET) @ResponseBody public int getFeedbackCount(@PathVariable String sessionkey) { diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index d44832092d425a1109c932d1280ed09cb2699dcc..000034829332ed5ff3813d1309e3fea615c598ea 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -286,51 +286,38 @@ public class CouchDBDao implements IDatabaseDao { public Feedback getFeedback(String keyword) { String sessionId = this.getSessionId(keyword); if (sessionId == null) throw new NotFoundException(); - - logger.info("Time: {}", this.currentTimestamp()); - + View view = new View("understanding/by_session"); view.setGroup(true); view.setStartKey(URLEncoder.encode("[\"" + sessionId + "\"]")); view.setEndKey(URLEncoder.encode("[\"" + sessionId + "\",{}]")); ViewResults results = this.getDatabase().view(view); - logger.info("Feedback: {}", results.getJSONArray("rows")); + return this.createFeedbackObject(results); + } + private Feedback createFeedbackObject(ViewResults results) { int values[] = { 0, 0, 0, 0 }; + JSONArray rows = results.getJSONArray("rows"); try { for (int i = 0; i <= 3; i++) { - String key = results.getJSONArray("rows").optJSONObject(i) - .optJSONArray("key").getString(1); + String key = rows.optJSONObject(i).optJSONArray("key").getString(1); + JSONObject feedback = rows.optJSONObject(i); + if (key.equals("Bitte schneller")) - values[0] = results.getJSONArray("rows").optJSONObject(i) - .getInt("value"); + values[0] = feedback.getInt("value"); if (key.equals("Kann folgen")) - values[1] = results.getJSONArray("rows").optJSONObject(i) - .getInt("value"); + values[1] = feedback.getInt("value"); if (key.equals("Zu schnell")) - values[2] = results.getJSONArray("rows").optJSONObject(i) - .getInt("value"); + values[2] = feedback.getInt("value"); if (key.equals("Nicht mehr dabei")) - values[3] = results.getJSONArray("rows").optJSONObject(i) - .getInt("value"); + values[3] = feedback.getInt("value"); } } catch (Exception e) { - return new Feedback( - values[0], - values[1], - values[2], - values[3] - ); + return new Feedback(values[0], values[1], values[2], values[3]); } - - return new Feedback( - values[0], - values[1], - values[2], - values[3] - ); + return new Feedback(values[0], values[1], values[2], values[3]); } @Override @@ -397,6 +384,18 @@ public class CouchDBDao implements IDatabaseDao { return null; } } + + private int feedbackValueFromString(String value) { + if (value.equals("Bitte schneller")) + return 0; + if (value.equals("Kann folgen")) + return 1; + if (value.equals("Zu schnell")) + return 2; + if (value.equals("Nicht mehr dabei")) + return 3; + return Integer.MIN_VALUE; + } @Override @Transactional(isolation=Isolation.READ_COMMITTED) @@ -566,4 +565,26 @@ public class CouchDBDao implements IDatabaseDao { return; } } + + @Override + public Integer getMyFeedback(String keyword, User user) { + try { + String sessionId = this.getSessionId(keyword); + if (sessionId == null) throw new NotFoundException(); + + View view = new View("understanding/by_user"); + view.setKey(URLEncoder.encode("[\"" + sessionId + "\", \"" + user.getUsername() + "\"]", "UTF-8")); + ViewResults results = this.getDatabase().view(view); + JSONArray rows = results.getJSONArray("rows"); + + if (rows.size() == 0) { + return null; + } + + JSONObject json = rows.optJSONObject(0).optJSONObject("value"); + return this.feedbackValueFromString(json.getString("value")); + } catch (UnsupportedEncodingException 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 ff42a9a69fad530bb623b9103babf29067fabe83..7a2aafd2d4c168e02306af21ea08c3537135a991 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -44,4 +44,5 @@ public interface IDatabaseDao { public LoggedIn registerAsOnlineUser(User u, Session s); public void updateSessionOwnerActivity(Session session); + public Integer getMyFeedback(String keyword, User user); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/services/FeedbackService.java index 2b4e7f728b5c36d87b9d9b7d8e8587819a9f708f..c7b79874448ad13510441f596c49f5d848b83c57 100644 --- a/src/main/java/de/thm/arsnova/services/FeedbackService.java +++ b/src/main/java/de/thm/arsnova/services/FeedbackService.java @@ -109,4 +109,9 @@ public class FeedbackService implements IFeedbackService { } this.server.reportUpdatedFeedbackForSessions(allAffectedSessions); } + + @Override + public Integer getMyFeedback(String keyword, User user) { + return this.databaseDao.getMyFeedback(keyword, user); + } } diff --git a/src/main/java/de/thm/arsnova/services/IFeedbackService.java b/src/main/java/de/thm/arsnova/services/IFeedbackService.java index bacfb70f7fdfdf24f2a94b9ba672511a40796e3d..f8199725841d5764a8873055b4b4b47c1cd25d70 100644 --- a/src/main/java/de/thm/arsnova/services/IFeedbackService.java +++ b/src/main/java/de/thm/arsnova/services/IFeedbackService.java @@ -33,4 +33,5 @@ public interface IFeedbackService { public long getAverageFeedback(String sessionkey); public boolean saveFeedback(String keyword, int value, User user); public void broadcastFeedbackChanges(Map<String, Set<String>> affectedUsers, Set<String> allAffectedSessions); + public Integer getMyFeedback(String keyword, User user); } \ No newline at end of file diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 10f800d1da514247899c5701fc502e53eee683da..8d22f53c240f2e823aa393365b71ab9ce4bab83f 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -163,4 +163,10 @@ public class StubDatabaseDao implements IDatabaseDao { } + @Override + public Integer getMyFeedback(String keyword, User user) { + // TODO Auto-generated method stub + return null; + } + }