@Override
  protected void formOK(UserRequest ureq) {
    commitFields();
    commitStepLabels();

    String selectedType = typeEl.getSelectedKey();
    SliderType type = SliderType.valueOf(selectedType);
    rubric.setSliderType(type);
    if (type == SliderType.continuous) {
      rubric.setStart(1);
      rubric.setEnd(100);
      rubric.setSteps(100);
    } else {
      int steps = Integer.parseInt(stepsEl.getSelectedKey());
      rubric.setStart(1);
      rubric.setEnd(steps);
      rubric.setSteps(steps);
    }

    for (Iterator<Slider> sliderIt = rubric.getSliders().iterator(); sliderIt.hasNext(); ) {
      Slider slider = sliderIt.next();
      if (!StringHelper.containsNonWhitespace(slider.getStartLabel())
          && !StringHelper.containsNonWhitespace(slider.getEndLabel())) {
        sliderIt.remove();
      }
    }

    rubricCtrl.updateForm();

    fireEvent(ureq, new ChangePartEvent(rubric));
    fireEvent(ureq, new ClosePartEvent(rubric));
  }
  private void commitStepLabels() {
    if (!typeEl.isOneSelected()) return;

    SliderType selectedType = SliderType.valueOf(typeEl.getSelectedKey());
    if (selectedType == SliderType.discrete || selectedType == SliderType.discrete_slider) {
      if (rubric.getStepLabels() == null) {
        rubric.setStepLabels(new ArrayList<>());
      }

      int steps = Integer.parseInt(stepsEl.getSelectedKey());
      for (int i = 0; i < stepLabels.size() && i < steps; i++) {
        StepLabelColumn stepLabel = stepLabels.get(i);
        if (i < rubric.getStepLabels().size()) {
          rubric.getStepLabels().get(i).setLabel(stepLabel.getStepLabelEl().getValue());
        } else {
          StepLabel label = new StepLabel();
          label.setId(UUID.randomUUID().toString());
          label.setLabel(stepLabel.getStepLabelEl().getValue());
          rubric.getStepLabels().add(label);
        }
      }

      if (rubric.getStepLabels().size() > steps) {
        List<StepLabel> labels = new ArrayList<>(rubric.getStepLabels().subList(0, steps));
        rubric.setStepLabels(labels);
      }
    } else {
      rubric.getStepLabels().clear();
    }
  }
  private void updateTypeSettings() {
    if (!typeEl.isOneSelected()) return;

    SliderType selectedType = SliderType.valueOf(typeEl.getSelectedKey());
    if (selectedType == SliderType.discrete || selectedType == SliderType.discrete_slider) {
      stepsEl.setVisible(true);
    } else if (selectedType == SliderType.continuous) {
      stepsEl.setVisible(false);
    }
  }