diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index c08bfe5602e01f8b56215596162012cd73e0f2b2..597f00f28c20b2a22d1733abca9e604116c3f0c4 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -437,4 +437,50 @@ public class LecturerQuestionController extends AbstractController { return questionService.getTotalAnswerCount(sessionkey); } } -} + + @RequestMapping(value = "/subjectsort", method = RequestMethod.POST) + public void setSubjectSortOrder( + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String sorttype, + @RequestParam(required = true) final String ispreparation, + @RequestBody String[] sortOrder + ) { + try { + questionService.setSort(sessionkey, "", sorttype, ispreparation, sortOrder) ; + } catch (final Exception e) { + throw new BadRequestException(); + } + } + + @RequestMapping(value = "/subjectsort", method = RequestMethod.GET) + public String getSubjectSortType( + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String ispreparation + ) { + return questionService.getSubjectSortType(sessionkey, ispreparation); + } + + @RequestMapping(value = "/questionsort", method = RequestMethod.POST) + public void setQuestionSortOrder( + @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 + ) { + try { + questionService.setSort(sessionkey, subject, sorttype, ispreparation, sortOrder); + } catch (final Exception e) { + throw new BadRequestException(); + } + } + + @RequestMapping(value = "/questionsort", method = RequestMethod.GET) + public String getQuestionSortType( + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String subject, + @RequestParam(required = true) final String ispreparation + ) { + return questionService.getQuestionSortType(sessionkey, ispreparation, subject); + } +} \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 7739c3d198cfa4c77d762e9320fb3bfc2d831dcd..22ccbc5b9409c1a04cb74d9b48dc81633ccce1ae 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -9,11 +9,11 @@ * * ARSnova Backend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.thm.arsnova.dao; @@ -70,6 +70,7 @@ import de.thm.arsnova.entities.PossibleAnswer; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.SessionInfo; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.entities.Statistics; import de.thm.arsnova.entities.User; import de.thm.arsnova.entities.VisitedSession; @@ -551,6 +552,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware q.put("gridScaleFactor", question.getGridScaleFactor()); q.put("imageQuestion", question.isImageQuestion()); q.put("textAnswerEnabled", question.isTextAnswerEnabled()); + q.put("timestamp", question.getTimestamp()); return q; } @@ -1184,7 +1186,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware // Not all users have visited sessions if (d.getJSONObject().optJSONArray("value") != null) { @SuppressWarnings("unchecked") - final Collection<Session> visitedSessions = JSONArray.toCollection( + final Collection<Session> visitedSessions = JSONArray.toCollection( d.getJSONObject().getJSONArray("value"), Session.class ); @@ -1942,4 +1944,131 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware info.setNumUnredInterposed(unreadInterposed); return info; } + + @Override + public List<String> getSubjects(Session session, String questionVariant) { + String viewString = ""; + if ("lecture".equals(questionVariant)) { + viewString = "skill_question/lecture_question_subjects_by_session"; + } + else { + viewString = "skill_question/preparation_question_subjects_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; + } + + Set<String> uniqueSubjects = new HashSet<>(); + + for (final Document d : results.getResults()) { + uniqueSubjects.add(d.getString("value")); + } + + List<String> uniqueSubjectsList = new ArrayList<>(uniqueSubjects); + + return uniqueSubjectsList; + } + + @Override + public List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject) { + String viewString = ""; + if ("lecture".equals(questionVariant)) { + viewString = "skill_question/lecture_question_ids_by_session_and_subject"; + } + else { + viewString = "skill_question/preparation_question_ids_by_session_and_subject"; + } + NovaView view = new NovaView(viewString); + view.setKey(session.get_id(), subject); + ViewResults results = this.getDatabase().view(view); + + if (results.getJSONArray("rows").optJSONObject(0) == null) { + return null; + } + + List<String> qids = new ArrayList<>(); + + for (final Document d : results.getResults()) { + final String s = d.getString("value"); + qids.add(s); + } + + return qids; + } + + @Override + public SortOrder getSortOrder(String sessionId, String questionVariant, String subject) { + String viewString = ""; + if ("preparation".equals(questionVariant)) { + viewString = "sort_order/preparation_question_sort_order_by_sessionid_and_subject"; + } + else if ("lecture".equals(questionVariant)) { + viewString = "sort_order/lecture_question_sort_order_by_sessionid_and_subject"; + } + + NovaView view = new NovaView(viewString); + view.setKey(sessionId, subject); + + ViewResults results = this.getDatabase().view(view); + + 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.setSubject(d.getJSONObject("value").getString("subject")); + 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; + } + + @Override + public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) { + try { + SortOrder oldSortOrder = getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject()); + Document d = new Document(); + + String id = ""; + String rev = ""; + if (oldSortOrder != null) { + id = oldSortOrder.get_id(); + rev = oldSortOrder.get_rev(); + d = database.getDocument(id, rev); + } + + 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()); + + database.saveDocument(d, id); + sortOrder.set_id(d.getId()); + sortOrder.set_rev(d.getRev()); + + return sortOrder; + } catch (IOException e) { + LOGGER.error("Could not save sort {}", 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 c60e1e296d6c7305367e6a3bbab2197aa65a7415..d7384fbce4cb13cdb7ecdd138d879771e3d28b40 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -9,11 +9,11 @@ * * ARSnova Backend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.thm.arsnova.dao; @@ -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 { @@ -196,4 +197,12 @@ public interface IDatabaseDao { SessionInfo importSession(User user, ImportExportSession importSession); Statistics getStatistics(); + + List<String> getSubjects(Session session, String questionVariant); + + List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject); + + SortOrder createOrUpdateSortOrder(SortOrder sortOrder); + + SortOrder getSortOrder(String sessionkey, String questionVariant, String subject); } diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java index 80311ff8a5e60719a181e0c06e807b2eaae92cf9..dd87a3eda8f0a2d5260f7490bc8104312d498a79 100644 --- a/src/main/java/de/thm/arsnova/entities/Session.java +++ b/src/main/java/de/thm/arsnova/entities/Session.java @@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; public class Session implements Serializable { private static final long serialVersionUID = 1L; - + private String type; private String name; private String shortName; @@ -321,4 +321,5 @@ public class Session implements Serializable { Session other = (Session) obj; return this.keyword.equals(other.keyword); } + } diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java new file mode 100644 index 0000000000000000000000000000000000000000..468023f543f7e1551f5a9e488d2d1de721e2af25 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java @@ -0,0 +1,88 @@ +/* + * This file is part of ARSnova Backend. + * Copyright (C) 2012-2015 The ARSnova Team + * + * ARSnova Backend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ARSnova Backend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +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 List<String> sortOrder; + + private String _id; + private String _rev; + + public void setSessionId(final String sessionId) { + this.sessionId = sessionId; + } + + public String getSessionId() { + return this.sessionId; + } + + public void setSortType(final String sortType) { + this.sortType = sortType; + } + + public String getSortType() { + return this.sortType; + } + + public void setQuestionVariant(final String questionVariant) { + this.questionVariant = questionVariant; + } + + public String getQuestionVariant() { + return this.questionVariant; + } + + public void setSubject(final String subject) { + this.subject = subject; + } + + public String getSubject() { + return this.subject; + } + + public void setSortOrder(final List<String> sortOrder) { + this.sortOrder = sortOrder; + } + + public List<String> getSortOrder() { + return this.sortOrder; + } + + public void set_id(final String id) { + _id = id; + } + + public String get_id() { + return _id; + } + + public void set_rev(final String rev) { + _rev = rev; + } + + public String get_rev() { + return _rev; + } +} diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 0581dfb6011fcde32d3972c4cdc102bf420b90e4..44332d428d73b54dd097b756021ba5fcdb40ec61 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -9,11 +9,11 @@ * * ARSnova Backend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.thm.arsnova.services; @@ -24,6 +24,7 @@ import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.InterposedQuestion; import de.thm.arsnova.entities.InterposedReadingCount; import de.thm.arsnova.entities.Question; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.entities.User; public interface IQuestionService { @@ -138,4 +139,10 @@ public interface IQuestionService { int getAbstentionAnswerCount(String questionId); String getImage(String questionId, String answerId); + + String getSubjectSortType(String sessionkey, String isPreparation); + + SortOrder setSort(String sessionkey, String subject, String sortType, String isPreparation, 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 fae75ff96c7b35ca8bc89aac5aed74d585a0cef0..6d411350f81186e302c2ddbc14e8b952b81d8c02 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -9,11 +9,11 @@ * * ARSnova Backend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.thm.arsnova.services; @@ -21,11 +21,12 @@ import java.util.AbstractMap; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; 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; @@ -45,6 +46,7 @@ import de.thm.arsnova.entities.InterposedQuestion; import de.thm.arsnova.entities.InterposedReadingCount; import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.SortOrder; import de.thm.arsnova.entities.User; import de.thm.arsnova.events.DeleteAllLectureAnswersEvent; import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent; @@ -111,6 +113,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(System.currentTimeMillis() / 1000L); if ("freetext".equals(question.getQuestionType())) { question.setPiRound(0); @@ -137,6 +140,27 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } final Question result = databaseDao.saveQuestion(session, question); + + 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.get_id()); + SortOrder newQSortOrder = new SortOrder(); + newQSortOrder.setSessionId(question.getSessionId()); + newQSortOrder.setSubject(question.getSubject()); + 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); this.publisher.publishEvent(event); @@ -589,12 +613,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis @PreAuthorize("isAuthenticated()") public List<Question> getLectureQuestions(final String sessionkey) { final Session session = getSession(sessionkey); - final User user = userService.getCurrentUser(); - if (session.isCreator(user)) { - return databaseDao.getLectureQuestionsForTeachers(session); - } else { - return databaseDao.getLectureQuestionsForUsers(session); + SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), "lecture", ""); + if (subjectSortOrder == null) { + subjectSortOrder = createSortOrder(session, "lecture", ""); } + final User user = userService.getCurrentUser(); + return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user)); } @Override @@ -613,12 +637,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis @PreAuthorize("isAuthenticated()") public List<Question> getPreparationQuestions(final String sessionkey) { final Session session = getSession(sessionkey); - final User user = userService.getCurrentUser(); - if (session.isCreator(user)) { - return databaseDao.getPreparationQuestionsForTeachers(session); - } else { - return databaseDao.getPreparationQuestionsForUsers(session); + SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), "preparation", ""); + if (subjectSortOrder == null) { + subjectSortOrder = createSortOrder(session, "preparation", ""); } + final User user = userService.getCurrentUser(); + return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user)); } private Session getSession(final String sessionkey) { @@ -811,4 +835,131 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis return answer.getAnswerImage(); } + + @Override + public String getSubjectSortType(String sessionkey, String isPreparation) { + SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, ""); + return sortOrder.getSortType(); + } + + @Override + public SortOrder setSort(String sessionkey, String subject, String sortType, String isPreparation, String[] sortOrderList) { + Session session = databaseDao.getSessionFromKeyword(sessionkey); + String questionVariant = "preparation"; + if ("false".equals(isPreparation)) { + questionVariant = "lecture"; + } + 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 addToSortOrder(SortOrder sortOrder, String toBeAdded) { + List<String> tmpList = sortOrder.getSortOrder(); + tmpList.add(toBeAdded); + sortOrder.setSortOrder(tmpList); + if("alphabet".equals(sortOrder.getSortType())) { + sortOrder = alphabeticalSort(sortOrder); + } + return databaseDao.createOrUpdateSortOrder(sortOrder); + } + + public List<Question> getQuestionsBySortOrder(SortOrder subjectSortOrder, boolean onlyActive) { + if (subjectSortOrder.getSortOrder() == null) { + return null; + } + if (subjectSortOrder.getSortOrder().isEmpty()) { + return null; + } + List<Question> questions = new ArrayList<Question>(); + List<String> subjects = subjectSortOrder.getSortOrder(); + for (String sub : subjects) { + SortOrder questionSortOrder = databaseDao.getSortOrder(subjectSortOrder.getSessionId(), subjectSortOrder.getQuestionVariant(), sub); + List<String> questionIds = questionSortOrder.getSortOrder(); + for (String t : questionIds) { + Question tempQuestion = getQuestion(t); + if (onlyActive) { + if (tempQuestion.isActive()) { + questions.add(tempQuestion); + } + } + else { + questions.add(tempQuestion); + } + } + } + return questions; + } + + public SortOrder createSortOrder(Session session, String questionVariant, String subject) { + if ("".equals(subject)) { + SortOrder subjectSortOrder = new SortOrder(); + subjectSortOrder.setSortOrder(databaseDao.getSubjects(session, questionVariant)); + subjectSortOrder.setSubject(""); + subjectSortOrder.setSortType("alphabetical"); + subjectSortOrder.setQuestionVariant(questionVariant); + subjectSortOrder.setSessionId(session.get_id()); + alphabeticalSort(subjectSortOrder); + List<String> subjects = subjectSortOrder.getSortOrder(); + for (String sub : subjects) { + createSortOrder(session, questionVariant, sub); + } + return databaseDao.createOrUpdateSortOrder(subjectSortOrder); + } + else { + SortOrder sortOrder = new SortOrder(); + sortOrder.setSessionId(session.get_id()); + sortOrder.setSubject(subject); + sortOrder.setQuestionVariant(questionVariant); + sortOrder.setSortType("alphabetical"); + sortOrder.setSortOrder(databaseDao.getQuestionIdsBySubject(session, questionVariant, subject)); + alphabeticalSort(sortOrder); + return databaseDao.createOrUpdateSortOrder(sortOrder); + } + } + + public SortOrder alphabeticalSort(SortOrder sortOrder){ + if (sortOrder.getSortOrder() == null) { + return null; + } + if (sortOrder.getSortOrder().isEmpty()) { + return null; + } + if ("".equals(sortOrder.getSubject())) { + List<String> subjects = sortOrder.getSortOrder(); + Collections.sort(subjects); + sortOrder.setSortOrder(subjects); + return sortOrder; + } + else { + 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()); + Collections.sort(keys); + 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 ab234bcc84f58f1cea84923da74f5b1f3b2eb70e..3916adf2e287e47c29c800af11c4c8a4218ee1d4 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -10,11 +10,11 @@ * * ARSnova is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.thm.arsnova.dao; @@ -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,28 @@ public class StubDatabaseDao implements IDatabaseDao { stats.setInterposedQuestions(0); return stats; } -} + + @Override + public List<String> getSubjects(Session session, String questionVariant) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject) { + // TODO Auto-generated method stub + return null; + } + + @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; + } +} \ No newline at end of file