Ignore:
Timestamp:
02/23/15 08:18:26 (9 years ago)
Author:
Twan Goosen
Message:

Values provider uses converted field value when sorting
Refs #553

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java

    r5154 r6005  
    3838import org.apache.wicket.model.IModel;
    3939import org.apache.wicket.model.Model;
     40import org.apache.wicket.util.convert.IConverter;
    4041import org.slf4j.Logger;
    4142import org.slf4j.LoggerFactory;
     
    4950 */
    5051public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> implements ListProvider<FacetField.Count> {
    51 
     52   
    5253    private final static Logger logger = LoggerFactory.getLogger(FacetFieldValuesProvider.class);
    5354    private final IModel<FacetField> model;
    5455    private final int maxNumberOfItems;
    5556    private final Collection<String> lowPriorityValues;
     57    private final FieldValueConverterProvider fieldValueConverterProvider;
    5658
    5759    /**
     
    7173     * @param lowPriorityValues values that should with low priority (e.g.
    7274     * unknown, unspecified)
    73      */
    74     public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues) {
    75         this(model, Integer.MAX_VALUE, lowPriorityValues);
     75     * @param fieldValueConverterProvider
     76     */
     77    public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) {
     78        this(model, Integer.MAX_VALUE, lowPriorityValues, fieldValueConverterProvider);
    7679    }
    7780
     
    8184     * @param max maximum number of values to show
    8285     * @param lowPriorityValues (e.g. unknown, unspecified)
    83      */
    84     public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues) {
    85         this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false));
    86     }
    87 
    88     public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort) {
    89         this(model, max, null, sort);
     86     * @param fieldValueConverterProvider
     87     */
     88    public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) {
     89        this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), fieldValueConverterProvider);
     90    }
     91   
     92    public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) {
     93        this(model, max, null, sort, fieldValueConverterProvider);
    9094    }
    9195
     
    97101     * @param lowPriorityValues (e.g. unknown, unspecified)
    98102     * @param sort initial sort property and order
    99      */
    100     public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort) {
     103     * @param fieldValueConverterProvider
     104     */
     105    public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) {
    101106        this.model = model;
    102107        this.maxNumberOfItems = max;
    103108        this.lowPriorityValues = lowPriorityValues;
     109        this.fieldValueConverterProvider = fieldValueConverterProvider;
    104110        setSort(sort);
    105111    }
     
    113119        return null;
    114120    }
    115 
     121   
    116122    @Override
    117123    public Iterator<? extends FacetField.Count> iterator(long first, long count) {
     
    119125        return getList().listIterator((int) first);
    120126    }
    121 
     127   
    122128    @Override
    123129    public List<? extends FacetField.Count> getList() {
     
    132138        }
    133139    }
    134 
     140   
    135141    @Override
    136142    public long size() {
     
    140146        return size;
    141147    }
    142 
     148   
    143149    @Override
    144150    public IModel<FacetField.Count> model(FacetField.Count object) {
     
    161167        }
    162168    }
    163 
     169   
    164170    private Iterable<Count> getFilteredValues() {
    165171        if (filtered == null) {
     
    170176        return filtered;
    171177    }
    172 
     178   
    173179    private long getSize() {
    174180        if (hasFilter()) {
     
    182188        }
    183189    }
    184 
     190   
    185191    private boolean hasFilter() {
    186192        return getFilterModel() != null && getFilterModel().getObject() != null && !getFilterModel().getObject().isEmpty();
     
    200206        }
    201207    }
    202 
     208   
    203209    private Ordering getBaseOrdering() {
    204210        final Ordering ordering;
     
    206212            ordering = new CountOrdering();
    207213        } else if (getSort().getProperty() == FieldValuesOrder.NAME) {
    208             ordering = new NameOrdering(getLocale());
     214            ordering = new NameOrdering(getLocale(), fieldValueConverterProvider.getConverter(model.getObject().getName()));
    209215        } else {
    210216            ordering = Ordering.natural();
    211217        }
    212 
     218       
    213219        if (getSort().isAscending()) {
    214220            return ordering;
     
    217223        }
    218224    }
    219 
     225   
    220226    protected Locale getLocale() {
    221227        try {
     
    229235        return Locale.getDefault();
    230236    }
    231 
     237   
    232238    private final static class CountOrdering extends Ordering<FacetField.Count> {
    233 
     239       
    234240        @Override
    235241        public int compare(Count arg0, Count arg1) {
     
    237243        }
    238244    };
    239 
     245   
    240246    private final static class NameOrdering extends Ordering<FacetField.Count> implements Serializable {
    241 
     247       
    242248        private final Collator collator;
    243 
    244         public NameOrdering(Locale locale) {
     249        private final IConverter<String> converter;
     250        private final Locale locale;
     251       
     252        public NameOrdering(Locale locale, IConverter<String> converter) {
    245253            collator = Collator.getInstance(locale);
    246254            collator.setStrength(Collator.PRIMARY);
    247         }
    248 
     255            this.converter = converter;
     256            this.locale = locale;
     257        }
     258       
    249259        @Override
    250260        public int compare(Count arg0, Count arg1) {
    251             return collator.compare(arg0.getName(), arg1.getName());
     261            if (converter == null) {
     262                return collator.compare(arg0.getName(), arg1.getName());
     263            } else {
     264                return collator.compare(
     265                        converter.convertToString(arg0.getName(), locale),
     266                        converter.convertToString(arg1.getName(), locale));
     267            }
    252268        }
    253269    };
     
    258274     */
    259275    private static class PriorityOrdering extends Ordering<FacetField.Count> {
    260 
     276       
    261277        private final Collection<String> lowPriorityValues;
    262 
     278       
    263279        public PriorityOrdering(Collection<String> lowPriorityValues) {
    264280            this.lowPriorityValues = lowPriorityValues;
    265281        }
    266 
     282       
    267283        @Override
    268284        public int compare(Count arg0, Count arg1) {
    269 
     285           
    270286            if (lowPriorityValues.contains(arg0.getName())) {
    271287                if (!lowPriorityValues.contains(arg1.getName())) {
     
    281297            return 0;
    282298        }
    283 
     299       
    284300    };
    285 
     301   
    286302    @Override
    287303    public void detach() {
Note: See TracChangeset for help on using the changeset viewer.