@Override
  protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {

    FormLayoutContainer groupGradingCont =
        FormLayoutContainer.createDefaultFormLayout("groupGrading", getTranslator());
    groupGradingCont.setRootForm(mainForm);
    formLayout.add(groupGradingCont);

    applyToAllEl =
        uifactory.addCheckboxesHorizontal(
            "applytoall", "group.apply.toall", groupGradingCont, onKeys, onValues);
    applyToAllEl.addActionListener(FormEvent.ONCHANGE);
    applyToAllEl.setElementCssClass("o_sel_course_gta_apply_to_all");

    if (withPassed && cutValue == null) {
      groupPassedEl =
          uifactory.addCheckboxesHorizontal(
              "checkgroup", "group.passed", groupGradingCont, onKeys, onValues);
      groupPassedEl.setElementCssClass("o_sel_course_gta_group_passed");
    }

    if (withScore) {
      String pointVal = "";
      groupScoreEl =
          uifactory.addTextElement("pointgroup", "group.score", 5, pointVal, groupGradingCont);
      groupScoreEl.setElementCssClass("o_sel_course_gta_group_score");
    }

    if (withComment) {
      String comment = "";
      groupCommentEl =
          uifactory.addTextAreaElement(
              "usercomment", "group.comment", 2500, 5, 40, true, comment, groupGradingCont);
      groupCommentEl.setElementCssClass("o_sel_course_gta_group_comment");
    }

    FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
    if (isAdministrativeUser) {
      columnsModel.addFlexiColumnModel(
          new DefaultFlexiColumnModel(Cols.username.i18nKey(), Cols.username.ordinal()));
    }

    int i = 0;
    for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
      int colIndex = GTACoachedGroupGradingController.USER_PROPS_OFFSET + i++;
      if (userPropertyHandler == null) continue;

      String propName = userPropertyHandler.getName();
      boolean visible =
          userManager.isMandatoryUserProperty(
              GTACoachedGroupGradingController.USER_PROPS_ID, userPropertyHandler);
      if (visible) {
        FlexiColumnModel col;
        if (UserConstants.FIRSTNAME.equals(propName) || UserConstants.LASTNAME.equals(propName)) {
          col =
              new DefaultFlexiColumnModel(
                  userPropertyHandler.i18nColumnDescriptorLabelKey(),
                  colIndex,
                  userPropertyHandler.getName(),
                  true,
                  propName,
                  new StaticFlexiCellRenderer(
                      userPropertyHandler.getName(), new TextFlexiCellRenderer()));
        } else {
          col =
              new DefaultFlexiColumnModel(
                  true,
                  userPropertyHandler.i18nColumnDescriptorLabelKey(),
                  colIndex,
                  true,
                  propName);
        }
        columnsModel.addFlexiColumnModel(col);
      }
    }

    if (withPassed && cutValue == null) {
      columnsModel.addFlexiColumnModel(
          new DefaultFlexiColumnModel(Cols.passedEl.i18nKey(), Cols.passedEl.ordinal()));
    }

    if (withScore) {
      columnsModel.addFlexiColumnModel(
          new DefaultFlexiColumnModel(Cols.scoreEl.i18nKey(), Cols.scoreEl.ordinal()));
    }

    if (withComment) {
      columnsModel.addFlexiColumnModel(
          new DefaultFlexiColumnModel(Cols.commentEl.i18nKey(), Cols.commentEl.ordinal()));
    }

    model = new GroupAssessmentModel(gtaNode, userPropertyHandlers, getLocale(), columnsModel);
    table =
        uifactory.addTableElement(
            getWindowControl(), "group-list", model, getTranslator(), formLayout);
    table.setCustomizeColumns(true);
    table.setEditMode(true);
    table.setAndLoadPersistedPreferences(ureq, "gtagroup-assessment");

    FormLayoutContainer buttonsCont =
        FormLayoutContainer.createButtonLayout("buttons", getTranslator());
    formLayout.add(buttonsCont);
    uifactory.addFormSubmitButton("save", buttonsCont);
    saveAndDoneButton = uifactory.addFormLink("save.done", buttonsCont, Link.BUTTON);
    uifactory.addFormCancelButton("cancel", buttonsCont, ureq, getWindowControl());
  }