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); }