/** @return */
  private AbstractCriterionParameter createChromosomeNumberParameter() {
    final String label = "Chromosome Number";
    TextFieldParameter textParameter =
        new TextFieldParameter(
            getParameters().size(), getRow().getRowIndex(), criterion.getChromosomeNumber());
    textParameter.setLabel(label);
    ValueHandler valueChangeHandler =
        new ValueHandlerAdapter() {

          @Override
          public boolean isValid(String value) {
            return !StringUtils.isBlank(value);
          }

          @Override
          public void validate(String formFieldName, String value, ValidationAware action) {
            if (!isValid(value)) {
              action.addActionError("Chromosome number value required for " + label);
            }
          }

          @Override
          public void valueChanged(String value) {
            criterion.setChromosomeNumber(value);
          }
        };
    textParameter.setValueHandler(valueChangeHandler);
    return textParameter;
  }
  /** @return */
  private AbstractCriterionParameter createFromCoordinateParameter() {
    final String label = "From";
    TextFieldParameter textParameter =
        new TextFieldParameter(
            getParameters().size(),
            getRow().getRowIndex(),
            criterion.getDisplayChromosomeCoordinateLow());
    textParameter.setLabel(label);
    ValueHandler valueChangeHandler =
        new ValueHandlerAdapter() {

          @Override
          public boolean isValid(String value) {
            return StringUtils.isBlank(value) || NumberUtils.isNumber(value);
          }

          @Override
          public void validate(String formFieldName, String value, ValidationAware action) {
            if (!isValid(value)) {
              action.addActionError("Numeric value required for " + label);
            }
          }

          @Override
          public void valueChanged(String value) {
            if (StringUtils.isBlank(value)) {
              criterion.setChromosomeCoordinateLow(null);
            } else {
              criterion.setChromosomeCoordinateLow(Integer.valueOf(value));
            }
          }
        };
    textParameter.setValueHandler(valueChangeHandler);
    return textParameter;
  }