/** {@inheritDoc} */
  public Component getViewAnswerUi() {
    EntityList entityList = this.uiService.newEntityList();
    entityList.setStyle(EntityList.Style.form);
    entityList.setIterator(
        this.uiService
            .newPropertyReference()
            .setReference("answer.question.typeSpecificQuestion.choices"),
        "choice");
    entityList.setEmptyTitle("no-answer");

    // include each choice only if the choice has been selected by the user
    PropertyReference entityIncludedProperty =
        this.uiService.newPropertyReference().setReference("choice.id");
    PropertyReference entityIncludedComparison =
        this.uiService.newPropertyReference().setReference("answer.typeSpecificAnswer.answer");
    CompareDecision entityIncludedDecision = this.uiService.newCompareDecision();
    entityIncludedDecision.setProperty(entityIncludedProperty);
    entityIncludedDecision.setEqualsProperty(entityIncludedComparison);
    entityList.setEntityIncluded(entityIncludedDecision);

    SelectionColumn selCol = this.uiService.newSelectionColumn();
    selCol.setSingle();
    selCol.setValueProperty(this.uiService.newTextPropertyReference().setReference("choice.id"));
    selCol.setProperty(
        this.uiService.newPropertyReference().setReference("answer.typeSpecificAnswer.answer"));
    selCol.setReadOnly(this.uiService.newTrueDecision());
    selCol.setCorrect(
        this.uiService
            .newPropertyReference()
            .setReference("answer.question.typeSpecificQuestion.correctAnswer"));
    selCol.setCorrectDecision(
        this.uiService
            .newDecision()
            .setProperty(
                this.uiService.newPropertyReference().setReference("answer.question.hasCorrect")));
    entityList.addColumn(selCol);

    PropertyColumn propCol = this.uiService.newPropertyColumn();
    propCol.setProperty(this.uiService.newHtmlPropertyReference().setReference("choice.text"));
    entityList.addColumn(propCol);

    return this.uiService.newFragment().setMessages(this.messages).add(entityList);
  }
  /** {@inheritDoc} */
  public Component getViewStatsUi() {
    Text question = this.uiService.newText();
    question.setText(
        null, this.uiService.newHtmlPropertyReference().setReference("question.presentation.text"));

    Attachments attachments = this.uiService.newAttachments();
    attachments.setAttachments(
        this.uiService.newPropertyReference().setReference("question.presentation.attachments"),
        null);
    attachments.setIncluded(
        this.uiService
            .newHasValueDecision()
            .setProperty(
                this.uiService
                    .newPropertyReference()
                    .setReference("question.presentation.attachments")));

    EntityList entityList = this.uiService.newEntityList();
    entityList.setStyle(EntityList.Style.form);
    entityList.setIterator(
        this.uiService.newPropertyReference().setReference("question.typeSpecificQuestion.choices"),
        "choice");
    entityList.setEmptyTitle("no-answer");

    SelectionColumn selCol = this.uiService.newSelectionColumn();
    selCol.setSingle();
    selCol.setValueProperty(this.uiService.newTextPropertyReference().setReference("choice.id"));
    selCol.setProperty(
        this.uiService
            .newPropertyReference()
            .setReference("question.typeSpecificQuestion.correctAnswer"));
    selCol.setReadOnly(this.uiService.newTrueDecision());
    selCol.setCorrect(
        this.uiService
            .newPropertyReference()
            .setReference("question.typeSpecificQuestion.correctAnswer"));
    selCol.setCorrectDecision(
        this.uiService
            .newDecision()
            .setProperty(
                this.uiService.newPropertyReference().setReference("question.hasCorrect")));
    entityList.addColumn(selCol);

    PropertyColumn propCol = this.uiService.newPropertyColumn();
    propCol.setProperty(this.uiService.newHtmlPropertyReference().setReference("choice.text"));
    entityList.addColumn(propCol);

    propCol = this.uiService.newPropertyColumn();
    propCol.setRight();
    propCol.setProperty(
        this.uiService
            .newHtmlPropertyReference()
            .setReference("choice.id")
            .setFormatDelegate(this.uiService.getFormatDelegate("FormatPercent", "sakai.mneme")));
    entityList.addColumn(propCol);

    propCol = this.uiService.newPropertyColumn();
    propCol.setRight();
    propCol.setProperty(
        this.uiService
            .newHtmlPropertyReference()
            .setReference("choice.id")
            .setFormatDelegate(this.uiService.getFormatDelegate("FormatCount", "sakai.mneme")));
    entityList.addColumn(propCol);

    Text answerKey = this.uiService.newText();
    PropertyReference[] refs = new PropertyReference[2];
    refs[0] = this.uiService.newIconPropertyReference().setIcon("/icons/answer_key.png");
    refs[1] =
        this.uiService
            .newHtmlPropertyReference()
            .setReference("question.typeSpecificQuestion.answerKey");
    answerKey.setText("answer-key", refs);

    Text unanswered =
        this.uiService
            .newText()
            .setText(
                null,
                this.uiService
                    .newHtmlPropertyReference()
                    .setFormatDelegate(
                        this.uiService.getFormatDelegate(
                            "FormatUnansweredPercent", "sakai.mneme")));

    Section first = this.uiService.newSection();
    first.add(question).add(attachments).add(entityList).add(unanswered);

    Section second = this.uiService.newSection();
    second.setIncluded(
        this.uiService
            .newDecision()
            .setProperty(
                this.uiService.newPropertyReference().setReference("question.hasCorrect")));
    second.add(answerKey);

    return this.uiService.newFragment().setMessages(this.messages).add(first).add(second);
  }