From e7974c89d828ccfc35bc77751c4b7798f50f278f Mon Sep 17 00:00:00 2001 From: tekay <tom.kaesler@mni.thm.de> Date: Fri, 13 Mar 2015 15:20:00 +0100 Subject: [PATCH] #15360 reworked alphabetical sort --- .../LecturerQuestionController.java | 29 ++++---- .../java/de/thm/arsnova/dao/CouchDBDao.java | 41 ++--------- .../java/de/thm/arsnova/dao/IDatabaseDao.java | 4 +- .../de/thm/arsnova/entities/SortOrder.java | 8 ++- .../arsnova/services/IQuestionService.java | 5 ++ .../thm/arsnova/services/QuestionService.java | 72 ++++++++++++++++--- .../de/thm/arsnova/dao/StubDatabaseDao.java | 13 ++++ 7 files changed, 113 insertions(+), 59 deletions(-) diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index b160c1722..e3ca7e6e2 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -430,14 +430,16 @@ public class LecturerQuestionController extends AbstractController { @RequestMapping(value = "/setsubjectsort", method = RequestMethod.POST) public void setSubjectSortOrder( - @PathVariable final String questionId, - @RequestParam(required = false) final Boolean publish, - @RequestBody final Question question + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String sortType, + @RequestParam(required = true) final String isPreparation, + @RequestBody String[] sortOrder ) { - if (publish != null) { - question.setActive(publish); + try { + questionService.setSubjectSort(sessionkey, sortType, isPreparation, sortOrder) ; + } catch (final Exception e) { + throw new BadRequestException(); } - //whaat? } @RequestMapping(value = "/getsubjectsort", method = RequestMethod.GET) @@ -450,14 +452,17 @@ public class LecturerQuestionController extends AbstractController { @RequestMapping(value = "/setquestionsort", method = RequestMethod.POST) public void setQuestionSortOrder( - @PathVariable final String questionId, - @RequestParam(required = false) final Boolean publish, - @RequestBody final Question question + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String subject, + @RequestParam(required = true) final String sortType, + @RequestParam(required = true) final String isPreparation, + @RequestBody String[] sortOrder ) { - if (publish != null) { - question.setActive(publish); + try { + questionService.setQuestionSort(sessionkey, subject, sortType, isPreparation, sortOrder); + } catch (final Exception e) { + throw new BadRequestException(); } - //whaat? } @RequestMapping(value = "/getquestionsort", method = RequestMethod.GET) diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index b747ab4fe..3350c198d 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1396,14 +1396,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware public List<Question> getLectureQuestionsForUsers(final Session session) { SortOrder subjectSortOrder = getSortOrder(session.get_id(), "lecture", ""); if (subjectSortOrder != null) { - List<Question> questions = new ArrayList<Question>(); - if ("alphabet".equals(subjectSortOrder.getSortType())) { - // i srsly dunno, lol - } - else { - questions = getQuestionsBySortOrder(subjectSortOrder, true); - } - return questions; + return getQuestionsBySortOrder(subjectSortOrder, true); } else { String viewName = "skill_question/lecture_question_by_session_for_all"; @@ -1415,14 +1408,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware public List<Question> getLectureQuestionsForTeachers(final Session session) { SortOrder subjectSortOrder = getSortOrder(session.get_id(), "lecture", ""); if (subjectSortOrder != null) { - List<Question> questions = new ArrayList<Question>(); - if ("alphabet".equals(subjectSortOrder.getSortType())) { - // i srsly dunno, lol - } - else { - questions = getQuestionsBySortOrder(subjectSortOrder, false); - } - return questions; + return getQuestionsBySortOrder(subjectSortOrder, true); } else { String viewName = "skill_question/lecture_question_by_session"; @@ -1448,14 +1434,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware public List<Question> getPreparationQuestionsForUsers(final Session session) { SortOrder subjectSortOrder = getSortOrder(session.get_id(), "preparation", ""); if (subjectSortOrder != null) { - List<Question> questions = new ArrayList<Question>(); - if ("alphabet".equals(subjectSortOrder.getSortType())) { - // i srsly dunno, lol - } - else { - questions = getQuestionsBySortOrder(subjectSortOrder, true); - } - return questions; + return getQuestionsBySortOrder(subjectSortOrder, true); } else { String viewName = "skill_question/preparation_question_by_session_for_all"; @@ -1467,14 +1446,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware public List<Question> getPreparationQuestionsForTeachers(final Session session) { SortOrder subjectSortOrder = getSortOrder(session.get_id(), "preparation", ""); if (subjectSortOrder != null) { - List<Question> questions = new ArrayList<Question>(); - if ("alphabet".equals(subjectSortOrder.getSortType())) { - // i srsly dunno, lol - } - else { - questions = getQuestionsBySortOrder(subjectSortOrder, false); - } - return questions; + return getQuestionsBySortOrder(subjectSortOrder, true); } else { String viewName = "skill_question/preparation_question_by_session"; @@ -1999,7 +1971,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware } @Override - public SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder) { + public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) { try { String id = sortOrder.get_id(); String rev = sortOrder.get_rev(); @@ -2011,6 +1983,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware d.put("type", "sort_order"); d.put("sessionId", sortOrder.getSessionId()); + d.put("sortType", sortOrder.getSortType()); d.put("questionVariant", sortOrder.getQuestionVariant()); d.put("subject", sortOrder.getSubject()); d.put("sortOrder", sortOrder.getSortOrder()); @@ -2028,7 +2001,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware public List<Question> getQuestionsBySortOrder(SortOrder sortOrder, boolean onlyActive) { List<Question> questions = new ArrayList<Question>(); - String[] questionIds = sortOrder.getSortOrder(); + List<String> questionIds = sortOrder.getSortOrder(); for (String t : questionIds) { Question tempQuestion = getQuestion(t); if (onlyActive) { diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 037c3ca0e..693bcaba0 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -198,7 +198,7 @@ public interface IDatabaseDao { Statistics getStatistics(); - SortOrder getSortOrder(String sessionkey, String questionVariant, String subject); + SortOrder createOrUpdateSortOrder(SortOrder sortOrder); - SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder); + SortOrder getSortOrder(String sessionkey, String questionVariant, String subject); } diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java index 01d87ebf1..e74990756 100644 --- a/src/main/java/de/thm/arsnova/entities/SortOrder.java +++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java @@ -17,13 +17,15 @@ */ package de.thm.arsnova.entities; +import java.util.List; + public class SortOrder { private String sessionId; private String sortType; private String questionVariant; private String subject; - private String[] sortOrder; + private List<String> sortOrder; private String _id; private String _rev; @@ -60,11 +62,11 @@ public class SortOrder { return this.subject; } - public void setSortOrder(final String[] sortOrder) { + public void setSortOrder(final List<String> sortOrder) { this.sortOrder = sortOrder; } - public String[] getSortOrder() { + public List<String> getSortOrder() { return this.sortOrder; } diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 46b940876..74c9c48fb 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -25,6 +25,7 @@ import de.thm.arsnova.entities.InterposedQuestion; import de.thm.arsnova.entities.InterposedReadingCount; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.User; +import de.thm.arsnova.entities.SortOrder; public interface IQuestionService { Question saveQuestion(Question question); @@ -137,7 +138,11 @@ public interface IQuestionService { int getAbstentionAnswerCount(String questionId); + SortOrder setSubjectSort(String sessionkey, String sortType, String questionVariant, String[] sortOrder); + String getSubjectSortType(String sessionkey, String isPreparation); + SortOrder setQuestionSort(String sessionkey, String subject, String sortType, String questionVariant, String[] sortOrder); + String getQuestionSortType(String sessionkey, String isPreparation, String subject); } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index f99039eba..77723fe67 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -23,10 +23,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; +import java.util.Dictionary; import de.thm.arsnova.exceptions.ForbiddenException; @@ -109,6 +111,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis public Question saveQuestion(final Question question) { final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword()); question.setSessionId(session.get_id()); + question.setTimestamp(long unixTime = System.currentTimeMillis() / 1000L); if ("freetext".equals(question.getQuestionType())) { question.setPiRound(0); @@ -138,14 +141,8 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis SortOrder sortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject()); if (sortOrder != null) { - if("alphabet".equals(sortOrder.getSortType())) { - - } - else { - String[] tmp = sortOrder.getSortOrder(); - tmp.append(question.get_id()); - sortOrder.setSortOrder(tmp); - } + addQuestionToSortOrder(sortOrder, question); + databaseDao.createOrUpdateSortOrder(sortOrder); } final NewQuestionEvent event = new NewQuestionEvent(this, session, result); @@ -790,15 +787,74 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis this.publisher = publisher; } + @Override + public SortOrder setSubjectSort(String sessionkey, String sortType, String questionVariant, String[] sortOrderList) { + Session session = databaseDao.getSessionFromKeyword(sessionkey); + SortOrder existing = databaseDao.getSortOrder(session.get_id(), questionVariant, ""); + SortOrder sortOrder = new SortOrder(); + if (existing != null) { + sortOrder.set_id(existing.get_id()); + sortOrder.set_rev(existing.get_rev()); + } + sortOrder.setSessionId(session.get_id()); + sortOrder.setSubject(""); + sortOrder.setSortType(sortType); + sortOrder.setQuestionVariant(questionVariant); + sortOrder.setSortOrder(Arrays.asList(sortOrderList)); + return databaseDao.createOrUpdateSortOrder(sortOrder); + } + @Override public String getSubjectSortType(String sessionkey, String isPreparation) { SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, ""); return sortOrder.getSortType(); } + @Override + public SortOrder setQuestionSort(String sessionkey, String subject, String sortType, String questionVariant, String[] sortOrderList) { + Session session = databaseDao.getSessionFromKeyword(sessionkey); + SortOrder existing = databaseDao.getSortOrder(session.get_id(), questionVariant, subject); + SortOrder sortOrder = new SortOrder(); + if (existing != null) { + sortOrder.set_id(existing.get_id()); + sortOrder.set_rev(existing.get_rev()); + } + sortOrder.setSessionId(session.get_id()); + sortOrder.setSubject(subject); + sortOrder.setSortType(sortType); + sortOrder.setQuestionVariant(questionVariant); + sortOrder.setSortOrder(Arrays.asList(sortOrderList)); + return databaseDao.createOrUpdateSortOrder(sortOrder); + } + @Override public String getQuestionSortType(String sessionkey, String isPreparation, String subject) { SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, subject); return sortOrder.getSortType(); } + + public SortOrder addQuestionToSortOrder(SortOrder sortOrder, Question question) { + List<String> tmpList = sortOrder.getSortOrder(); + tmpList.add(question.get_id()); + sortOrder.setSortOrder(tmpList); + if("alphabet".equals(sortOrder.getSortType())) { + sortOrder = alphabeticalSort(sortOrder); + } + return sortOrder; + } + + public SortOrder alphabeticalSort(SortOrder sortOrder){ + Hashtable<String, String> hash = new Hashtable(); + for (String qid : sortOrder.getSortOrder()) { + Question question = getQuestion(qid); + hash.put(question.getText(), qid); + } + List<String> sortList = new ArrayList(); + List<String> keys = new ArrayList(hash.keySet()); + for (String textKey : keys) { + sortList.add(hash.get(textKey)); + } + sortOrder.setSortOrder(sortList); + return sortOrder; + } } diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index ab234bcc8..4fb7ad73b 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -36,6 +36,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; import de.thm.arsnova.exceptions.NoContentException; import de.thm.arsnova.exceptions.NotFoundException; @@ -573,4 +574,16 @@ public class StubDatabaseDao implements IDatabaseDao { stats.setInterposedQuestions(0); return stats; } + + @Override + public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortOrder getSortOrder(String sessionkey, String questionVariant, String subject) { + // TODO Auto-generated method stub + return null; + } } -- GitLab