diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 4663c22954e415f7ab6a6f9e9e6ccd13c9b13497..0fdfbc4b32b7d0807be2f70eaadebef443299af4 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -20,6 +20,7 @@ package de.thm.arsnova.dao; import java.io.IOException; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -550,6 +551,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware q.put("gridType", question.getGridType()); q.put("scaleFactor", question.getScaleFactor()); q.put("gridScaleFactor", question.getGridScaleFactor()); + q.put("timestamp", question.getTimestamp()); return q; } @@ -1973,14 +1975,6 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware for (final Document d : results.getResults()) { final String s = d.getString("value"); qids.add(s); - /*final Answer a = new Answer(); - a.setAnswerCount(d.getInt("value")); - a.setAbstentionCount(abstentionCount); - a.setQuestionId(d.getJSONObject().getJSONArray("key").getString(0)); - a.setPiRound(piRound); - final String answerText = d.getJSONObject().getJSONArray("key").getString(2); - a.setAnswerText("null".equals(answerText) ? null : answerText); - answers.add(a);*/ } return qids; @@ -2004,21 +1998,38 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware if (results.getResults().isEmpty()) { return null; } + + SortOrder sortOrder = new SortOrder(); + + for (final Document d : results.getResults()) { + sortOrder.set_id(d.getJSONObject("value").getString("_id")); + sortOrder.set_rev(d.getJSONObject("value").getString("_rev")); + sortOrder.setSessionId(d.getJSONObject("value").getString("sessionId")); + sortOrder.setSortType(d.getJSONObject("value").getString("sortType")); + sortOrder.setQuestionVariant(d.getJSONObject("value").getString("questionVariant")); + List<String> sort = new ArrayList<String>(); + JSONArray json = d.getJSONObject("value").getJSONArray("sortOrder"); + int len = json.size(); + for (int i=0; i<len; i++) { + sort.add(json.getString(i)); + } + sortOrder.setSortOrder(sort); + } - return (SortOrder) JSONObject.toBean( - results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), - SortOrder.class - ); + return sortOrder; } @Override public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) { try { - String id = sortOrder.get_id(); - String rev = sortOrder.get_rev(); + SortOrder oldSortOrder = getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject()); Document d = new Document(); - if (null != id) { + String id = ""; + String rev = ""; + if (oldSortOrder != null) { + id = oldSortOrder.get_id(); + rev = oldSortOrder.get_rev(); d = database.getDocument(id, rev); } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index f75086ac5c023ad842d23f7df0fbfcbbcbc08f1a..f1c27686f548cc398d56359e96ef84617658cb1a 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -140,10 +140,23 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis final Question result = databaseDao.saveQuestion(session, question); - SortOrder sortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject()); - if (sortOrder != null) { - addQuestionToSortOrder(sortOrder, question); - databaseDao.createOrUpdateSortOrder(sortOrder); + SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), ""); + if (subjectSortOrder != null) { + SortOrder questionSortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject()); + if (questionSortOrder == null) { + List<String> s = new ArrayList<String>(); + s.add(question.getSubject()); + SortOrder newQSortOrder = new SortOrder(); + newQSortOrder.setSessionId(question.get_id()); + newQSortOrder.setSortType(subjectSortOrder.getSortType()); + newQSortOrder.setQuestionVariant(subjectSortOrder.getQuestionVariant()); + newQSortOrder.setSortOrder(s); + databaseDao.createOrUpdateSortOrder(newQSortOrder); + addToSortOrder(subjectSortOrder, question.getSubject()); + } + else { + addToSortOrder(questionSortOrder, question.get_id()); + } } final NewQuestionEvent event = new NewQuestionEvent(this, session, result); @@ -589,11 +602,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis subjectSortOrder = createSortOrder(session, "lecture", ""); } final User user = userService.getCurrentUser(); - if (session.isCreator(user)) { - return getQuestionsBySortOrder(subjectSortOrder, false); - } else { - return getQuestionsBySortOrder(subjectSortOrder, true); - } + return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user)); } @Override @@ -617,11 +626,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis subjectSortOrder = createSortOrder(session, "preparation", ""); } final User user = userService.getCurrentUser(); - if (session.isCreator(user)) { - return getQuestionsBySortOrder(subjectSortOrder, false); - } else { - return getQuestionsBySortOrder(subjectSortOrder, true); - } + return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user)); } private Session getSession(final String sessionkey) { @@ -829,14 +834,14 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis return sortOrder.getSortType(); } - public SortOrder addQuestionToSortOrder(SortOrder sortOrder, Question question) { + public SortOrder addToSortOrder(SortOrder sortOrder, String toBeAdded) { List<String> tmpList = sortOrder.getSortOrder(); - tmpList.add(question.get_id()); + tmpList.add(toBeAdded); sortOrder.setSortOrder(tmpList); if("alphabet".equals(sortOrder.getSortType())) { sortOrder = alphabeticalSort(sortOrder); } - return sortOrder; + return databaseDao.createOrUpdateSortOrder(sortOrder); } public List<Question> getQuestionsBySortOrder(SortOrder subjectSortOrder, boolean onlyActive) {