From 77f940055418ec21cc772403e7546621d822cb19 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Sat, 14 Mar 2015 12:46:33 +0100 Subject: [PATCH] Fix NPE when locked questions with answers are present --- .../de/thm/arsnova/services/QuestionService.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index e90f2b64..4ed5e559 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -31,8 +31,6 @@ import java.util.TimerTask; import java.util.Dictionary; import java.util.Collections; -import de.thm.arsnova.exceptions.ForbiddenException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -63,6 +61,7 @@ import de.thm.arsnova.events.NewQuestionEvent; import de.thm.arsnova.events.PiRoundDelayedStartEvent; import de.thm.arsnova.events.PiRoundEndEvent; import de.thm.arsnova.exceptions.BadRequestException; +import de.thm.arsnova.exceptions.ForbiddenException; import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.exceptions.UnauthorizedException; @@ -223,6 +222,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis this.publisher.publishEvent(event); } + @Override public void startNewPiRound(final String questionId, User user) { if(null == user) { user = userService.getCurrentUser(); @@ -254,6 +254,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis cancelDelayedPiRoundChange(questionId); timer.schedule(new TimerTask() { + @Override public void run() { questionService.startNewPiRound(questionId, user); } @@ -268,6 +269,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis this.publisher.publishEvent(new PiRoundDelayedStartEvent(this, session, question)); } + @Override public void cancelDelayedPiRoundChange(final String questionId) { Timer timer = timerList.get(questionId); @@ -428,6 +430,11 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis final List<Answer> filteredAnswers = new ArrayList<Answer>(); for (final Answer answer : answers) { final Question question = questionIdToQuestion.get(answer.getQuestionId()); + if (question == null) { + // Question is not present. Most likely it has been locked by the + // Session's creator. Locked Questions do not appear in this list. + continue; + } if (0 == answer.getPiRound() && !"freetext".equals(question.getQuestionType())) { answer.setPiRound(1); } @@ -516,7 +523,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis final User user = userService.getCurrentUser(); return update(question, user); } - + @Override @PreAuthorize("isAuthenticated()") public Question update(final Question question, User user) { -- GitLab