public ParameterHelper(AbstractScalarParameterHandle param, ULocale ulocale, TimeZone timezone) {
    this.labelColumnName = getLabelColumnName(param);
    this.valueColumnName = getValueColumnName(param);
    this.valueType = param.getDataType();
    this.alreadySorted = param.getSortByColumn() != null;
    this.distinct = param.distinct();

    String sortDirection = param.getSortDirection();
    boolean sortByLabel = "label".equalsIgnoreCase(param.getSortBy());
    if (param instanceof ScalarParameterHandle) {
      parameterType = SCALAR_PARAMETER;
      ScalarParameterHandle parameter = (ScalarParameterHandle) param;
      this.fixedOrder = parameter.isFixedOrder();
      if (param.getLabelExpr()
          == null) { // if no label expression was set, apply pattern to value column
        pattern = parameter.getPattern();
      }
    } else {
      parameterType = FILTER_PARAMETER;
    }

    if (!(parameterType == SCALAR_PARAMETER && fixedOrder)
        && !alreadySorted
        && sortDirection != null) {
      boolean sortDirectionValue =
          DesignChoiceConstants.SORT_DIRECTION_ASC.equalsIgnoreCase(sortDirection);
      Comparator choiceComparator =
          new SelectionChoiceComparator(sortByLabel, pattern, sortDirectionValue, ulocale);
      this.comparator = new DistinctComparatorDecorator(choiceComparator, distinct);
    }
    this.converter = new ReportParameterConverter(pattern, ulocale, timezone);
  }