diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 0ec989191d2b4b7c018a29a69fee5b146e2cb698..df3e5e05d68abf0e41e6b1decc02e36c2da81f09 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -71,6 +71,7 @@ import de.thm.arsnova.entities.SessionInfo; import de.thm.arsnova.entities.Statistics; import de.thm.arsnova.entities.User; import de.thm.arsnova.entities.VisitedSession; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.entities.transport.AnswerQueueElement; import de.thm.arsnova.entities.transport.ImportExportSession; import de.thm.arsnova.entities.transport.ImportExportSession.ImportExportQuestion; @@ -1381,22 +1382,26 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Cacheable("lecturequestions") @Override public List<Question> getLectureQuestionsForUsers(final Session session) { - String viewName = "question_sort/lecture_question_by_session_sorted_for_all"; - List<Question> result = getQuestions(new NovaView(viewName), session); - if(result == null) { + SortOrder sortOrder = getSortOrder(session, "lecture"); + if (sordOrder != null) { + //get Questionds via sortOrder List<Question> result = + } + else { String viewName = "skill_question/lecture_question_by_session_for_all"; - result = getQuestions(new NovaView(viewName), session); + List<Question> result = getQuestions(new NovaView(viewName), session); } return result; } @Override public List<Question> getLectureQuestionsForTeachers(final Session session) { - String viewName = "question_sort/lecture_question_by_session_sorted"; - List<Question> result = getQuestions(new NovaView(viewName), session); - if (result == null) { + SortOrder sortOrder = getSortOrder(session, "lecture"); + if (sordOrder != null) { + //get Questionds via sortOrder + } + else { String viewName = "skill_question/lecture_question_by_session"; - result = getQuestions(new NovaView(viewName), session); + List<Question> result = getQuestions(new NovaView(viewName), session); } return result; } @@ -1417,22 +1422,25 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Cacheable("preparationquestions") @Override public List<Question> getPreparationQuestionsForUsers(final Session session) { - String viewName = "question_sort/preparation_question_by_session_sorted_for_all"; - List<Question> result = getQuestions(new NovaView(viewName), session); - if (result == null) { + SortOrder sortOrder = getSortOrder(session, "preparation"); + if (sordOrder != null) { + //get Questionds via sortOrder + } + else { String viewName = "skill_question/preparation_question_by_session_for_all"; - result = getQuestions(new NovaView(viewName), session); + return getQuestions(new NovaView(viewName), session); } - return result; } @Override public List<Question> getPreparationQuestionsForTeachers(final Session session) { - String viewName = "question_sort/preparation_question_by_session_sorted"; - List<Question> result = getQuestions(new NovaView(viewName), session); - if (result == null) { + SortOrder sortOrder = getSortOrder(session, "preparation"); + if (sordOrder != null) { + //get Questionds via sortOrder + } + else { String viewName = "skill_question/preparation_question_by_session"; - result = getQuestions(new NovaView(viewName), session); + return getQuestions(new NovaView(viewName), session); } return result; } @@ -1930,22 +1938,52 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware return info; } - @OVerride - String getSaveOrderId(Session session) { - String view = "question_sort/get_id"; + @Override + SortOrder getSortOrder(Session session, String questionVariant) { + if ("preparation".equals(questionVariant)) { + String viewString = "sort_order/preparation_question_sort_order_by_session"; + } + else if ("lecture".euals(questionVariant)) { + String viewString = "sort_order/lecture_question_sort_order_by_session"; + } + NovaView view = new NovaView(viewString); + view.setKey(session.get_id()); + ViewResults results = this.getDatabase().view(view); + + if (results.getJSONArray("rows").optJSONObject(0) == null) { + return null; + } + + return (SortOrder) JSONObject.toBean( + results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), + SortOrder.class + ); } @Override - String saveQuestionSort(Session session, final String[] sortOrder) { - final Document a = new Document(); - a.put("type", "question_sort"); - a.put("sessionId", session.getSessionId()); - a.put("sortOrder", sortOrder); + SortOrder createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder) { try { - database.saveDocument(a); - } catch (final IOException e) { - return null; + String id = sortOrder.get_id(); + String rev = sortOrder.get_rev(); + Document d = new Document(); + + if (null != id) { + d = database.getDocument(id, rev); + } + + d.put("type", "sort_order"); + d.put("sessionId", session.get_id()); + d.put("questionVariant", sortOrder.getQuestionVariant()); + d.put("sortOrder", sortOrder.getSortOrder()); + + database.saveDocument(d, id); + sortOrder.setId(d.getId()); + sortOrder.setRev(d.getRev()); + + return sotOrder; + } catch (IOException e) { + LOGGER.error("Could not save user {}", user); } - return sortOrder; + 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 eb38f6fab366af5f425c67d482ef0423e56d9b22..5ae19e9213d8c2d06819c0425b63437a00571fc3 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -31,6 +31,7 @@ import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.SessionInfo; import de.thm.arsnova.entities.Statistics; import de.thm.arsnova.entities.User; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.entities.transport.ImportExportSession; public interface IDatabaseDao { @@ -197,7 +198,7 @@ public interface IDatabaseDao { Statistics getStatistics(); - String getSaveOrderId(Session session); + String getSortOrder(Session session, String questionVariant); - String saveQuestionSort(Session session, final String[] sortOrder); + String createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder); } diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java index a5df967d538ae09f94848b2ec42ac740cfd16eab..2c801d69720decd34d373e7982b2154d403ea0dd 100644 --- a/src/main/java/de/thm/arsnova/entities/Session.java +++ b/src/main/java/de/thm/arsnova/entities/Session.java @@ -311,13 +311,5 @@ public class Session implements Serializable { Session other = (Session) obj; return this.keyword.equals(other.keyword); } - // Sorting - public boolean getSortLectureQuestions(){ - return false; - } - // Sorting - public boolean getSortPreparationQuestions(){ - return false; - } } diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java index eff50018d9573d304d531f37dbb9ff2a86eb4f3c..b3aba0cd4bc1e2a5e2a406eade541126b8f5bf41 100644 --- a/src/main/java/de/thm/arsnova/entities/SortOrder.java +++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java @@ -17,115 +17,43 @@ */ package de.thm.arsnova.entities; -public class Statistics { +public class SortOrder { - private int answers; - private int lectureQuestions; - private int preparationQuestions; - private int openSessions; - private int closedSessions; - private int activeUsers; - private int loggedinUsers; - private int interposedQuestions; + private String sortVariant; + private String[] sortOrder; - public int getAnswers() { - return answers; - } - - public void setAnswers(final int answers) { - this.answers = answers; - } - - public int getLectureQuestions() { - return lectureQuestions; - } - - public void setLectureQuestions(final int questions) { - this.lectureQuestions = questions; - } - - public int getPreparationQuestions() { - return preparationQuestions; - } - - public void setPreparationQuestions(final int questions) { - this.preparationQuestions = questions; - } - - public int getQuestions() { - return getLectureQuestions() + getPreparationQuestions(); - } - - public int getOpenSessions() { - return openSessions; - } - - public void setOpenSessions(final int openSessions) { - this.openSessions = openSessions; - } - - public int getClosedSessions() { - return closedSessions; - } - - public void setClosedSessions(final int closedSessions) { - this.closedSessions = closedSessions; - } - - public int getSessions() { - return getOpenSessions() + getClosedSessions(); - } - - public int getActiveUsers() { - return activeUsers; - } - - public void setActiveUsers(final int activeUsers) { - this.activeUsers = activeUsers; - } - - public int getLoggedinUsers() { - return loggedinUsers; - } - - public void setLoggedinUsers(final int loggedinUsers) { - this.loggedinUsers = loggedinUsers; - } + private String _id; + private String _rev; + + public void setSortVariant(final String sortVariant) { + this.sortVariant = sortVariant; + } + + public String getSortVariant() { + return this.sortVariant; + } + + public void setSortOrder(final String[] sortOrder) { + this.sortOrder = sortOrder; + } + + public String[] getSortOrder() { + return this.sortOrder; + } - public int getInterposedQuestions() { - return interposedQuestions; + public void set_id(final String id) { + _id = id; } - public void setInterposedQuestions(int interposedQuestions) { - this.interposedQuestions = interposedQuestions; + public String get_id() { + return _id; } - @Override - public int hashCode() { - return (this.getClass().getName() - + activeUsers - + answers - + closedSessions - + openSessions - + lectureQuestions - + preparationQuestions - + interposedQuestions - + loggedinUsers - ).hashCode(); + public void set_rev(final String rev) { + _rev = rev; } - @Override - public boolean equals(final Object obj) { - if (obj == null) { - return false; - } - if (obj == this) { - return true; - } - if (obj instanceof Statistics) { - final Statistics other = (Statistics) obj; - return hashCode() == other.hashCode(); - } - return false; - } + public String get_rev() { + return _rev; + } } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 532e2d9c9fcca733c00d52169b27ec87e509fc1d..dae73c9224e4256cb6404af3654815d86cc7e9b1 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -44,6 +44,7 @@ import de.thm.arsnova.entities.InterposedReadingCount; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.events.DeleteAllLectureAnswersEvent; import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent; import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent; @@ -107,19 +108,6 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } else if (question.getPiRound() < 1 || question.getPiRound() > 2) { question.setPiRound(1); } - - // if SortIndex false, list is sorted so new question is appended to sorted list with (highest sequenceNr)++ - if ("lecture".equals(question.getQuestionVariant())) { - if(session.getSortLectureQuestions()) { - //Take a look at entities/Session.java - //question.setSequenceNo(); - } - } else if ("preparation".equals(question.getQuestionVariant())) { - if(session.getSortPreparationQuestions()) { - //Take a look at entities/Session.java - //question.setSequenceNo(); - } - } // convert imageurl to base64 if neccessary if ("grid".equals(question.getQuestionType())) { @@ -138,6 +126,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis throw new BadRequestException(); } } + + SortOrder sortOrder = databaseDao.getSortOrder(session, question.getQuestionVariant); + if (sortOrder != null) { + + } + final Question result = databaseDao.saveQuestion(session, question); final NewQuestionEvent event = new NewQuestionEvent(this, session, result);