private Assessment createAssessment(Group g, int questionCount, int reinforcementCount) {
    Assessment a = new Assessment();
    a.setGroup(g);

    List<AssessmentMessage> messages = new ArrayList<AssessmentMessage>();
    for (int i = 0; i < Math.max(questionCount, reinforcementCount); ++i) {
      if (i < questionCount) {
        Question q = new Question();
        q.setAnswers(new String[3]);
        questionDao.save(q);
        messages.add(new AssessmentMessage(q));
      }
      if (i < reinforcementCount) {
        Reinforcement r = new Reinforcement();
        reinforcementDao.save(r);
        messages.add(new AssessmentMessage(r));
      }
    }
    a.setMessages(messages);

    assessmentDao.save(a);

    return a;
  }
  private void createResponse(Contact c, Assessment a, int questionNumber, boolean correct) {
    AssessmentMessage am = null;
    for (AssessmentMessage m : a.getMessages()) {
      if (m.getTopicItem() instanceof Question) {
        if (--questionNumber < 0) {
          am = m;
          break;
        }
      }
    }
    if (am == null) throw new RuntimeException("Could not find question #" + questionNumber);

    Question q = (Question) am.getTopicItem();
    int answer = correct ? q.getCorrectAnswer() : q.getCorrectAnswer() + 1 % q.getAnswers().length;
    AssessmentMessageResponse r = new AssessmentMessageResponse();
    r.setStudent(c);
    r.setAnswer(answer);
    r.setAssessmentMessage(am);
    r.setCorrect(correct);
    assessmentMessageResponseDao.save(r);
  }